我有一个Maven聚合器项目(即带有模块的项目),我想在Eclipse中使用“Run As - > Maven install”构建。我的问题是该项目需要JDK 1.6,而Eclipse使用JDK 1.7(默认的JRE)来运行Maven。此问题仅在构建聚合器(“父”)项目时发生,而不是在单独构建模块时发生。
我试图在POM中设置源和目标属性,如下所示:
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
</properties>
并且像这样:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
但都没有奏效。
我想问题如下:对于“普通”Maven项目,Eclipse使用构建路径JRE(由POM设置决定)来决定运行Maven的JRE。现在是一个聚合器项目,它有包装类型为“pom”,没有Eclipse构建路径,因此Eclipse无法选择“正确”的JRE。
有人知道如何解决这个问题吗?理想情况下,解决方案只涉及更改POM而不是项目或全局Eclipse设置。
答案 0 :(得分:2)
打开“运行配置”编辑器。有一个类别“Maven Build”。在那里创建一个新配置。这将在对话框的右侧为您提供JRE选项卡。选择你想要的任何JRE。
您可以使用“公共”标签中的“共享文件”选项将此启动配置保存在项目中。
您可能还想查看Maven enforcer plugin,尤其是requireJavaVersion。这允许您在使用错误的JRE时将检查添加到失败的构建中。
答案 1 :(得分:1)
因此,如果父级使用pom
的打包类型,Java
版本真的是个问题吗?我们正在使用我们正在编译代码的(很多)Java版本,我甚至使用了eclipse提供的JDK
以及服务器运行时JDK
。在这两种情况下,它都会为我们的模块编译正确版本的代码。
但是对于使用pom
打包的父pom,这是通过我们当时使用的JDK
来完成的,但是因为没有生成java二进制文件(类或jar
文件)父项目中没有构建工件,因此Java
版本没有剩余依赖项。当然有像pom本身这样的东西,但在Java
版本之间没有区别。
答案 2 :(得分:1)
当您的项目具有打包类型pom
并在Eclipse中配置为Java项目时,此警告可能会出现问题。这也适用于m2e插件不支持的任何其他包装类型。
在这种情况下,出现此问题的原因是Eclipse验证了JDK版本,但由于打包类型m2e在使用 maven-compiler-plugin提供新的源版本和目标版本时不会更新Eclipse设置或编译器属性。聚合器项目通常不需要是Java项目,可能只是在创建或导入时意外地转换为一个。
最好的解决方案是从项目中删除 Java nature 。这不应该影响构建。在Eclipse项目资源管理器视图中,“Maven Dependencies”将会消失。当聚合器项目不再是Java项目时,它可能会破坏与某些Eclipse插件或功能的某些集成。该项目的模块仍将是Java项目。
要将其转换为非Java项目,您需要从聚合器项目根目录中的.project
文件中删除Java项目性质和Java构建器。您需要删除该行
<nature>org.eclipse.jdt.core.javanature</nature>
和行
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
保护文件并在eclipse中选择项目并点击 F5 进行更新。
另一种解决方案是在项目设置中手动编辑Java版本。可能由于某种原因,在某处无法使用UI设置其他目标版本。例如,我在org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
文件中找到了条目.settings/org.eclipse.jdt.core.prefs
,即使每个其他设置都正确,它似乎也会引发警告。如果警告仍然没有消失,您可能需要在设置文件中搜索类似的条目。
最后一个选项是将pom打包类型项目添加到m2e生命周期映射中,以便它可以转换为Java项目(如果尚未更新),并在目标和源版本更改时进行更新。