当需要使用javac
参数使用编译器的特殊目标版本target
时,我尝试找到一个用例。
Java是向后兼容的,不是吗?因此,如果我用版本11编译一个hello world程序,它可以在版本8的JVM上运行,或者?
我能想象的唯一用例是,当您具有以特定版本编译的依赖项(其他jar),并且在编译自己的代码时必须匹配此特殊版本。
谢谢您的帮助!
答案 0 :(得分:4)
Java是向后兼容的,不是吗?因此,如果我用版本11编译一个hello world程序,则该程序可以在版本8的JVM上运行。
完全后退。如果您具有使用版本8编译的Java类版本,则Java 11是 向后 兼容并可以运行它。反向不是向后兼容,而是--target
命令行标志的目的。具体来说,由Java 11编译器编译的类 可以在Java 8上运行。否则,您将获得java.lang.UnsupportedClassVersionError: Unsupported major.minor version
答案 1 :(得分:3)
默认情况下,将根据javac附带的平台的引导程序类和扩展类来编译类。但是javac还支持交叉编译。
-target version
生成针对VM的指定版本的类文件。类 文件将在指定的目标和更高版本上运行,但不会 在早期版本的VM上。有效目标是1.1、1.2、1.3、1.4, 1.5(也为5),1.6(也为6)和1.7(也为7)...。 -target的默认值取决于-source的值:
If -source is not specified, the value of -target is 1.7
If -source is 1.2, the value of -target is 1.4
If -source is 1.3, the value of -target is 1.4
If -source is 1.5, the value of -target is 1.7
If -source is 1.6, the value of -target is 1.7
For all other values of -source, the value of -target is the value of -source.
有关更多详细信息,请参考javadoc here。