gradle - Gradle 找不到不存在的前缀版本传递依赖
问题描述
我有一个多模块gradle
项目,在一个模块中,我compile
在运行时的配置中添加依赖项。
这些依赖项使用不存在的版本前缀获取传递依赖项。
所以情况是这样的
compile 'group:moduleA:version.+'
这个用相同的前缀符号moduleA
下载,而另一个用相同的前缀符号下载,存在于 10 及更高版本和 8 及更低版本的工件中,因此没有 9 号版本,gradle 坚持使用版本 9 查找,它没有'不要获取高于或低于它的版本。moduleB
version.+
moduleC
moduleC
moduleC
如果它试图找到的版本不存在,我如何让 gradle 获取另一个版本?
请发表评论以获得任何澄清,并感谢您的帮助。
编辑:想澄清一下,+
在版本部分没有解析为正确且存在于工件上的数字,例如9.1
or 9.12
。
gradle
确定此版本,该版本不正确,例如9.1
存在,但它解析为9.2
或其他不存在的数字。
EDIT2:用于获取依赖项然后将它们添加到compile
配置中的任务。
task addAdditionalDependencies {
doLast {
Object slurper = new JsonSlurper().parseText(api.jsonResponse())
Set<String> dependencyNames = configurations.compile.dependencies.collect { it.name }
List<Map<String, String>> artifactPaths = slurper.results.collect {
String[] pathSegments = it.path.split('/')
if (!dependencyNames.contains(pathSegments[1]) && project.name != pathSegments[1]) {
[group: pathSegments[0],
name: pathSegments[1],
version: "version.+",
configuration: 'compile']
} else [:]
}
artifactPaths.each {
if (!it.isEmpty()) {
project.dependencies.add('compile', it)
}
}
// we have to call this because app does not have any source files and so compileJava does not download
// dependencies
configurations.compile.files
}
}
解决方案
当使用类似 的版本时9.+
,Gradle 将查找与前缀匹配的所有版本,即.之前的部分+
。
但是,如果不存在这样的版本,则无法让 Gradle 忽略该部分。
如果版本moduleC
可以是任何东西,那么您可以简单地使用+
不带任何前缀。
请注意,除了发布的新版本之外,即使没有任何变化,做类似的事情也可能会使您在构建中受到破坏moduleC
。
您还可以将此动态版本解析与依赖锁定结合起来,以便对何时升级进行更细粒度的控制moduleC
。
推荐阅读
- android - 二进制 XML 文件第 9 行:膨胀类 com.google.android.gms.ads.AdView 时出错
- ubuntu - apt-get 在 xenial 上安装仿生包
- javascript - 每天特定时间的触发功能nodejs
- ionic-framework - Ionic 1 动态更改模板上的文本
- tensorflow - tensorflowjs 转换器抛出“不支持 dtype int64”
- firebase - 如何使用 firebase_auth 包修复 Flutter 应用程序中的 FirebaseAuth.instance.currentUser()?它总是返回 null
- c++ - 在 C++ 中包装 char* 的最佳方法是什么?
- c++ - 以下代码有什么区别或错误?
- java - 即使我添加了 Firebase 库,我的应用也会因 Firebase 存储而崩溃
- c# - 使用 C# 进行手部检测