Search code examples
javajavac

find the compiled class version number


My project consists of some third party jar files, which was compiled in different version of java. My project is using older version of java so i am getting UnsupportedClassVersionError while executing the application. Is there any other way to get the version of java/jre number[45..51] in which the class files are compiled so that i can check the jar files before using it.


Solution

  • You can use javap (with -v for verbose mode), and specify any class from the jar file. For example, looking at a Joda Time jar file:

    javap -cp joda-time-2.7.jar -v org.joda.time.LocalDate
    

    Here the -cp argument specifies the jar file to be in the classpath, the -v specifies that we want more verbose information, and then there's the name of one class in the jar file.

    The output starts with:

    Classfile jar:file:/c:/Users/Jon/Test/joda-time-2.7.jar!/org/joda/time/LocalDate.class
      Last modified 12-Jan-2015; size 16535 bytes
      MD5 checksum d19ebb51bc5eabecbf225945eccd23ef
      Compiled from "LocalDate.java"
    public final class org.joda.time.LocalDate extends org.joda.time.base.BaseLocal implements org.joda.time.ReadablePartial,java.io.Serializable
      minor version: 0
      major version: 49
    

    The "minor version" and "major version" bits are the ones you're interested in.

    It's possible that a single jar file contains classes compiled with different versions, of course.