情况

我有多个使用JFrog Bintray的Android插件。这些都位于不同的 maven 存储库中。所有这些都有专用存储库,因此在解决这些依赖性之前需要先进行身份验证。内部正在开发的是项目A 项目B ,还有第三方开发的项目C ,它需要将项目B 实现为依赖项,而该依赖项又依赖于项目。对于项目A ,将有一个 Bintray用户1 ,该用户已被授予项目A 的权限。第三方还将有一个 Bintray用户2 ,以针对项目B 对其进行身份验证。

项目B 中,对项目A 的依赖性如下:

repositories {
    jcenter()

    maven {
        credentials {
            username = 'bintrayUser1'
            password = 'bintrayAPIKeyForUser1'
        }
        url  "https://url-to-projectA"
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.project:A:1.0.0'
}

现在,还有另一个项目C ,它与项目B 有关,如下所示:
allprojects {
    repositories {
        jcenter()
        maven {
            url "https://link-to-projectB"
            credentials {
                username = 'bintrayUser2'
                password = 'bintrayAPIKeyForUser2'
            }
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.project:B:1.0.0'
}

问题

发生的问题是,要求 Bintray用户2 告诉项目C 哪里项目A 是并且需要对其进行身份验证。我想知道 Bintray用户2 是否有可能不需要告诉项目C 项目A 的位置,而是从项目B 复制过来。

身份验证也是如此。 bintray用户2 是否可以从 bintray用户1 的身份验证中复制项目A

非首选解决方案

现在,我可以做的是项目C 也可以告诉项目B 中每个依赖项的位置,但这并不能很好地扩展。这就是我要放入项目B 项目C 的每个私有(private)依赖项,都需要查找并需要进行身份验证。它看起来像这样:
allprojects {
    repositories {
        jcenter()
        maven {
            url "https://link-to-projectA"
            credentials {
                username = 'bintrayUser2'
                password = 'bintrayAPIKeyForUser2'
            }
        }
        maven {
            url "https://link-to-projectB"
            credentials {
                username = 'bintrayUser2'
                password = 'bintrayAPIKeyForUser2'
            }
        }
        maven {
            url "https://link-to-projectX"
            credentials {
                username = 'bintrayUser2'
                password = 'bintrayAPIKeyForUser2'
            }
        }
        maven {
            url "https://link-to-projectX"
            credentials {
                username = 'bintrayUser2'
                password = 'bintrayAPIKeyForUser2'
            }
        }
        maven {
            url "https://link-to-projectX"
            credentials {
                username = 'bintrayUser2'
                password = 'bintrayAPIKeyForUser2'
            }
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.project:B:1.0.0'
}

这将变得难以管理,并且您可能不想授予 bintray用户2 权限。

再说一次,有没有办法复制依赖项的位置和授权?

最佳答案

您必须使用“非首选解决方案”。

当Gradle构建项目C 时,它将从maven中下载依赖项compile 'com.project:B:1.0.0'

使用依赖项,它还会下载包含嵌套依赖项com.project:A:1.0.0的pom文件。然后,它尝试从您在projectC/build.gradle(或顶层)中添加的存储库中下载依赖项。
目前,gradle 不使用projectB / build.gradle的,而仅使用pom文件。

这意味着gradle 无法知道凭据来下载依赖项,而无需将它们添加到projectC/build.gradle文件中。

关于java - Gradle传递存储库和凭证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38117765/

10-10 04:02