m2eclipse 将 JDK 合规性设置为 1.4

Posted

技术标签:

【中文标题】m2eclipse 将 JDK 合规性设置为 1.4【英文标题】:m2eclipse sets JDK compliance to 1.4 【发布时间】:2011-03-03 05:40:11 【问题描述】:

使用 eclipse 3.5,当我创建一个新的 maven 项目时,m2eclipse 会自动将 J2SE1.4 添加到库中,并将编译器合规级别添加到 1.4(项目属性> Java 编译器)。 我的 JRE 系统库是 1.6,我的默认编译器合规级别是 1.6。我什至没有安装1.4。 我可以让 m2eclipse 使用我的默认设置并阻止它修改项目设置吗?

【问题讨论】:

@VonC @Pascal Thivent:感谢您的解释。但是,我注意到 m2eclipse 在 pom.xml 文件中未指定时假定默认代码级别为 1.4,而 IntelliJ 或 NetBeans 的 maven 插件选择系统的 JRE 级别,我认为这更合乎逻辑。 【参考方案1】:

总的来说,我在项目上做了一个mvn eclipse:eclipse,并在 Eclipse 中对项目进行了 F5 刷新,这正确配置了 Java 合规性设置。

我的设置如下。使用开普勒。 Java 1.7 在 Eclipse 的首选项中配置为默认值(如前所述,似乎无论如何都会被忽略,以尊重 pom.xml 中的任何内容)。我将一堆 Maven 项目导入 Eclipse。所有这些都显示为 Java 合规级别 1.4,甚至项目的构建路径也列出了 Java 1.4 运行时。我通过在命令行上请求有效的 pom 来确认 pom.xml 中的设置是否存在并且在 pom 中正确,从而再次检查了 1.7 是否正确:

mvn help:effective-pom -Doutput=eff.xml

这表明存在正确的设置:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
        <fork>true</fork>
    </configuration>
</plugin>

猜测问题出在 m2e 插件的导入部分,Eclipse 中显示的版本是: 1.4.0.20130601-0317

【讨论】:

【参考方案2】:

它应该遵循 maven-compiler-plugin 配置:

<build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>

(即使像mentioned in this thread一样,它也不适用于aspect-j)

This thread提醒我们eclipse中的m2eclipse和maven脚本的区别:

值得一提的是,这仅适用于m2eclipse根据pom.xml中的配置配置JDT、AJDT、WTP等Eclipse工具时的“开发模式”。这就是您通常编码和调试应用程序、运行单元测试(使用 Run as.../JUnit 测试)或在 Web 应用程序服务器上运行(运行为.../服务器应用程序)的方式。

但是,如果您使用 Run as... / Maven build...,或从 Run/Debug 菜单创建相应的启动配置,那么您可以选择用于启动 Maven 的 JVM,并且您的所有编译器配置都将得到尊重以同样的方式在命令行中得到尊重。

所以:

  <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-compiler-plugin</artifactId>
       <configuration>
         <verbose>true</verbose>
         <fork>true</fork>
         <executable><!-- path-to-javac --></executable>
         <compilerVersion>1.3</compilerVersion>
       </configuration>
     </plugin>
   </plugins>

m2e 不(也不能)使用外部 java 编译器,所以它会忽略这些配置参数。 m2 只考虑源/目标 maven-compiler-plugin 参数。

【讨论】:

【参考方案3】:

JDK 合规级别派生自 maven 项目,而不是相反。换句话说,你需要配置 maven 编译器插件以符合 1.6 级别,然后 m2eclipse 将在 Eclipse 下派生适当的设置:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.0.2</version>
  <configuration>
    <source>1.6</source>
    <target>1.6</target>
  </configuration>
</plugin>

pom.xml 是主人,而不是 m2eclipse。

【讨论】:

更简单的解释。 +1。我开始担心了。一个多小时后没有回答的 maven-2 eclipse 问题。到底是帕斯卡吗? ;) @VonC 哈哈!我在做饭 :) 但是感谢 +1(也为你 +1)。 我遇到了一个问题,即 Eclipse 忽略了使用此方法设置的源/目标版本(请参阅***.com/questions/23602622/…)。 cmets 关于该问题的建议是我需要手动更改 eclipse 的设置,这似乎与您在此处的回答不一致。有什么变化,还是我做错了什么? 原来我做错了什么: 标签需要被包裹在 标签内的 标签内。我将它包含在顶层。出于某种原因,eclipse 没有提供任何错误的警告。

以上是关于m2eclipse 将 JDK 合规性设置为 1.4的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Eclipse Luna 中使用 Java 8 功能?

如何告诉 M2Eclipse 将 jar 文件安装为 maven 依赖项

配合m2eclipse创建一个标准的maven web项目

Eclipse + Subversion (subclipse) + Maven (m2eclipse) 多模块项目

Linux机器24项安全合规设置

使用 JDK11 设置的 Wildfly 服务器中的日志记录问题