我在IntelliJ IDEA 2016中编辑了两个使用Gradle依赖管理的项目:项目A和项目B.
项目A将elasticsearch的编译范围依赖项定义为:
compile 'org.elasticsearch:elasticsearch:2.3.1'
项目B声明项目A的编译范围依赖项,如下所示:
compile 'com.mycompany:elasticsearch-common:2.3.1'
我希望,在IntelliJ IDEA 2016的Gradle工具窗口中,项目B可以看到:
...
com.mycompany:elasticsearch-common:2.3.1 (Compile)
org.elasticsearch:elasticsearch:2.3.1 (Compile)
...
相反,我看到:
...
com.mycompany:elasticsearch-common:2.3.1 (Compile)
org.elasticsearch:elasticsearch:1.5.2 (Compile)
...
项目B中没有其他依赖项依赖于elasticsearch,因此它不会被另一个依赖项声明覆盖 .
实际上,项目A的nexus上的pom.xml有:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.3.1</version>
<scope>compile</scope>
</dependency>
那么为什么IntelliJ报告elasticsearch的传递版本为1.5.2?
我尝试过的:
-
在项目B目录中删除.idea和.gradle
-
删除gradle缓存
-
使IntelliJ无效并在IntelliJ中重新启动
-
咒骂
-
喝了很多茶
-
问朋友和同事
-
通过电子邮件发送奥普拉
-
当所有这一切都很好时(现在不再是),恢复到IntelliJ 15
-
上厕所(与5相关)并希望我回来时神奇地修复自己
以上都不是 .
什么工作是专门在项目B中指定 elasticsearch:2.3.1
依赖项,但是这不能否定传递依赖项的全部原因吗?
任何帮助表示赞赏 .
Update 1
正如LanceJava在评论中所建议的,我跑了 gradle dependencies
来看看发生了什么 .
这表明它特别降级了它:
org.elasticsearch:elasticsearch:2.3.1 -> 1.5.2
当我在该依赖项上运行gradle dependencyInsight时,它提出了:
:dependencyInsight
com.mycompany:elasticsearch-common:2.3.1 (selected by rule)
\--- compile
org.elasticsearch:elasticsearch:1.5.2 (selected by rule)
org.elasticsearch:elasticsearch:2.3.1 -> 1.5.2
\--- com.mycompany:elasticsearch-common:2.3.1
\--- compile
任何人都有任何想法为什么会这样?
Update 2
这似乎有答案:https://discuss.gradle.org/t/excluded-dependence-comes-back-when-spring-boot-plugin-is-applied/17945/2
似乎gradle spring-boot插件喜欢接管并强制执行它自己的依赖版本(即使我没有使用使用spring-data的spring-boot-starter) .
我通过添加:
ext[elasticsearch.version] = '2.3.1'
到我的build.gradle文件 .
1 回答
问题中没有明确的是,这个项目使用的是
spring-boot
gradle plugin,它强制执行某些版本的库,并强制降级我的elasicsearch版本以使其与我的项目中的spring-data保持一致's spring-data requirements (even though I wasn't ) .我通过执行以下方法发现了
当时出现的是:
我了解到
(selected by rule)
部分意味着某些东西以编程方式选择了特定版本 . 这缩小了它成为一个插件 .我只使用了4个插件,是:
java
maven
想法
spring-boot
而我唯一没有遇到过这个问题的插件是
spring-boot
.一旦我对这个插件进行了评论,我就会发现依赖是正确的 .
此时我了解到我需要明确指定我想要使用的版本:
排序 . 给我更多的茶!