|
|
@@ -127,6 +127,42 @@ public final class JavaEnvUtils { |
|
|
|
* @since Ant 1.9.8 |
|
|
|
*/ |
|
|
|
public static final int VERSION_9 = 90; |
|
|
|
|
|
|
|
/** |
|
|
|
* Version constant for Java 10 |
|
|
|
* @since Ant 1.10.7 |
|
|
|
*/ |
|
|
|
public static final String JAVA_10 = "10"; |
|
|
|
/** |
|
|
|
* Number Version constant for Java 10 |
|
|
|
* @since Ant 1.10.7 |
|
|
|
*/ |
|
|
|
public static final int VERSION_10 = 100; |
|
|
|
|
|
|
|
/** |
|
|
|
* Version constant for Java 11 |
|
|
|
* @since Ant 1.10.7 |
|
|
|
*/ |
|
|
|
public static final String JAVA_11 = "11"; |
|
|
|
/** |
|
|
|
* Number Version constant for Java 11 |
|
|
|
* @since Ant 1.10.7 |
|
|
|
*/ |
|
|
|
public static final int VERSION_11 = 110; |
|
|
|
|
|
|
|
/** |
|
|
|
* Version constant for Java 12 |
|
|
|
* @since Ant 1.10.7 |
|
|
|
*/ |
|
|
|
|
|
|
|
public static final String JAVA_12 = "12"; |
|
|
|
/** |
|
|
|
* Number Version constant for Java 12 |
|
|
|
* @since Ant 1.10.7 |
|
|
|
*/ |
|
|
|
public static final int VERSION_12 = 120; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Whether this is the Kaffe VM */ |
|
|
|
private static boolean kaffeDetected; |
|
|
@@ -148,44 +184,11 @@ public final class JavaEnvUtils { |
|
|
|
|
|
|
|
static { |
|
|
|
|
|
|
|
// Determine the Java version by looking at available classes |
|
|
|
// java.net.Proxy was introduced in JDK 1.5 |
|
|
|
// java.lang.CharSequence was introduced in JDK 1.4 |
|
|
|
// java.lang.StrictMath was introduced in JDK 1.3 |
|
|
|
// java.lang.ThreadLocal was introduced in JDK 1.2 |
|
|
|
// java.lang.Void was introduced in JDK 1.1 |
|
|
|
// Count up version until a NoClassDefFoundError ends the try |
|
|
|
|
|
|
|
try { |
|
|
|
javaVersion = JAVA_1_0; |
|
|
|
javaVersionNumber = VERSION_1_0; |
|
|
|
Class.forName("java.lang.Void"); |
|
|
|
javaVersion = JAVA_1_1; |
|
|
|
javaVersionNumber++; |
|
|
|
Class.forName("java.lang.ThreadLocal"); |
|
|
|
javaVersion = JAVA_1_2; |
|
|
|
javaVersionNumber++; |
|
|
|
Class.forName("java.lang.StrictMath"); |
|
|
|
javaVersion = JAVA_1_3; |
|
|
|
javaVersionNumber++; |
|
|
|
Class.forName("java.lang.CharSequence"); |
|
|
|
javaVersion = JAVA_1_4; |
|
|
|
javaVersionNumber++; |
|
|
|
Class.forName("java.net.Proxy"); |
|
|
|
javaVersion = JAVA_1_5; |
|
|
|
javaVersionNumber++; |
|
|
|
Class.forName("java.net.CookieStore"); |
|
|
|
javaVersion = JAVA_1_6; |
|
|
|
javaVersionNumber++; |
|
|
|
Class.forName("java.nio.file.FileSystem"); |
|
|
|
javaVersion = JAVA_1_7; |
|
|
|
javaVersionNumber++; |
|
|
|
Class.forName("java.lang.reflect.Executable"); |
|
|
|
// only java 1.8 up supported. |
|
|
|
javaVersion = JAVA_1_8; |
|
|
|
javaVersionNumber++; |
|
|
|
javaVersionNumber = VERSION_1_8; |
|
|
|
Class.forName("java.lang.module.ModuleDescriptor"); |
|
|
|
javaVersion = JAVA_9; |
|
|
|
javaVersionNumber = VERSION_9; |
|
|
|
// at least Java9 and this should properly support the purely numeric version property |
|
|
|
String v = System.getProperty("java.specification.version"); |
|
|
|
DeweyDecimal pv = new DeweyDecimal(v); |
|
|
@@ -462,97 +465,60 @@ public final class JavaEnvUtils { |
|
|
|
*/ |
|
|
|
|
|
|
|
private static void buildJrePackages() { |
|
|
|
jrePackages = new Vector<>(); |
|
|
|
if (isAtLeastJavaVersion(JAVA_1_1)) { |
|
|
|
//things like sun.reflection, sun.misc, sun.net |
|
|
|
jrePackages.addElement("sun"); |
|
|
|
jrePackages.addElement("java"); |
|
|
|
jrePackages.addElement("javax"); |
|
|
|
} |
|
|
|
if (isAtLeastJavaVersion(JAVA_1_2)) { |
|
|
|
jrePackages.addElement("com.sun.java"); |
|
|
|
jrePackages.addElement("com.sun.image"); |
|
|
|
// are there any here that we forgot? |
|
|
|
} |
|
|
|
if (isAtLeastJavaVersion(JAVA_1_3)) { |
|
|
|
jrePackages.addElement("org.omg"); |
|
|
|
jrePackages.addElement("com.sun.corba"); |
|
|
|
jrePackages.addElement("com.sun.jndi"); |
|
|
|
jrePackages.addElement("com.sun.media"); |
|
|
|
jrePackages.addElement("com.sun.naming"); |
|
|
|
jrePackages.addElement("com.sun.org.omg"); |
|
|
|
jrePackages.addElement("com.sun.rmi"); |
|
|
|
jrePackages.addElement("sunw.io"); |
|
|
|
jrePackages.addElement("sunw.util"); |
|
|
|
} |
|
|
|
if (isAtLeastJavaVersion(JAVA_1_4)) { |
|
|
|
if (javaVersionNumber == VERSION_1_4) { |
|
|
|
jrePackages.addElement("org.apache.crimson"); |
|
|
|
jrePackages.addElement("org.apache.xalan"); |
|
|
|
jrePackages.addElement("org.apache.xml"); |
|
|
|
jrePackages.addElement("org.apache.xpath"); |
|
|
|
} |
|
|
|
jrePackages.addElement("org.ietf.jgss"); |
|
|
|
jrePackages.addElement("org.w3c.dom"); |
|
|
|
jrePackages.addElement("org.xml.sax"); |
|
|
|
} |
|
|
|
if (isAtLeastJavaVersion(JAVA_1_5)) { |
|
|
|
//In Java1.5, the apache stuff moved. |
|
|
|
jrePackages.addElement("com.sun.org.apache"); |
|
|
|
} |
|
|
|
if (isAtLeastJavaVersion(JAVA_1_7)) { |
|
|
|
jrePackages.addElement("jdk"); |
|
|
|
} |
|
|
|
} |
|
|
|
// do we still need this? As we only support java 1.8 upwards this would be the fixed list |
|
|
|
// is this list correct for java 9 and above? |
|
|
|
jrePackages = new Vector<>(); |
|
|
|
jrePackages.addElement("sun"); |
|
|
|
jrePackages.addElement("java"); |
|
|
|
jrePackages.addElement("javax"); |
|
|
|
jrePackages.addElement("com.sun.java"); |
|
|
|
jrePackages.addElement("com.sun.image"); |
|
|
|
jrePackages.addElement("org.omg"); |
|
|
|
jrePackages.addElement("com.sun.corba"); |
|
|
|
jrePackages.addElement("com.sun.jndi"); |
|
|
|
jrePackages.addElement("com.sun.media"); |
|
|
|
jrePackages.addElement("com.sun.naming"); |
|
|
|
jrePackages.addElement("com.sun.org.omg"); |
|
|
|
jrePackages.addElement("com.sun.rmi"); |
|
|
|
jrePackages.addElement("sunw.io"); |
|
|
|
jrePackages.addElement("sunw.util"); |
|
|
|
jrePackages.addElement("org.ietf.jgss"); |
|
|
|
jrePackages.addElement("org.w3c.dom"); |
|
|
|
jrePackages.addElement("org.xml.sax"); |
|
|
|
jrePackages.addElement("com.sun.org.apache"); |
|
|
|
jrePackages.addElement("jdk"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Testing helper method; kept here for unification of changes. |
|
|
|
* @return a list of test classes depending on the java version. |
|
|
|
*/ |
|
|
|
public static Vector<String> getJrePackageTestCases() { |
|
|
|
// do we still need this? As we only support java 1.8 upwards this would be the fixed list |
|
|
|
// is this list correct for java 9 and above? |
|
|
|
Vector<String> tests = new Vector<>(); |
|
|
|
tests.addElement("java.lang.Object"); |
|
|
|
if (isAtLeastJavaVersion(JAVA_1_1)) { |
|
|
|
//things like sun.reflection, sun.misc, sun.net |
|
|
|
tests.addElement("sun.reflect.SerializationConstructorAccessorImpl"); |
|
|
|
tests.addElement("sun.net.www.http.HttpClient"); |
|
|
|
tests.addElement("sun.audio.AudioPlayer"); |
|
|
|
} |
|
|
|
if (isAtLeastJavaVersion(JAVA_1_2)) { |
|
|
|
tests.addElement("javax.accessibility.Accessible"); |
|
|
|
tests.addElement("sun.misc.BASE64Encoder"); |
|
|
|
tests.addElement("com.sun.image.codec.jpeg.JPEGCodec"); |
|
|
|
} |
|
|
|
if (isAtLeastJavaVersion(JAVA_1_3)) { |
|
|
|
tests.addElement("org.omg.CORBA.Any"); |
|
|
|
tests.addElement("com.sun.corba.se.internal.corba.AnyImpl"); |
|
|
|
tests.addElement("com.sun.jndi.ldap.LdapURL"); |
|
|
|
tests.addElement("com.sun.media.sound.Printer"); |
|
|
|
tests.addElement("com.sun.naming.internal.VersionHelper"); |
|
|
|
tests.addElement("com.sun.org.omg.CORBA.Initializer"); |
|
|
|
tests.addElement("sunw.io.Serializable"); |
|
|
|
tests.addElement("sunw.util.EventListener"); |
|
|
|
} |
|
|
|
if (isAtLeastJavaVersion(JAVA_1_4)) { |
|
|
|
tests.addElement("sun.audio.AudioPlayer"); |
|
|
|
if (javaVersionNumber == VERSION_1_4) { |
|
|
|
// only for 1.4, not for higher versions |
|
|
|
tests.addElement("org.apache.crimson.parser.ContentModel"); |
|
|
|
tests.addElement("org.apache.xalan.processor.ProcessorImport"); |
|
|
|
tests.addElement("org.apache.xml.utils.URI"); |
|
|
|
tests.addElement("org.apache.xpath.XPathFactory"); |
|
|
|
} |
|
|
|
tests.addElement("org.ietf.jgss.Oid"); |
|
|
|
tests.addElement("org.w3c.dom.Attr"); |
|
|
|
tests.addElement("org.xml.sax.XMLReader"); |
|
|
|
} |
|
|
|
if (isAtLeastJavaVersion(JAVA_1_5)) { |
|
|
|
tests.addElement("com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl"); |
|
|
|
} |
|
|
|
if (isAtLeastJavaVersion(JAVA_1_7)) { |
|
|
|
tests.addElement("jdk.net.Sockets"); |
|
|
|
} |
|
|
|
return tests; |
|
|
|
tests.addElement("java.lang.Object"); |
|
|
|
tests.addElement("sun.reflect.SerializationConstructorAccessorImpl"); |
|
|
|
tests.addElement("sun.net.www.http.HttpClient"); |
|
|
|
tests.addElement("sun.audio.AudioPlayer"); |
|
|
|
tests.addElement("javax.accessibility.Accessible"); |
|
|
|
tests.addElement("sun.misc.BASE64Encoder"); |
|
|
|
tests.addElement("com.sun.image.codec.jpeg.JPEGCodec"); |
|
|
|
tests.addElement("org.omg.CORBA.Any"); |
|
|
|
tests.addElement("com.sun.corba.se.internal.corba.AnyImpl"); |
|
|
|
tests.addElement("com.sun.jndi.ldap.LdapURL"); |
|
|
|
tests.addElement("com.sun.media.sound.Printer"); |
|
|
|
tests.addElement("com.sun.naming.internal.VersionHelper"); |
|
|
|
tests.addElement("com.sun.org.omg.CORBA.Initializer"); |
|
|
|
tests.addElement("sunw.io.Serializable"); |
|
|
|
tests.addElement("sunw.util.EventListener"); |
|
|
|
tests.addElement("sun.audio.AudioPlayer"); |
|
|
|
tests.addElement("org.ietf.jgss.Oid"); |
|
|
|
tests.addElement("org.w3c.dom.Attr"); |
|
|
|
tests.addElement("org.xml.sax.XMLReader"); |
|
|
|
tests.addElement("com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl"); |
|
|
|
tests.addElement("jdk.net.Sockets"); |
|
|
|
return tests; |
|
|
|
} |
|
|
|
/** |
|
|
|
* get a vector of strings of packages built into |
|
|
|