使用Eclipse在编译和运行时之间声明瞬态依赖关系的最佳方法是什么?

时间:2013-08-01 11:03:27

标签: java maven ant build-process gradle

我们希望在Eclipse上改进我们的Java构建过程。目前我们使用Gradle!作为这项工作的一部分,我们正在研究是否以最佳方式使用Gradle。我们使用Gradle的Eclipse插件并使用compile声明我们的依赖项。不幸的是,这增加了我们生成的Eclipse项目的大量瞬态依赖性,这是不可取的。这些额外的依赖项仅在运行时有效。

那么,有没有办法在Gradle中声明一个依赖ONCE并将其编译依赖项设置为第一级依赖项,并将其运行时依赖项设置为第一级加上瞬态依赖项?

目前我们在编译时使用@jar语法,它为我们提供了编译的第一级依赖,但我们仍然需要为运行时再次声明该依赖项。不理想,因为我们有两个地方可以更新依赖。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

我认为你的意思是传递依赖。

如果您只希望直接依赖项出现在Gradle的编译类路径上,那么您当前的解决方案似乎是合理的。 (将来我们希望有一个更加准确的编译类路径开箱即用。)潜在的改进是使compile配置不可传递(而不是使用@jar)或者编写一个提供自定义依赖语法的插件,从而使编译和运行时依赖之间的重复消失。

但是,这对Eclipse没有帮助,因为Eclipse没有单独的编译和运行时类路径的概念。唯一的出路是使运行配置负责提供运行时类路径,但这可能很难设置(例如,运行配置通常是在运行中创建的),而Gradle没有任何不在对此的支持。您可以使用Gradle Eclipse插件的通用XML钩子来生成运行配置,但我不确定Eclipse Gradle集成是否会将它们接收。

由于存在这些困难,大多数Eclipse开发人员都将所有运行时依赖项放在Eclipse项目类路径上(无论它们是否使用Gradle),尽管有明显的缺点。

我们的愿景是Gradle有朝一日可以充当Eclipse的构建引擎。一旦发生这种情况,IDE和构建工具(类路径,代码生成,集成测试等)之间的差异将成为过去。 Gradle现在已经可以作为NetBeans的构建引擎,很快也可以作为IntelliJ IDEA(由Android Studio的需求驱动)。

答案 1 :(得分:0)

虽然我当然同意@Peter认为Eclipse构建过程的改革是一个长期目标,但在短期内,您可以使用Maven和m2eclipse完成您想要的任务。转移到Maven的权衡是否值得额外控制完全取决于你。