Shriram
Shriram

Reputation: 4411

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.

Upvotes: 6

Views: 4422

Answers (2)

Andy Brown
Andy Brown

Reputation: 12999

If you only have standard Unix tools available and not the javap command then you can get a class file version in the form of a hex <minor> <major> version like this:

$ dd if=YourFile.class ibs=1 skip=4 count=4 of=/dev/stdout status=none | od -An -tx2 --endian=big

Example output. 0034 is 52 and therefore this class is java 8.

 0000 0034

Upvotes: 2

Jon Skeet
Jon Skeet

Reputation: 1500675

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.

Upvotes: 14

Related Questions