How can I find the target Java version for a compiled class?

前端 未结 5 1537
萌比男神i
萌比男神i 2020-12-01 08:22

Duplicate:

Tool to read and display Java .class versions

If I have a compiled Java class, is there a way to tell from just the cla

相关标签:
5条回答
  • 2020-12-01 08:54

    Taken from: 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);
    }
    
    0 讨论(0)
  • 2020-12-01 09:02

    I've found this on the net and it works.

    Every '.class' file starts off with the following:

    • Magic Number [4 bytes]
    • Version Information [4 bytes]

    A hexdump of a '.class' file compiled with each of the following options reveals:

    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

    Perhaps you could use this information to write your own '.class' file version checking utility, using Java, or perhaps a scripting or shell language ;) !

    I hope this helps.

    Anthony Borla

    From: http://bytes.com/groups/java/16603-how-determine-java-bytecode-version

    0 讨论(0)
  • 2020-12-01 09:08

    Linux/Unix users have a nice tool out of the standard toolbox: file utility. Modern versions can detect the Java class fersion version and even output Java version for known class file types.

    Example output:

    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)
    

    And it fits very nicely into the standard Unix scripting toolchain.

    0 讨论(0)
  • 2020-12-01 09:10

    You can use the javap utility that comes with the standard JDK.

    javap -verbose MyClass
    
    Compiled from “MyClass.java”
    public class MyClass extends java.lang.Object
    SourceFile: “MyClass.java”
    minor version: 3
    major version: 45
    
    0 讨论(0)
  • 2020-12-01 09:20

    You can look at the byte offset 6 and 7 in the file (in a hex dump probably), which tells you which version is used. I think the Bytecode Visualizer (eclipse plugin) can see which version a class file is made for.

    Further reading

    0 讨论(0)
提交回复
热议问题