我有一个Gradle 3.5项目,在该项目中,我依赖 Artifact :
compile "a.b.c:depProject:1.1.0"
“depProject”是一个Maven项目,在该项目的pom文件中,它依赖于另一个 Artifact :
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.4.0</version>
</dependency>
现在,当我在项目上执行“渐变依赖项”时,它正确地表明我应该通过传递依赖项解析来获得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"
}
然后,在生成的“等级依赖”调用中没有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"
最佳答案
如果两个传递依赖项之间存在冲突,则Gradle仅选择依赖关系的较新版本。因此,您是否发现了gradle中的错误,或者项目中的其他内容取决于
org.apache.solr:solr-solrj:5.5.4
赶紧跑
gradle dependencies | grep -B5 solrj:5
看看是否真的不依赖该版本。
您也可以强制使用某种解决方案,搜索
gradle force version
会很快为您提供答案,但是由于这会降低solrj的级别,因此您在决定之前应首先找出问题所在。
关于gradle - Gradle传递依赖项不尊重版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47719680/