Para saber qué versión se ha utilizado de la JDK de Sun al compilar un fichero Java, podemos utilizar este algoritmo que encontré por internet basado en las especificaciones de Sun:
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"); } }
Estoy investigando si existe alguna forma de saber qué "update" de la JDK se ha utilizado, para saber si se ha usado la jdk1.6.0_14 o jdk1.6.0_16 por ejemplo. Cuando sepa cómo se hace actualizaré el código ;).