我的项目取决于版本n中的库A 。 它还取决于库B ,而后者依赖于版本n-1中的 A 。
运行gradle dependencies
时,树显示我的项目, B ,这取决于版本n中的 A 。
然而,当我运行gradle idea
时,我得到一个同时报告版本n和n-1的工作区。
我是否可以采取任何措施来规避它并获得一个符合gradle依赖分辨率的工作空间,而无需强制使用版本或更改我依赖的版本?
我已经把它带到Gradle list,但无济于事。
更新:我上传了sample configuration,因此您可以自行试用。请注意 Guava(A)如何在版本10.0和11.0中出现,这要归功于我和 Reflections(B),具体取决于它。
从示例中,我了解到只有当 A 和 B 的依赖关系遍布子模块时才会发生这种情况。
注意:我知道Reflections 0.96不适用于Guava 11.0。这是我想到的第一件事。
答案 0 :(得分:1)
为了能够关闭它,这是Peter Niederwieser写的:
[This]是预期的行为,不仅适用于IDEA插件,也适用于Gradle。这是因为冲突解决方案目前是按配置完成的,而不是每次构建。在Module1和Module2中执行gradle dependencies
时,您将获得与IDEA模块相同的结果。
如果两个模块都直接使用Guava,则应指定直接依赖关系,以解决问题。通常,这是通过将依赖性声明分解为父构建脚本并通过子脚本中的名称引用它们来完成的。 (这有点类似于Maven的dependencyManagement
部分。)强制所有配置的版本是另一种解决方案。我希望Gradle的未来版本将支持整个构建范围的冲突解决方案。
感谢您创建示例项目。这使得重现问题变得容易得多。顺便说一句,提问的最佳地点是http://forums.gradle.org。