java - java 编译:源、目标和发布支持的版本
问题描述
我可能会对遗留项目进行一些交叉编译,并且我注意到最近的 JDK 仅限于 . 和 JVM 参数的某些source
特定target
版本release
。
如何获得这些参数的支持版本?
解决方案
实际上,支持的值取决于使用的主要 JDK 版本。
您可以javac
在各个主要 JDK 版本的文档中找到相关信息(参考下面的链接)。
关于这些论点的一些一般说明:
source
和 Maven 配置中的版本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 中。由于
source
和target
是相同的,因此该release
论点应优先于source
和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。
推荐阅读
- angular - 角度插值显示 [Object Object]
- google-apps-script - 使用 Google Apps 脚本直接在文件夹中而不是在根文件夹中创建 Google Doc 文件
- xamarin - Xamarin Forms - 选取器设置选定项
- excel - SharePoint Excel 工作簿中的数据透视表
- mongodb - 如何在 mongoDB 中使用通配符字段?
- java - 为什么 Intellij 在多模块 git 项目中显示“幽灵”变化?
- compiler-errors - 解释 NS3Error 并提出任何解决方案?
- xcode - Cordova Build 导致 xcodeBuild 意外退出
- android - 未找到默认活动,即使它已在清单中声明
- ios - UI 测试 Xcode 中的 128 个字符限制