java - Maven 和 System.lineSeparator

标签 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 参数是 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/

相关文章:

java - ReplaceAll 方法无法正常工作 - 用正则表达式模式替换正则表达式

java - 这种基于 Java 的多密码加密格式实现安全吗?

java - 如何使用 Maven 复制文件并将第一个模块指定为目标文件夹?

version - 在 Play Framework 2.4.1 中打印 akka 版本

java - 停止扫描仪上阻塞的 Java 线程

java - Spring Boot JPA CrudRepository 如何设置可选搜索参数

java - Maven 找不到 Struts2 依赖项

java - 使用 @ContextConfiguration 运行 spring 集成测试时,应用程序上下文为 null

mono - 如何确定构建和安装当前 Mono 运行时的版本?

python - 如何获取Scrapy 0.12版本?