如何在Eclipse中为Maven聚合器项目构建定义JRE?

时间:2014-02-13 15:14:12

标签: java eclipse maven m2eclipse m2e

我有一个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设置。

3 个答案:

答案 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项目(如果尚未更新),并在目标和源版本更改时进行更新。