Maven和System.lineSeparator

时间:2014-10-06 14:25:22

标签: java maven version nosuchmethoderror

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 args为1.5。
  • 直到1.7
  • 才引入System.lineSeparator()方法
  • Maven编译代码没有问题。它将在1.7 JRE / JDK下运行正常, 但1.6或更早的抱怨

    线程中的异常&#34; main&#34; java.lang.NoSuchMethodError:java.lang.System.lineSeparator()Ljava / lang / String;

问。为什么Maven在编译器src参数默认为1.5时不抱怨System.lineSeparator()不存在?

(注意,同样的问题适用于从同一个POM生成的Eclipse预测。尽管设置了1.5个编译器合规性和1.5个执行环境,但没有投诉)

1 个答案:

答案 0 :(得分:1)

编译为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来做正确的工作