find the compiled class version number
Asked Answered
U

2

5

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.

Unfrequented answered 28/10, 2015 at 16:4 Comment(4)
You need the version of the class files or the version of your JRE?Unmoved
version of java in which class files are compiled!Unfrequented
You may use asm: asm.ow2.org/asm40/javadoc/user/org/objectweb/asm/…, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])Colchester
I hope it is third party jar. Even i want this version of class files of asm.. compiled. Anyway thanks for the info!Unfrequented
A
13

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.

Animalcule answered 28/10, 2015 at 16:13 Comment(1)
To know what version printed there corresponds to what java version, see #9171332Munguia
W
2

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
Windward answered 15/3, 2021 at 12:13 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.