如何找出原始的jdk版本

时间:2009-12-28 23:57:18

标签: java

我正在使用J2re1.4.2_03中的javaw.exe修改2004年编写的java程序。

问题: 有没有办法弄清楚程序员用来编译java文件的JDK编译器?

的背景故事: 我用jdk5的javac重新编译了java文件。 我用j2re1.4.2_03中的javaw.exe运行它,它给我一个弹出错误“无法找到主类。程序将退出。”

从一些谷歌搜索,错误消息意味着使用更旧的javac.exe编译的类 如果我用jdk5的javaw.exe运行它,没有错误。

我想避免重新编译所有类文件,因为我没有所有原始java文件来进行完整的重新编译。

有没有办法绕过这个或者找出原始程序员用来做这个的编译器?或者与

更好地合作的人

提前致谢

5 个答案:

答案 0 :(得分:1)

我不太清楚你的确切问题是什么。

如果您想知道如何找出类文件的Java版本,可以读取类文件的标题。您可以看到信息here,并且有一些工具可以为您检查文件。

通常应避免使用由不同编译器编译的类文件。它有一些方法,但你会在类路径地狱。新的Java文件是否与旧版本兼容(例如,没有泛型?)。您总是可以从Sun获得较旧的编译器,并使用此编译器编译您的新文件。

答案 1 :(得分:1)

  

从一些谷歌搜索中,错误消息表示使用更旧的javac.exe编译的类

我很确定不是这样。使用旧编译器编译的类文件在新的JVM下运行得很好,我从来没有遇到过混合来自不同编译器的类文件的问题;类文件格式指定得非常紧。

我怀疑您唯一需要做的就是使用-target 1.4选项编译新代码(或使用1.4编译器),这样您就可以生成1.4 JVM可以理解的类文件。

或者,只需使用1.5 JVM运行程序 - 最有可能它没有问题。

答案 2 :(得分:0)

关于您的元信息问题:有时您会获得一些环境信息,当您解压缩jar并查看/META-INF/MANIFEST.MF文件时。

答案 3 :(得分:0)

为什么不下载jdk 1.4并用它编译文件?多个jdk版本可以在任何PC或服务器上共存,只需确保运行正确的javac。

答案 4 :(得分:0)

简单的答案是“不”。根据{{​​3}},类文件中唯一的版本信息是类格式主要版本号和次要版本号。它们告诉您目标JVM版本,而不是Java编译器版本。 (理论上可能在类文件中的某些未记录的“属性”中存在Java编译器版本信息,但如果javap命令没有显示它,我不知道你是如何找到它的。 )

正如@manuel所指出的,如果您的类在JAR文件中,则JAR文件清单可能包含版本信息。但是,这将是用于创建JAR文件的jar命令的版本信息,并且无法保证用于编译的Java编译器具有相同的版本。 (甚至使用了Sun编译器!)

但是,我同意其他人说这可能不是你问题的根本原因,