我有一个配置为使用带有maven的Java 1.5的项目:
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相同的设置编译项目?
答案 0 :(得分:1)
似乎JDK 1.5的新版本忽略@Override
,如果它在接口实现方法中:https://stackoverflow.com/a/2336850/256245我猜JDK 1.6如果使用目标1.5进行编译则会做同样的事情。这就是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忽略了注释,因此删除不会造成任何伤害。