JAVA编译:使用新的JVM版本编译并在旧版本

时间:2015-07-16 10:06:42

标签: java

以下是我的问题的一个小解释。

我有一个用java 1.5编译的应用程序。此应用程序安装在客户端安装的2000 pc(blockboxes)上。 我的应用程序的jar经常被更新以添加新功能和修复,但由于技术原因,更新java版本并不是很容易,所以我必须继续在现有机器上使用Java 1.5。

几个月前,我收到了对此申请的新要求的请求。为了完成这项任务,我在此应用程序中添加了Hazelcast的用法。

我的问题如果如下:   - Hazelacast jar文件需要Java 1.6或更高版本,所以我必须用1.6编译我的应用程序   - 使用hazelcast的新功能只能通过设置新参数按需激活。这意味着它不会用于2000已安装的黑盒子中。   - 所有新的黑匣子都将与Jave 1.6或更高版本一起安装,以便能够使用Hazealcast功能。

我的问题是,我希望使用Java 1.5和使用1.6或更高版本的新黑盒,为我的应用程序提供一个独特的源代码和独特版本的应用程序。

一开始,我的想法是始终使用1.5版进行编译,并确保只使用java 1.6或更高版本在blockboses中激活新功能。这个选项不起作用,因为当我用1.5编译时,编译器抱怨Hazelcast jar文件需要1.6 :(

第二个选项是用1.6编译,但后来我无法确定我的应用程序是否仍能在使用1.5的所有黑盒子上正常工作。 :(

我想知道这里是否有人知道如何解决这类问题?

如果我的解释不明确,请告诉我。)

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

JVM向后兼容。您可以在Java 8上运行Java 1中的几乎所有代码。

所以最好的方法是使用选项二。在某些测试机器上用1.6编译它。如果它有效(很可能会),你不必对应用程序做出太多改变。

答案 1 :(得分:1)

您可以使用JDK 1.6将代码编译为Java 1.5字节码,只需注意以下事项:

  • -source=1.5-target=1.5编译器选项

  • bootclasspath应指向JRE 1.5的rt.jar

有关详细信息,请参阅此帖子:http://www.draconianoverlord.com/2014/04/01/jdk-compatibility.html

该帖子还建议尽可能使用较旧的JDK构建应用程序。您需要找出不同的构建过程并从类路径中排除不兼容的库。如果您使用Maven,请考虑使用两个pom.xml文件,并使用可选的父文件。