Java 重新编译一个用非常旧版本的JDK编译的JAR

Java 重新编译一个用非常旧版本的JDK编译的JAR,java,jvm,Java,Jvm,我有一个JAR,它可能是由非常旧版本的JDK编译的。它需要Microsoft JVM来执行JAR。如果我想重新编译这个JAR,我应该下载并使用哪个JDK版本?有什么特别的问题我必须考虑吗? 另外,我是JAVA新手,请原谅我拙劣的演示。如果JAR需要一个特定的JVM来运行,我会非常惊讶。Java的整个哲学是 如果您还没有源代码,可以使用Java反编译器(例如)将.class文件反编译为.Java文件,然后使用现代JDK重新编译。如果JAR需要在特定的JVM上运行,我会非常惊讶。Java的整个哲学是

我有一个JAR,它可能是由非常旧版本的JDK编译的。它需要Microsoft JVM来执行JAR。如果我想重新编译这个JAR,我应该下载并使用哪个JDK版本?有什么特别的问题我必须考虑吗?
另外,我是JAVA新手,请原谅我拙劣的演示。

如果JAR需要一个特定的JVM来运行,我会非常惊讶。Java的整个哲学是


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

如果JAR需要在特定的JVM上运行,我会非常惊讶。Java的整个哲学是


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

如果JAR需要在特定的JVM上运行,我会非常惊讶。Java的整个哲学是


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

如果JAR需要在特定的JVM上运行,我会非常惊讶。Java的整个哲学是


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

如果您有源代码,应该能够使用最新的JDK编译它。如果代码包含的变量名在以后的Java版本(断言、枚举等)中成为保留字,则可能需要指定源版本(1.3、1.4、…、1.7)。您可以使用编译器的
-source
选项执行此操作。
如果jar最初是由(您提到的Microsoft JVM)构建的,那么我不确定您是否可以使用Oracle JDK编译它,这实际上取决于代码中使用了什么。
如果没有源代码,请尝试使用Java反编译器,例如或,从jar中的类文件获取源代码。您需要验证反编译器是否支持旧版本Java创建的字节码。

您可以使用所描述的方法找出类编译的目标Java版本。

如果您有源代码,您应该能够使用最新的JDK编译它。如果代码包含的变量名在以后的Java版本(断言、枚举等)中成为保留字,则可能需要指定源版本(1.3、1.4、…、1.7)。您可以使用编译器的
-source
选项执行此操作。
如果jar最初是由(您提到的Microsoft JVM)构建的,那么我不确定您是否可以使用Oracle JDK编译它,这实际上取决于代码中使用了什么。
如果没有源代码,请尝试使用Java反编译器,例如或,从jar中的类文件获取源代码。您需要验证反编译器是否支持旧版本Java创建的字节码。

您可以使用所描述的方法找出类编译的目标Java版本。

如果您有源代码,您应该能够使用最新的JDK编译它。如果代码包含的变量名在以后的Java版本(断言、枚举等)中成为保留字,则可能需要指定源版本(1.3、1.4、…、1.7)。您可以使用编译器的
-source
选项执行此操作。
如果jar最初是由(您提到的Microsoft JVM)构建的,那么我不确定您是否可以使用Oracle JDK编译它,这实际上取决于代码中使用了什么。
如果没有源代码,请尝试使用Java反编译器,例如或,从jar中的类文件获取源代码。您需要验证反编译器是否支持旧版本Java创建的字节码。

您可以使用所描述的方法找出类编译的目标Java版本。

如果您有源代码,您应该能够使用最新的JDK编译它。如果代码包含的变量名在以后的Java版本(断言、枚举等)中成为保留字,则可能需要指定源版本(1.3、1.4、…、1.7)。您可以使用编译器的
-source
选项执行此操作。
如果jar最初是由(您提到的Microsoft JVM)构建的,那么我不确定您是否可以使用Oracle JDK编译它,这实际上取决于代码中使用了什么。
如果没有源代码,请尝试使用Java反编译器,例如或,从jar中的类文件获取源代码。您需要验证反编译器是否支持旧版本Java创建的字节码。

您可以使用所描述的方法找出类编译的目标Java版本。

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

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

JVM具有向后兼容性。因此,例如,为Java1.4编写的代码也应该在第8个JVM上运行。问题可能是您的jar正在使用Microsoft