我的 Eclipse 工作区中有几个 gradle 项目。为简单起见,我只对其中 2 个真正感兴趣,让我们只使用 A 和 B。
所以我遇到的问题是项目 A 包含对 JBoss 的依赖,它引入了 javax validation-api 1.0.0.GA,而项目 B 依赖于 javax validation-api 1.1.0.Final。由于 Gradle 本身首先通过使用较新的库来解决冲突,所以 B 在使用 gradle 构建时很高兴。但是 Eclipse 本身包含在编辑时非常分散注意力的错误。
validation-api jar 的正确版本最终出现在 B 的类路径中,但问题是 Gradle IDE 插件将 project(':A') 依赖项更改为项目引用,并且 Eclipse 似乎将项目引用优先于外部罐子。因此,旧 jar 被扩展首选。
我尝试{ exclude module: 'validation-api' }
在 B 的 build.gradle 中添加对 A 的依赖项,该依赖项根据“gradle dependencies”的输出工作,但是由于 Eclipse 只是将其作为项目引用,因此它不会排除 jar 并且问题仍然存在.
同样根据这个问题,我尝试添加{ transitive = false }
并且发生了同样的事情。我认为即使是那里提出的 hack 也不会对我有用,因为 .classpath 包含对 Gradle 容器的单个引用,所以没有什么可以删除的。
我设法通过从我的 gradle 缓存中明确包含对正确版本 jar 的引用,然后将其移动到 Gradle 类路径容器上方,以便 eclipse 首先看到该版本来解决这个问题。
我的问题是:有没有更好/更通用的方法来做到这一点?最好是我可以在不破坏其他人的构建或要求他们在某处手动修改路径或属性的情况下致力于源代码控制的一种?还有另一个项目似乎有类似的问题,所以我可以在 build.gradle 文件中修复的东西会很棒。
最坏的情况是,如果 IntelliJ 的表现比 Eclipse-Gradle 集成更好,我可能会切换到 IntelliJ?