首页 > 解决方案 > Gradle 找不到不存在的前缀版本传递依赖

问题描述

我有一个多模块gradle项目,在一个模块中,我compile在运行时的配置中添加依赖项。

这些依赖项使用不存在的版本前缀获取传递依赖项。

所以情况是这样的

compile 'group:moduleA:version.+'

这个用相同的前缀符号moduleA下载,而另一个用相同的前缀符号下载,存在于 10 及更高版本和 8 及更低版本的工件中,因此没有 9 号版本,gradle 坚持使用版本 9 查找,它没有'不要获取高于或低于它的版本。moduleBversion.+moduleCmoduleCmoduleC

如果它试图找到的版本不存在,我如何让 gradle 获取另一个版本?

请发表评论以获得任何澄清,并感谢您的帮助。

编辑:想澄清一下,+在版本部分没有解析为正确且存在于工件上的数字,例如9.1or 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
    }
}

标签: gradledependenciesbuild.gradleversioningtransitive-dependency

解决方案


当使用类似 的版本时9.+,Gradle 将查找与前缀匹配的所有版本,即.之前的部分+

但是,如果不存在这样的版本,则无法让 Gradle 忽略该部分。

如果版本moduleC可以是任何东西,那么您可以简单地使用+不带任何前缀。

请注意,除了发布的新版本之外,即使没有任何变化,做类似的事情也可能会使您在构建中受到破坏moduleC

您还可以将此动态版本解析与依赖锁定结合起来,以便对何时升级进行更细粒度的控制moduleC


推荐阅读