What version of javac built my jar?
You can't tell from the JAR file itself, necessarily.
Download a hex editor and open one of the class files inside the JAR and look at byte offsets 4 through 7. The version information is built in.
http://en.wikipedia.org/wiki/Java_class_file
Note: As mentioned in the comment below,
those bytes tell you what version the class has been compiled FOR, not
what version compiled it.
Java - Which version was a .jar file built too?
That's not possible reliably, since you don't even need a JDK to build a JAR file - it's just a ZIP file with the classes and a manifest file inside.
What you can find out is what version of the class file format is used. The major version number maps to majorJDK releases:
J2SE 6.0 = 50 (0x32 hex)
J2SE 5.0 = 49 (0x31 hex)
JDK 1.4 = 48 (0x30 hex)
JDK 1.3 = 47 (0x2F hex)
JDK 1.2 = 46 (0x2E hex)
JDK 1.1 = 45 (0x2D hex)
However, the java compiler has an option to use the class file format of a previous version, which is frequently used to achieve downwards compatibility. But if you find a class file version major number of 50, you know that the classes were definitely not compiled with a Java 5 or earlier JDK.
how to check the jdk version used to compile a .class file
You're looking for this on the command line (for a class called MyClass):
On Unix/Linux:
javap -verbose MyClass | grep "major"
On Windows:
javap -verbose MyClass | findstr "major"
You want the major version from the results. Here are some example values:
- Java 1.2 uses major version 46
- Java 1.3 uses major version 47
- Java 1.4 uses major version 48
- Java 5 uses major version 49
- Java 6 uses major version 50
- Java 7 uses major version 51
- Java 8 uses major version 52
- Java 9 uses major version 53
- Java 10 uses major version 54
- Java 11 uses major version 55
How to build a jar with different java version with ANT
It's probably not ANT that cause the issue, you may need to change the project's JRE
and recompile the project with the 1.5 JRE
.
You can also try to specify the JRE used directly in your build.xml
file.
How can I build a jar for a previous Java version?
You should install 1.4.2 along side 1.6 on your machine, and configure that eclipse project to use the 1.4.2 JDK. Other projects may be configured to use the 1.6.
Technically you can compile to 1.4.2 compatibility with JDK 1.6, but odds are you will run into library problems, so it is not generally worth doing.
Get jar version in runtime
import javax.mail.internet.InternetAddress;
/**
Display package name and version information for javax.mail.internet.
*/
public final class ReadVersion {
public static void main(String... aArgs){
ReadVersion readVersion = new ReadVersion();
readVersion.readVersionInfoInManifest();
}
public void readVersionInfoInManifest(){
InternetAddress object = new InternetAddress();
Package objPackage = object.getClass().getPackage();
//examine the package object
String name = objPackage.getSpecificationTitle();
String version = objPackage.getSpecificationVersion();
//some jars may use 'Implementation Version' entries in the manifest instead
System.out.println("Package name: " + name);
System.out.println("Package version: " + version);
}
}
Related Topics
Mocking Time in Java 8's Java.Time API
How Pause and Then Resume a Thread
Method Calls Inside a Java Class Return an "Identifier Expected After This Token" Error
Execute Jsp Directly from Java
Messagebodyprovidernotfoundexception While Running Jar from Command Line
What Are Shadow Variables in Java
Java.Net.Socketexception: Software Caused Connection Abort: Recv Failed
What Is the Actual Memory Place for Static Variables
Auto Adjust the Height of Rows in a Jtable
Why Does Collections.Sort Use Mergesort But Arrays.Sort Does Not
Rounding Up a Number to Nearest Multiple of 5
Command Line Progress Bar in Java
Possible to Use Two Java Classes with Same Name and Same Package
Tomcat in Idea. War Exploded: Server Is Not Connected. Deploy Is Not Available
Why Are New Java.Util.Arrays Methods in Java 8 Not Overloaded for All the Primitive Types