如果我正确理解Java 10的二进制形式,它与Java 9是100%相同的,所以它不应该造成任何问题。
我的假设正确吗?
发布于 2018-03-20 14:42:10
这与Java 10无关;规则与以前一样。
在Java的每个版本中,类文件版本号都增加了。您可以在较新的Java运行时上运行旧的类文件(您可以运行20年前在Java 10上的Java1.0下编译的文件!),但是在较旧的运行时上运行较新的类文件从来都不是真的。这一点在Java 10中并没有改变。
但是,如果您不使用自该版本以来引入的新特性,则可以编译类,使它们在旧版本上运行。这以前由-source和-target交换机完成:
// Run this on Java 8
javac -source 6 -target 6 Foo.java您将获得在Java 6及更高版本上运行的类文件。(源版本不能大于目标版本。)最近,这个选项被更全面的--release选项所取代:
javac --release 9这不仅意味着-source 9和-target 9,而且编译器还将阻止您使用在9之后引入的JDK功能。
发布于 2018-03-20 03:50:27
javac支持--release参数已有一段时间了。只要您不使用新版本的特性(在本例中是Java 10),您就可以这样做:
javac --release 9一切都应该很好。更好的是,如果存在需要解决的问题,Java编译器会抱怨。
注意,如果不这样做,您将得到一个UnsupportedClassVersionError,即使代码在技术上是有效的,因为所需的最低版本是包含在已编译的字节码中,这默认为当前版本的Java编译器。
现在,如果您想使用更新的java语言特性,也可以使用多释放罐,但也可以包括支持旧JVM的代码。
https://stackoverflow.com/questions/49376007
复制相似问题