dav*_*xxx 5 java compilation javac
我可能会为遗留项目做一些交叉编译,我注意到最近的 JDK 仅限于某些特定版本的source,target和releaseJVM 参数。
如何获得这些参数的支持版本?
实际上,支持的值取决于使用的主要 JDK 版本。
您可以javac在各个主要 JDK 版本的文档中找到相关信息(参考链接如下)。
关于这些论点的一些一般性说明:
Maven 配置中的source和target版本不应优于使用的 JDK 版本。
旧版本的 JDK 不能用更新的版本编译,因为它不知道它的规范。
请注意:虽然最近的 JDK 可以接受source较旧的 Java 版本作为编译,但这并不意味着您可以选择source任何受支持的最新版本和target任何记录为受支持的旧版本(见下文)。
实际上,Java 版本可能会引入新特性,这些特性在编译时/运行时与旧 Java 版本不兼容。
例如,JDK 11 可以使用 8 作为source编译器版本编译类。通过选择 8 作为target编译器版本,编译将通过。
但是,如果您改变主意并希望使用 11 assource和 8 as进行编译target,则编译将失败。
这并不总是明确记录在 javac 文档中。
该release参数存在于 Java 9。
由于 thesource和 thetarget是相同的,这个release论点应该比sourceand更受青睐target。指定更短,它确保更好的交叉编译兼容性,即使您不进行交叉编译,也不会受到伤害。
有关更多解释,请参阅此优秀答案。
源/目标/发布支持的版本:
source:1.3、1.4、1.5(也是 5)、1.6(也是 6)和 1.7(也是 7)。
target:1.1、1.2、1.3、1.4、1.5(也是 5)、1.6(也是 6)和 1.7(也是 7)。
source:1.3、1.4、1.5(也是 5)、1.6(也是 6)、1.7(也是 7)和 1.8(也是 8)。
target:1.1、1.2、1.3、1.4、1.5(也是 5)、1.6(也是 6)、1.7(也是 7)和 1.8(也是 8)。
source:1.6(也是 6)、1.7(也是 7)、1.8(也是 8)和 9。
target:1.6(也是 6)、1.7(也是 7)、1.8(也是 8)和 9。
release:6、7、8 和 9。
source:1.6(也是 6)、1.7(也是 7)、1.8(也是 8)、9 和 10。
target:1.6(亦为 6)、1.7(亦为 7)、1.8(亦为 8)、9 和 10。
release:6、7、8、9 和 10。
source/target/release:6、7、8、9、10 和 11。
您可以在JDK 1.8、JDK 9、JDK 10和JDK 11的 javac 文档中了解更多详细信息