04 octubre 2007

Como saber con qué JDK se ha compilado una clase Java

Me he encontrado con una clase Java de la que no tenía ni idea de con qué JDK había sido compilada, y ante la alternativa de tener que probar con varios hasta conseguir el mínimo en que funciona, he encontrado este truco para mostrar la versión de especificación y qué JDK mínimo se necesita.
El código de la clase, que dejo aquí anotado para futuras referencias:

import java.io.*;

public class Version {
public static void main(String[] args) throws Exception {
if (args.length != 1) {
System.err.println("Usage: java version <.class file>");
System.exit(1);
}

if (! new File(args[0]).exists()) {
System.err.println(args[0] + " does not exist!");
System.exit(2);
}

DataInputStream dis = new DataInputStream(
new FileInputStream(args[0]));
int magic = dis.readInt();
if (magic != 0xcafebabe) {
System.err.println(args[0] + " is not a .class file");
System.exit(3);
}

int minor = dis.readShort();
int major = dis.readShort();
System.out.println("class file version is " + major + "." + minor);

String version = null;

if (major < 48) {
version = "1.3.1";
} else if (major == 48) {
version = "1.4.2";
} else if (major == 49) {
version = "1.5";
} else if (major == 50) {
version = "6";
} else {
version = "7";
}
System.out.println("You need to use JDK " + version + " or above");
}
}