1

我有一个 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>

现在,当我对我的项目执行“gradle dependencies”时,它正确地表明我应该通过传递依赖解析获得 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 会自动“升级”我的依赖项?有没有办法让它停止,而不是直接依赖传递依赖,指定我想要的版本?

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

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

然后在生成的“gradle dependencies”调用中没有 solrj 依赖,因此在更高版本中没有其他地方依赖 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"
4

1 回答 1

0

如果两个传递依赖项之间存在冲突,Gradle 只会选择更新版本的依赖项。所以要么你在 gradle 中发现了一个错误,要么你的项目中的其他东西取决于

org.apache.solr:solr-solrj:5.5.4

赶紧跑

gradle dependencies | grep -B5 solrj:5

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

你也可以强制一定的分辨率,搜索gradle force version会很快给你答案,但由于这会降级 solrj,你应该先找出问题所在再决定。

于 2017-12-09T15:41:56.073 回答