我有多个使用JFrog Bintray的Android插件。这些都位于不同的 maven 存储库中。所有这些都有私有存储库,因此需要在解析这些依赖项之前进行身份验证。正在内部开发的项目A 和项目B 以及由第三方开发的项目C ,需要实施项目B 作为依赖项,而依赖项项目A 。对于项目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 的每个私人依赖项都需要找到并需要进行身份验证。它看起来像这样:
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 权限。
那么,有没有办法复制依赖关系位置和授权?
答案 0 :(得分:4)
您必须使用“非首选解决方案”。
当Gradle构建 projectC 时,它会从maven下载依赖项<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="right-arrow" onclick="moveList('-=50px')"></div>
<div id="left-arrow" onclick="moveList('+=50px')"></div>
<div class="list">
<div class="list-item">1</div>
<div class="list-item">2</div>
<div class="list-item">3</div>
<div class="list-item">4</div>
<div class="list-item">5</div>
<div class="list-item">6</div>
<div class="list-item">7</div>
<div class="list-item">8</div>
<div class="list-item">9</div>
<div class="list-item">10</div>
</div>
。
使用依赖项,它还会下载包含嵌套依赖项compile 'com.project:B:1.0.0'
的pom文件。然后它尝试从您在com.project:A:1.0.0
(或顶级)中添加的存储库下载依赖项
在这一刻,gradle 不使用 projectB / build.gradle,但只使用pom文件。
这意味着gradle 无法知道凭据,无需在projectC/build.gradle
文件中添加相关内容即可下载相关内容。