Nat*_*tix 5 java compilation backwards-compatibility
假设我想编写一个针对某个 JRE 版本(例如 1.6)的应用程序,但在我用来开发它的计算机上安装了较新版本的 JRE(例如 1.7)。
简单的方法是将编译器级别设置为 1.6(我使用 Eclipse,但这可能不是很重要,因为问题很普遍)。然而,这还不够。设置编译器的源级别可确保源文件仅使用该 Java 版本可用的语言功能,因此生成的类文件具有正确的次版本,因此目标 JVM 将能够加载并运行它们。
但还有另一个更微妙的问题:如果我在代码中使用 1.7 中添加的类或方法,并尝试在安装了 1.6 运行时的计算机上运行该应用程序,则会失败并显示NoClassDefFoundError或NoSuchMethodError。
问题是同一个程序在开发机器上运行良好,因为安装在其上的 1.7 JDK 确实包含这些类。编译器或 IDE 也不会抱怨。我引用的类和方法不可用的唯一指示是Since 1.7JavaDoc 中的注释。
那么如何确保我永远不会使用旧版本 JRE 中不可用的类或方法呢?构建路径上始终具有准确的目标 JRE 版本的唯一可靠解决方案是吗?这意味着我需要在我的开发机器上为每种此类情况安装额外的 JDK(1.7、1.6、可能 1.5,甚至可能 1.4)。
在编译期间使用bootcpasspath指向 1.6 JRE(特别是rt.jar)的选项。这样做将强制检查所有引用的类、方法和属性是否确实存在于所提供的rt.jar.
有关更多详细信息,请参阅javac - 交叉编译选项。
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |