情况
我有多个使用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/