【问题标题】:how to figure out original jdk version如何找出原始jdk版本
【发布时间】:2009-12-28 23:57:17
【问题描述】:

我正在修改一个使用 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 文件来进行完整的重新编译。

有没有办法解决这个问题或找出原始程序员用来执行此操作的编译器?或与

配合得更好的一种

提前致谢

【问题讨论】:

  • 源码有没有签名的方法:public static void main( String [] args ) ??你在调用这个类吗?

标签: java


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    通过一些谷歌搜索,错误消息意味着使用更旧的 javac.exe 编译的类

    我很确定不是这样。用旧编译器编译的类文件在新的 JVM 下运行得很好,而且我也从未遇到过混合来自不同编译器的类文件的问题;类文件格式规定得非常严格。

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

    或者,只需使用 1.5 JVM 运行程序 - 很可能它可以毫无问题地运行。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          简单的答案是“不”。根据JVM specification,类文件中唯一的版本信息是类格式的主要和次要版本号。这些告诉您目标 JVM 版本,而不是 Java 编译器版本。 (理论上可能是class文件中的一些无证“属性”中有Java编译器版本信息,但是如果javap命令没有显示,我不知道你是怎么找到的。)

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

          但是,我同意其他人的观点,即这可能不是您问题的根本原因,

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-20
            • 2017-03-21
            相关资源
            最近更新 更多