【发布时间】:2022-01-23 17:07:23
【问题描述】:
我有一个理解问题:
假设我有 Java 代码并在那里使用 Java 11 语法(例如,来自 String 类的 isBlank())。
为了编译,我使用 maven-compiler-plugin (3.8.1) 和属性 maven.compiler.source 和 maven.compiler.target 每个设置为值 1.8。
如果我编译 mvn clean (java -version = openjdk version "11.0.3" 2019-04-16) 它工作正常。
我给maven-compiler-plugin 的java 版本是否只是提供信息?我怎样才能确保我得到一个真正适用于 Java 8 的工件。我是否需要安装 JDK 8(即java -version = 1.8)?
非常感谢!
【问题讨论】:
-
如果您打算在 java 8 环境中工作,为什么要使用 java 11 代码?
-
如果使用JDK9+,你应该使用
<maven.compiler.release>8</maven.compiler.release>...@Stultuske 为什么不...它更容易...并且已经显示代码是否可以使用JDK11 编译.. -
@Stultuske:我使用 Java 11,但忘记更改属性。所以我想知道为什么会这样。
-
@khmarbaise 谢谢,这意味着只有从 1.9 开始,您还可以进行语法检查。
-
否...语法检查与此无关... 源代码控制语法,但不限制 jdk 中的方法(早期使用动物嗅探器检查).. .today JDK9+ 使用发布选项..更容易和更可靠...所以使用 JDK11 或 JDK17 构建您的应用程序并通过
maven.compiler.release属性控制目标(生成的类文件的版本)...