我已经设置了我的pom文件,要求Maven使用source
和target
config params编译我的源代码,使其版本1.5兼容。这里是我的POM:使用Maven设置Java编译器的-source和-target不起作用
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>user</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>test</name>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
而且我有一个简单的主类是这样的:
package com.user;
public class Test
{
public static void main(String[] argv)
{
System.out.println("".isEmpty());
}
}
String#isEmpty()
自从Java 1.6中引入的。然而,编译我的代码mvn compile
的作品,虽然我会预料它会失败,因为我已经设置Maven编译我的代码到Java 1.5和String#isEmpty
是在Java 1.6中引入的。任何人都可以请建议我可能做错了什么?编译时强制Maven使用特定Java版本的正确方法是什么?
有关信息,我正在使用Apache Maven 2.2.1和javac 1.6.0_19。
谢谢。
这是一个很好的解决方案,但不幸的是它不处理其他一些API不兼容性,如部分接口实现。如果你没有实现Iterator的remove()方法,它将在java 8下编译,因为接口中有'default'关键字,但是不会在java 7下编译。而且这个嗅探器插件不会被捕获,因为这不仅仅是一个方法呼叫。 – Innokenty 2015-06-26 16:16:55
以下是关于如何使用Animal Sniffer的官方指南,以及为什么:https://maven.apache.org/guides/mini/guide-building-jdk14-on-jdk15.html – Innokenty 2015-06-26 16:22:01