2010-06-13 46 views
9

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

+0

@VonC @Pascal Thivent:感谢您的解释。但是,我注意到,m2eclipse在pom.xml文件中没有指定默认代码级别为1.4,而IntelliJ或NetBeans的Maven插件选择系统的JRE级别,这更符合我的想法。 – 2010-06-17 02:29:37

回答

6

应该遵循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,它不会方面-J工作)

This thread提醒人们内m2eclipse的之间的区别日食和maven脚本:

有一点值得一提的是,这只应用程序当m2eclipse根据pom.xml中的配置配置Eclipse工具(如JDT,AJDT和WTP)时,将其设置为“开发模式”。这是您通常编写和调试应用程序,运行单元测试(使用Run as .../JUnit测试)或在Web应用程序服务器(作为.../Server应用程序运行)上运行的方式。

但是,如果您使用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参数。

4

来自maven项目的JDK合规性级别为派生的,而不是其他方式。换句话说,你需要配置的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的。

+0

更简单的解释。 +1。我开始担心。 maven-2日食问题超过1小时后才回答。帕斯卡尔呢? ;) – VonC 2010-06-13 16:17:46

+0

@VonC LOL!我正在烹饪:)但是感谢+1(还有+1)。 – 2010-06-13 16:28:10

+0

我遇到了一个问题,eclipse忽略了使用此方法设置的源/目标版本(请参阅http://stackoverflow.com/questions/23602622/changed-jdk-version-in-pom-xml-but-eclipse-仍然使用默认-的-1-5)。在这个问题上的意见建议是我需要手动更改eclipse的设置,这似乎不同意你的答案。有什么改变,或者我做错了什么? – Jules 2014-05-18 11:09:14

0

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

我的设置如下。使用开普勒。在Eclipse的首选项中配置为默认的Java 1.7(正如前面提到的,似乎忽略了pom.xml中的任何内容)。我将一堆Maven项目导入Eclipse。所有都显示为Java合规性级别1.4,甚至项目的构建路径列出了Java 1.4运行时。我仔细检查1.7是否正确指定在POM中。XML通过请求在命令行上有效POM确认设置是在POM存在以及是否正确:

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