我正在修改一个java程序,该程序是在2004年使用J2re1.4.2_03的javaw.exe编写的。
问题:有没有办法找出程序员使用哪个JDK编译器来编译java文件?
背景故事:我用jdk5的javac重新编译了java文件。我用j2re1.4.2_03中的javaw.exe运行它,它给我一个弹出错误:“找不到主类。程序将退出。”
从谷歌上看,错误消息意味着如果我用JDK5的javaw.exe运行,用更老的javac.exe编译的类,没有错误。
我希望避免重新编译所有的类文件,因为我没有所有的原始java文件来进行完全的重新编译。
有没有办法绕过这一点,或者找出最初的程序员使用哪个编译器来做这件事?或者使用更好的
提前感谢
发布于 2009-12-29 08:01:43
我不太清楚你的确切问题是什么。
如果您想知道如何找出类文件来自哪个Java版本,那么可以读取类文件的头文件。你可以看到信息here,还有一些工具可以帮你检查这些文件。
通常应避免一起使用由不同编译器编译的类文件。有一些方法可以绕过它,但你会在类路径地狱中。新的Java文件是否与旧版本兼容(例如,没有泛型?)您始终可以从Sun获得较旧的编译器,并且只需使用此编译器编译较新的文件。
发布于 2009-12-29 08:10:16
从谷歌上搜索到的
,错误消息意味着使用更老的javac.exe编译的类
我很确定不是这样的。用旧版编译器编译的类文件在新的JVM上运行得很好,而且我也从未遇到过混合来自不同编译器的类文件的问题;类文件格式的规定非常严格。
我怀疑您唯一需要做的就是使用-target 1.4选项(或使用1.4编译器)编译新代码,这样您就可以生成1.4JVM能够理解的类文件。
或者,只需使用1.5版本的JVM运行该程序-很可能它将不会出现任何问题。
发布于 2009-12-29 08:12:34
关于元信息问题:有时,当您解压jar并查看/ meta -INF/MANIFEST.MF文件时,您会获得一些环境信息。
https://stackoverflow.com/questions/1972206
复制相似问题