0

我有一个 JAR,它可能是由一个非常旧版本的 JDK 编译的。它需要 Microsoft JVM 来执行 JAR。如果我想重新编译这个 JAR,我应该下载和使用哪个 JDK 版本?有什么特别的问题需要考虑吗?

PS我是JAVA的新手,请原谅我糟糕的介绍。

4

3 回答 3

1

JVM具有向后兼容性。例如,为 java 1.4 编写的代码也应该在第 8 个 JVM 上运行。问题可能是您的 jar 正在使用 Microsoft JVM 本机类,它们不是标准 API 的一部分。在这种情况下,您不能在任何其他 JVM 上运行它,唯一的方法是查找源并修改它们以避免供应商特定的类。这与使用 SUN 的 API 相同。顺便说一句,您是如何发现您的 jar 需要 Microsoft JVM 的?

于 2013-11-12T14:02:54.617 回答
1

如果你有源代码,你应该可以用最新的 JDK 编译它。如果代码包含在更高版本的 Java(断言、枚举等)中成为保留字的变量名称,您可能需要指定源版本(1.3、1.4、...、1.7)。您可以使用-source编译器的选项来完成。
如果 jar 最初是由Visual J++构建的(您提到了 Microsoft JVM),那么我不确定您是否可以使用 Oracle JDK 编译它,这实际上取决于代码中使用的内容。
如果您没有源代码,请尝试使用 Java 反编译器,例如JADJD从 jar 中的类文件中获取源代码。您需要验证反编译器是否支持旧版本 Java 创建的字节码。您可以使用此处
描述的方法找出该类是针对哪个目标 Java 版本编译的。

于 2013-11-12T11:53:37.037 回答
1

如果 JAR 需要特定的 JVM 来运行,我会感到非常惊讶。Java 的整个哲学是一次编写,随处运行

如果您还没有源代码,您可以使用 Java 反编译器(例如jad)将 .class 文件反编译为 .java 文件,然后使用现代 JDK 重新编译。

于 2013-11-12T11:32:21.420 回答