我使用参数 -source 1.5 和 -target 1.5 编译了java版本1.6的源代码,编译器根本没有抱怨。
但是,由于缺少方法,应用程序将无法使用java 1.5运行。当然,我可以将我的一些源代码重写为1.5兼容,但我不明白的是;底部的java字节码是否应该“向前”兼容?
这些方法不是转换成字节码吗?是否可以将1.6 libs /方法(formely String.isEmpty())编译为1.5字节码并将其全部打包到存档中?
答案 0 :(得分:6)
如果您的意思是基础Java库方法,那么不,这些方法在编译时不会转换为字节代码;它们已经被Sun(或第三方JVM分发器)编译为字节码并安装在您的操作系统上。它们是引用并由编译的代码使用。
答案 1 :(得分:3)
您需要的完整命令行选项包括:
java -source 1.5 -target 1.5 -bootclasspath /usr/jdk/jdk1.5.0_17/jre/lib/rt.jar
(将bootclasspath更改为您的计算机已设置。)
当然,1.6中的API增强功能不会是1.5。 1.5是其服务终止期限的大部分时间,所以你可能想要考虑1.6最小值。
答案 2 :(得分:1)
我不相信java会向后重新编译本机java代码。因此,如果您拨打1.6电话 - 您将无法在1.5
中访问它答案 3 :(得分:1)
您可以将要编译的库更改为较旧的库。在像eclipse这样的软件包中,每个安装好的JDK都应该出现在“选择库”窗口中,你可以选择要编译的那个。
如果没有,您应该能够在ant文件或CLI编译命令中覆盖它。
如果定位较旧的JVM,则必须完成此操作,否则您可能会使用无法使用的调用。
答案 4 :(得分:1)
source参数仅使编译器检查语言语法级别(例如,如果遇到泛型,则source = 1.4会抱怨),但不会限制您仅使用指定Java版本中可用的API。
目标参数将使编译器输出类文件可以由指定版本的运行时使用,但不会(就像-source)验证任何API符合性。