Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Eclipse声明编译和运行时之间的瞬态依赖关系的最佳方法是什么?_Java_Maven_Ant_Build Process_Gradle - Fatal编程技术网

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

Java 使用Eclipse声明编译和运行时之间的瞬态依赖关系的最佳方法是什么?,java,maven,ant,build-process,gradle,Java,Maven,Ant,Build Process,Gradle,我们希望在Eclipse上改进Java构建过程。目前我们使用Gradle!作为这项工作的一部分,我们正在考虑是否以最好的方式使用Gradle。我们使用用于Gradle的Eclipse插件,并用compile声明我们的依赖项。不幸的是,这给我们生成的Eclipse项目增加了大量的临时依赖项,这是不可取的。这些额外的依赖项仅在运行时有效 那么,有没有办法在Gradle中声明一个依赖项,并将其编译依赖项设置为第一级依赖项,将其运行时依赖项设置为第一级加上暂时依赖项 目前,我们在compile中使用@j

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

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

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

有更好的方法吗?

我想你指的是传递依赖关系

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

但是,这对Eclipse没有帮助,因为Eclipse没有单独的编译和运行时类路径的概念。唯一的解决办法是让运行配置负责提供运行时类路径,但这可能很难设置(例如,运行配置通常是动态创建的),Gradle对此没有任何现成的支持。您可以使用Gradle的Eclipse插件的通用XML钩子来生成运行配置,但我不确定EclipseGradle集成是否能够获得这些配置

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


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

虽然我当然同意@Peter的观点,Eclipse构建过程的全面改进是一个长期目标,但在短期内,您可能能够使用Maven和m2eclipse实现您想要的目标。转移到Maven的权衡是否值得获得额外的控制权完全取决于您。

我建议您创建一个非常简单的示例,准确地展示您想要实现的目标,并在问题中陈述。如果我理解正确,这就是
true
对Maven中的依赖项所做的。我看不出这将如何解决手头的问题,因为Maven在编译类路径上也放了太多东西。充其量,您必须像Richard在Gradle构建中所做的那样重新配置Maven构建,我认为在从Eclipse执行代码时会导致类似的问题。这不是一个很好的解决方案,但m2eclipse确实正确地管理编译和运行时类路径。定义“正确”。Maven在自己的编译类路径上放得太多,m2eclipse也不会有什么不同。而且m2eclipse可能至少使用Maven编译类路径(如果不是运行时)作为Eclipse类路径,我假设它仍将以某些方式使用(例如用于编辑/搜索/导航)。我的意思是,使用m2eclipse的构建运行将使用与使用Maven standalone的构建运行相同的类路径(与我所理解的Gradle和Eclipse类路径不匹配的问题相反)这当然是好的,但它不能解决Richard的问题,因为(Maven编译和)Eclipse类路径上有太多东西。他仍然会得到大量的可传递依赖项。