Gradle传递依赖不尊重版本

时间:2017-12-08 17:48:16

标签: gradle dependencies dependency-resolution

我有一个Gradle 3.5项目,在那个项目中我依赖于一个工件:

compile "a.b.c:depProject:1.1.0"

" depProject"是一个Maven项目,在该项目的pom文件中,它依赖于另一个工件:

   <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-solrj</artifactId>
        <version>4.4.0</version>
   </dependency>

现在,当我执行&#34; gradle依赖&#34;在我的项目中,它正确地表明我应该通过传递依赖性解析获得solrj依赖,但它并不尊重4.4.0版本声明,而是我的项目依赖于版本5.5.4。

+--- a.b.c:depProject:1.1.0
|    \--- org.apache.solr:solr-solrj:4.4.0 -> 5.5.4

这些行在依赖关系报告中多次出现,始终相同。

为什么Gradle&#34;升级&#34;我的依赖自动?有没有办法让它停止,除了直接依赖传递依赖,指定我想要的版本?

注意,如果我通过以下方式在项目中排除solrj依赖项:

compile ("a.b.c:depProject:1.1.0") {
    exclude group:"org.apache.solr" module:"solr-solrj"
}

然后在得到的&#34; gradle依赖关系中没有solrj依赖关系&#34;打电话,所以没有其他地方可以在更高版本上依赖solrj。

我无法发布整个build.gradle,但我可以展示应用了哪些插件:

apply plugin:"idea"
apply plugin:"org.grails.grails-web"
apply plugin:"com.moowork.node"
apply plugin:"org.grails.plugins.views-json"
apply plugin: "org.grails.grails-gsp"
apply plugin: "maven"
apply plugin: "codenarc"
apply plugin: "jacoco"
apply plugin: "org.sonarqube"
apply plugin: "asset-pipeline"

1 个答案:

答案 0 :(得分:0)

如果两个传递依赖项之间存在冲突,Gradle只会选择较新版本的依赖项。因此,要么您在gradle中发现了错误,要么项目中的其他内容依赖于

org.apache.solr:solr-solrj:5.5.4

跑步

gradle dependencies | grep -B5 solrj:5

看看是否真的没有依赖该版本。

你也可以强制某种分辨率,搜索gradle force version会很快给你答案,但由于这会降级solrj,你应该在决定之前先找出错误。