我有一个JAR,可能是由一个非常旧版本的JDK编译的。它需要Microsoft JVM来执行JAR。如果我想重新编译这个JAR,我应该下载和使用哪个JDK版本?我有什么特别的问题需要考虑吗?
P.S。我是JAVA的新手,请原谅我糟糕的演讲。
答案 0 :(得分:1)
如果JAR需要运行特定的JVM,我会非常惊讶。 Java的整体哲学是write once run anywhere。
如果您还没有源代码,可以使用Java Decompiler(例如jad)将.class文件反编译为.java文件,然后使用现代JDK重新编译。
答案 1 :(得分:1)
如果您有源代码,您应该能够使用最新的JDK进行编译。如果代码包含在Java的更高版本(assert,enum等)中成为保留字的变量名,则可能需要指定源版本(1.3,1.4,...,1.7)。您可以使用编译器的-source
选项来完成此任务
如果jar最初是由Visual J++(你提到过Microsoft JVM)构建的,那么我不确定你是否可以使用Oracle JDK编译它,实际上取决于代码中使用的内容。
如果您没有源代码,请尝试使用Java反编译器(如JAD或JD)从jar文件中的类文件中获取源代码。您需要验证反编译器是否支持旧版Java创建的字节码
您可以使用here所述的方法找出编译该类的目标Java版本。
答案 2 :(得分:1)
JVM具有向后兼容性。因此,为java 1.4编写的代码也应该在第8个JVM上运行。问题可能是您的jar使用的是Microsoft JVM本机类,它们不是标准API的一部分。在这种情况下,您无法在任何其他JVM上运行它,唯一的方法是查找源并修改它们以避免特定于供应商的类。这与使用SUN的API相同。顺便问一下,你怎么知道你的jar需要Microsoft JVM?