使用Maven设置Java编译器的-source和-target-不起作用
我已经设置了pom文件,要求Maven使用source
and target
config参数将我的源代码编译为1.5版兼容。这是我的pom:
<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。
谢谢。
回答:
从编译器插件页面底部的注释中:
仅设置目标选项并不能保证您的代码实际在具有指定版本的JRE上运行。陷阱是仅在更高版本的JRE中存在的API的意外使用,这会使您的代码在运行时由于链接错误而失败。为避免此问题,您可以将编译器的引导类路径配置为与目标JRE匹配,或使用Animal
Sniffer Maven插件来验证您的代码未使用意外的API
这意味着,尽管您正在生成1.5级字节码,但仍可以(无意间)调用1.6 API方法。要标记这些invalide API调用,请使用它们提到的插件。
以上是 使用Maven设置Java编译器的-source和-target-不起作用 的全部内容, 来源链接: utcz.com/qa/423414.html