gradle - Gradle传递依赖项不尊重版本

标签 gradle dependencies dependency-resolution

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

相关文章:

java - 由于 java.lang.NoClassDefFoundError : jdk/internal/reflect/GeneratedSerializationConstructorAccessor1 无法运行 gradle 测试任务

chalice 未能建立 war

multithreading - 如何指定SBT在任何命令期间使用的线程数?

android - 无法解析 : support-compat ONLY FOR :27. 1.1

gradle - Gradle如何在我的buildscript block 中为SNAPSHOT版本指定cacheResolutionStrategy?

android - 由于 'android.content.res.Resources$NotFoundException',检测运行失败

android - 如何使用gradle自己搭建appcompat(支持v7)?

android - 在 Gradle 中生成声明名称不带任何后缀的 APK

firebase - 错误:Failed to resolve: common in android studio

dependencies - Debian包依赖,安装特定版本,不是最新的