使用Maven设置Java编译器的-source和-target-不起作用

我已经设置了pom文件,要求Maven使用sourceand targetconfig参数将我的源代码编译为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

回到顶部