Browse Source

JavaEnvUtils - Suppot of JDK1.8+ only

Updated JavaEnvUtils to reflect that we are running JDK 1.8+, and
removal of checks that have become obsolete as a consequence thereof
master
jkf 6 years ago
parent
commit
d49dacf854
5 changed files with 114 additions and 146 deletions
  1. +1
    -6
      src/main/org/apache/tools/ant/taskdefs/GenerateKey.java
  2. +4
    -16
      src/main/org/apache/tools/ant/taskdefs/Javac.java
  3. +1
    -5
      src/main/org/apache/tools/ant/taskdefs/Javadoc.java
  4. +85
    -119
      src/main/org/apache/tools/ant/util/JavaEnvUtils.java
  5. +23
    -0
      src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java

+ 1
- 6
src/main/org/apache/tools/ant/taskdefs/GenerateKey.java View File

@@ -195,12 +195,7 @@ public class GenerateKey extends Task {
* @since Ant 1.9.14
*/
public void setSaname(final String saname) {
if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_1_7)) {
this.saname = saname;
} else {
log("The SubjectAlternativeName extension is not available for "
+"the Java Version being used.");
}
this.saname = saname;
}

/**


+ 4
- 16
src/main/org/apache/tools/ant/taskdefs/Javac.java View File

@@ -160,28 +160,16 @@ public class Javac extends MatchingTask {
}

private String assumedJavaVersion() {
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_4)) {
return JAVAC14;
}
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_5)) {
return JAVAC15;
}
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_6)) {
return JAVAC16;
}
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)) {
return JAVAC17;
}
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)) {
return JAVAC18;
}
if (JavaEnvUtils.isAtLeastJavaVersion("10")) {
return JAVAC10_PLUS;
}
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_9)) {
return JAVAC9;
}
return CLASSIC;
if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_10)) {
return JAVAC10_PLUS;
}
return MODERN; // as we are assumed to be 1.8+ and classic refers to the really old ones, default to modern
}

/**


+ 1
- 5
src/main/org/apache/tools/ant/taskdefs/Javadoc.java View File

@@ -86,10 +86,6 @@ import org.apache.tools.ant.util.JavaEnvUtils;
* @ant.task category="java"
*/
public class Javadoc extends Task {
// Whether *this VM* is 1.4+ (but also check executable != null).

private static final boolean JAVADOC_5 =
!JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_4);

private static final String LOAD_FRAME = "function loadFrames() {";
private static final int LOAD_FRAME_LEN = LOAD_FRAME.length();
@@ -1851,7 +1847,7 @@ public class Javadoc extends Task {
doModuleArguments(toExecute);

doJava14(toExecute);
if (breakiterator && (doclet == null || JAVADOC_5)) {
if (breakiterator) {
toExecute.createArgument().setValue("-breakiterator");
}
// If using an external file, write the command line options to it


+ 85
- 119
src/main/org/apache/tools/ant/util/JavaEnvUtils.java View File

@@ -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


+ 23
- 0
src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java View File

@@ -144,5 +144,28 @@ public class JavaEnvUtilsTest {
assertTrue(JavaEnvUtils.isJavaVersion("10"));
assertTrue(JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9));
}
@Test
@SuppressWarnings("deprecation")
public void java11IsDetectedProperly() {
assumeTrue("11".equals(System.getProperty("java.specification.version")));
assertEquals("11", JavaEnvUtils.getJavaVersion());
assertEquals(110, JavaEnvUtils.getJavaVersionNumber());
assertEquals(new DeweyDecimal("11"), JavaEnvUtils.getParsedJavaVersion());
assertTrue(JavaEnvUtils.isJavaVersion("11"));
assertTrue(JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9));
}
@Test
@SuppressWarnings("deprecation")
public void java12IsDetectedProperly() {
assumeTrue("12".equals(System.getProperty("java.specification.version")));
assertEquals("12", JavaEnvUtils.getJavaVersion());
assertEquals(120, JavaEnvUtils.getJavaVersionNumber());
assertEquals(new DeweyDecimal("12"), JavaEnvUtils.getParsedJavaVersion());
assertTrue(JavaEnvUtils.isJavaVersion("12"));
assertTrue(JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9));
}


}

Loading…
Cancel
Save