Maven 3、Windows 7、JDK1.7.0_51
我有以下非常简单的 Maven 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>org.gwl</groupId>
<artifactId>test-lineseparator</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>
以及以下非常简单的测试类
public class TestLineSeparator {
public static void main(String[] args) {
System.out.print("This is a line using System.lineSeparator()." + System.lineSeparator());
}
}
- 我安装了 jdk1.7.0_51 作为默认构建环境。
- Maven 编译器插件的默认 src 和 target 参数是 1.5。
- System.lineSeparator() 方法直到 1.7 才引入
Maven 编译代码没有问题。它可以在 1.7 JRE/JDK 下运行正常, 但 1.6 或更早版本有提示
线程“main”中出现异常 java.lang.NoSuchMethodError: java.lang.System.lineSeparator()Ljava/lang/String;
问。当编译器 src 参数默认为 1.5 时,为什么 Maven 不会提示 System.lineSeparator() 不存在?
(注意,同样的问题也适用于从同一个 POM 生成的 Eclipse 投影。尽管设置了 1.5 编译器合规性和 1.5 执行环境,但没有任何提示)
最佳答案
编译为 1.5 意味着 java 代码结构/类文件设计处于 1.5 级别 - 不要与 jdk 代码本身混淆
如果 jdk 1.7 附带带有某些方法的 System.java 代码的 rt.jar 文件,javac 编译器无法知道 1.6、1.5、1.4 级别的内容(除非您有classes.zip 并指定引导)类路径)
参见javac source and target options
http://www.javaworld.com/article/2077388/core-java/what-version-is-your-java-code.html
让生活变得简单 使用正确的 jdk 完成正确的工作
关于java - Maven 和 System.lineSeparator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26218366/