代码之家  ›  专栏  ›  技术社区  ›  Mike Pone

如何找到已编译类的目标Java版本?

  •  11
  • Mike Pone  · 技术社区  · 16 年前

    重复:

    Tool to read and display Java .class versions

    如果我有一个编译过的Java类,有没有一种方法可以仅仅从类文件判断它的目标版本兼容性是什么?具体地说,我有许多编译成Java6的类文件,它们在Java5下运行,并给出“Unrecognized version”错误。我希望能够在不运行JVM的情况下查看类文件并找到其目标版本兼容性。有什么想法吗?

    5 回复  |  直到 4 年前
        1
  •  43
  •   bruno conde    16 年前

    你可以使用 爪哇 标准JDK附带的实用程序。

    javap -verbose MyClass
    
    Compiled from “MyClass.java”
    public class MyClass extends java.lang.Object
    SourceFile: “MyClass.java”
    minor version: 3
    major version: 45
    
        2
  •  24
  •   Michael Myers KitsuneYMG    16 年前

    我在网上找到了这个,它很有效。

    每个“.class”文件都以 以下是:

    • 版本信息[4字节]

    编译的“.class”文件的hexdump 使用以下每个选项 揭示:

    javac -target 1.1 ==> CA FE BA BE 00 03 00 2D
    javac -target 1.2 CA FE BA BE 00 00 00 2E
    javac -target 1.3 ==> CA FE BA BE 00 00 00 2F
    javac -target 1.4 ==> CA FE BA BE 00 00 00 30

    要编写自己的“.class”文件 版本检查实用程序,使用Java, 或者可能是脚本或shell 语言;)!

    我希望这有帮助。

    安东尼·博拉

    发件人: http://bytes.com/groups/java/16603-how-determine-java-bytecode-version

        3
  •  5
  •   user2240219    12 年前

    Linux/Unix用户有一个标准工具箱之外的好工具: file

    示例输出:

    com/sample/Tracker.class: compiled Java class data, version 45.3
    com/sample/TestListener.class: compiled Java class data, version 49.0 (Java 1.5)
    

    它非常适合标准Unix脚本工具链。

        4
  •  3
  •   Parker    9 年前

    摘自: http://twit88.com/blog/2008/09/22/java-check-class-version/

    try {
        String filename = "C:\\MyClass.class";
        DataInputStream in = new DataInputStream(new FileInputStream(filename));
        int magic = in.readInt();
        if (magic != 0xcafebabe) {
            log.info(filename + " is not a valid class!");
        }
        int minor = in.readUnsignedShort();
        int major = in.readUnsignedShort();
        log.info(filename + ": " + major + " . " + minor);
        in.close();
    } catch (IOException e) {
        log.info("Exception: " + e.getMessage(), e);
    }
    
        5
  •  0
  •   Björn    16 年前

    您可以查看文件中的字节偏移量6和7(可能是十六进制转储),它告诉您使用的是哪个版本。我认为 Bytecode Visualizer

    Further reading