即使指定了1.5,Maven也会使用Java 1.6构建项目
可能重复:
Maven中的Java版本不匹配
我有一个配置为使用Java 1.5与Maven的项目:
mvn help:effective-pom
...
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
...
我的机器安装了Java 1.6,Maven正在使用它:
mvn -v
...
Apache Maven 2.2.1 (r801777; 2009-08-06 20:16:01+0100)
Java version: 1.6.0_21
我已经将该项目导入Eclipse(使用mvn eclipse:eclipse
),并且正在使用Java 1.5构建它,如POM中所述。
现在,如果我使用@Override
标记了一个接口实现方法,该方法在Java 1.5中不允许,但在Java 1.6中受支持,那么Maven将构建该项目而不会出错,但Eclipse会将该注释标记为编译时错误,并拒绝构建项目。
我如何让Maven真正用Java 1.5编译项目,或者让Eclipse使用与Maven相同的设置来编译项目?
看起来JDK 1.5的新版本忽略了@Override
如果它在接口实现方法中:https://stackoverflow.com/a/2336850/256245我猜如果使用目标1.5编译JDK 1.6, 。 这就是Maven不会抱怨的原因。
要检查Maven是否真的编译为Java 1.5,你应该使用Animal Sniffer Plugin:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>animal-sniffer-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>check-java15-sun</id>
<phase>test</phase>
<goals>
<goal>check</goal>
</goals>
<configuration>
<signature>
<groupId>org.codehaus.mojo.signature</groupId>
<artifactId>java15-sun</artifactId>
<version>1.0</version>
</signature>
</configuration>
</execution>
</executions>
</plugin>
由于Eclipse有自己的编译器实现,我想你必须从接口实现方法中删除@Override
注解,以使他感到开心。 由于JDK忽略注解,删除不会造成任何伤害。
上一篇: Maven builds project with Java 1.6 even if 1.5 is specified