diff options
author | Stefan Bodewig <bodewig@apache.org> | 2017-11-29 16:17:34 +0100 |
---|---|---|
committer | Stefan Bodewig <bodewig@apache.org> | 2017-11-29 16:17:34 +0100 |
commit | 68b846a4c27361cce2b6d7e9c60ca697f980913e (patch) | |
tree | 41938c3c8a69674c6d624c6cef5dfc142f791b38 | |
parent | ecb6acf016999e97e3c5ee4a4d109a4fff1eea4b (diff) | |
download | ant-java-10-version.tar.gz |
try to adapt to Java10+ rapidly changing major versionsjava-10-version
-rw-r--r-- | WHATSNEW | 1 | ||||
-rw-r--r-- | build.xml | 3 | ||||
-rw-r--r-- | manual/Tasks/conditions.html | 39 | ||||
-rw-r--r-- | manual/Tasks/javac.html | 9 | ||||
-rw-r--r-- | src/main/org/apache/tools/ant/antlib.xml | 2 | ||||
-rw-r--r-- | src/main/org/apache/tools/ant/taskdefs/Javac.java | 16 | ||||
-rw-r--r-- | src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java | 3 | ||||
-rw-r--r-- | src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java | 23 | ||||
-rw-r--r-- | src/main/org/apache/tools/ant/taskdefs/condition/JavaVersion.java | 115 | ||||
-rw-r--r-- | src/main/org/apache/tools/ant/types/conditions/antlib.xml | 2 | ||||
-rw-r--r-- | src/main/org/apache/tools/ant/util/JavaEnvUtils.java | 179 | ||||
-rw-r--r-- | src/tests/antunit/antunit-base.xml | 3 | ||||
-rw-r--r-- | src/tests/antunit/taskdefs/condition/javaversion-test.xml | 40 | ||||
-rw-r--r-- | src/tests/antunit/taskdefs/javac-test.xml | 9 |
14 files changed, 337 insertions, 107 deletions
@@ -48,6 +48,7 @@ Other changes: upgraded to 0.1.54. Jsch is the library behind the sshexec and scp Ant tasks. + * Added a new <javaversion> condition. Changes from Ant 1.9.8 TO Ant 1.9.9 =================================== @@ -379,6 +379,9 @@ <available property="jdk1.7+" classname="java.nio.file.FileSystem"/> <available property="jdk1.8+" classname="java.lang.reflect.Executable"/> <available property="jdk9+" classname="java.lang.module.ModuleDescriptor"/> + <condition property="jdk10+"> + <javaversion atleast="10"/> + </condition> <available property="kaffe" classname="kaffe.util.NotImplemented"/> <available property="harmony" classname="org.apache.harmony.luni.util.Base64"/> diff --git a/manual/Tasks/conditions.html b/manual/Tasks/conditions.html index 08d0bccec..35216cdff 100644 --- a/manual/Tasks/conditions.html +++ b/manual/Tasks/conditions.html @@ -1090,5 +1090,44 @@ is redundant and will be ignored.</p> <file file="${file}"/> </resourceexists> </pre></blockquote> + +<h4><a name="javaversion">javaversion</a></h4> + +<p>Tests the version of the JVM executing Ant. <em>Since Ant +1.9.10</em></p> + +<table border="1" cellpadding="2" cellspacing="0"> + <tr> + <td width="12%" valign="top"><b>Attribute</b></td> + <td width="78%" valign="top"><b>Description</b></td> + <td width="10%" valign="top"><b>Required</b></td> + </tr> + <tr> + <td valign="top">atleast</td> + <td valign="top">The version that this JVM is at least. + The format is major.minor.point. Starting with Java9 really + only the major number is determined.</td> + <td valign="top" align="center">No</td> + <td valign="top" rowspan="2" align="center">One of these.</td> + </tr> + <tr> + <td valign="top">exactly</td> + <td valign="top">The version that this JVM is exactly. + The format is <tt>major.minor.point</tt>. Starting with Java9 really + only the major number is determined.</td> + <td valign="top" align="center">No</td> + </tr> +</table> + + <p> + An example: + </p> + +<blockquote><pre> +<javaversion atleast="9"/> +</pre></blockquote> + +<p>will evaluate to true if the current JVM is Java9 or above.</p> + </body> </html> diff --git a/manual/Tasks/javac.html b/manual/Tasks/javac.html index 68c6310d3..89ec0549f 100644 --- a/manual/Tasks/javac.html +++ b/manual/Tasks/javac.html @@ -78,9 +78,10 @@ attribute are:</a></p> <code>javac1.5</code> and <code>javac1.6</code> and <code>javac1.7</code> (<em>since Ant 1.8.2</em>) and - <code>javac1.8</code> (<em>since Ant 1.8.3</em>) and</li> - <code>javac1.9</code> (<em>since Ant 1.9.5</em>) and</li> - <code>javac9</code> (<em>since Ant 1.9.8</em>) can be used as aliases.</li> + <code>javac1.8</code> (<em>since Ant 1.8.3</em>) and + <code>javac1.9</code> (<em>since Ant 1.9.5</em>) and + <code>javac9</code> (<em>since Ant 1.9.8</em>) and + <code>javac10+</code> (<em>since Ant 1.9.10</em>) can be used as aliases.</li> <li><code>jikes</code> (the <a href="http://jikes.sourceforge.net/" target="_top">Jikes</a> compiler).</li> @@ -525,7 +526,7 @@ invoking the compiler.</p> <tr> <td valign="top">release</td> <td valign="top"> - Specify the value for the <code>--release</code> switch.Ignored + Specify the value for the <code>--release</code> switch. Ignored when running on JDK < 9.<br> When set and running on JDK >= 9 the source and target attributes as well as the bootclasspath will be ignored. diff --git a/src/main/org/apache/tools/ant/antlib.xml b/src/main/org/apache/tools/ant/antlib.xml index 64498071a..8ec6714e4 100644 --- a/src/main/org/apache/tools/ant/antlib.xml +++ b/src/main/org/apache/tools/ant/antlib.xml @@ -63,6 +63,8 @@ classname="org.apache.tools.ant.taskdefs.condition.IsSigned"/> <componentdef name="istrue" onerror="ignore" classname="org.apache.tools.ant.taskdefs.condition.IsTrue"/> + <componentdef name="javaversion" onerror="ignore" + classname="org.apache.tools.ant.taskdefs.condition.JavaVersion"/> <componentdef name="matches" onerror="ignore" classname="org.apache.tools.ant.taskdefs.condition.Matches"/> <componentdef name="not" onerror="ignore" diff --git a/src/main/org/apache/tools/ant/taskdefs/Javac.java b/src/main/org/apache/tools/ant/taskdefs/Javac.java index 23c19dd16..1a5d8beb3 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Javac.java +++ b/src/main/org/apache/tools/ant/taskdefs/Javac.java @@ -86,6 +86,7 @@ public class Javac extends MatchingTask { private static final String FAIL_MSG = "Compile failed; see the compiler error output for details."; + private static final String JAVAC10_PLUS = "javac10+"; private static final String JAVAC9 = "javac9"; private static final String JAVAC19 = "javac1.9"; private static final String JAVAC18 = "javac1.8"; @@ -170,6 +171,8 @@ public class Javac extends MatchingTask { return JAVAC17; } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)) { return JAVAC18; + } else if (JavaEnvUtils.isAtLeastJavaVersion("10")) { + return JAVAC10_PLUS; } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_9)) { return JAVAC9; } else { @@ -219,7 +222,7 @@ public class Javac extends MatchingTask { * must make sure that your version of jikes supports the -source * switch.</p> * - * <p>Legal values are 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, and 5, 6, 7, 8 and 9 + * <p>Legal values are 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, and any integral number bigger than 4 * - by default, no -source argument will be used at all.</p> * * @param v Value to assign to source. @@ -772,7 +775,7 @@ public class Javac extends MatchingTask { /** * Sets the target VM that the classes will be compiled for. Valid * values depend on the compiler, for jdk 1.4 the valid values are - * "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "5", "6", "7", "8", "9". + * "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9" and any integral number bigger than 4 * @param target the target VM */ public void setTarget(final String target) { @@ -962,7 +965,8 @@ public class Javac extends MatchingTask { } private String getAltCompilerName(final String anImplementation) { - if (JAVAC9.equalsIgnoreCase(anImplementation) + if (JAVAC10_PLUS.equalsIgnoreCase(anImplementation) + || JAVAC9.equalsIgnoreCase(anImplementation) || JAVAC19.equalsIgnoreCase(anImplementation) || JAVAC18.equalsIgnoreCase(anImplementation) || JAVAC17.equalsIgnoreCase(anImplementation) @@ -978,7 +982,8 @@ public class Javac extends MatchingTask { } if (MODERN.equalsIgnoreCase(anImplementation)) { final String nextSelected = assumedJavaVersion(); - if (JAVAC9.equalsIgnoreCase(nextSelected) + if (JAVAC10_PLUS.equalsIgnoreCase(anImplementation) + || JAVAC9.equalsIgnoreCase(nextSelected) || JAVAC18.equalsIgnoreCase(nextSelected) || JAVAC17.equalsIgnoreCase(nextSelected) || JAVAC16.equalsIgnoreCase(nextSelected) @@ -1245,11 +1250,12 @@ public class Javac extends MatchingTask { * @param compilerImpl the name of the compiler implementation * @return true if compilerImpl is "modern", "classic", * "javac1.1", "javac1.2", "javac1.3", "javac1.4", "javac1.5", - * "javac1.6", "javac1.7", "javac1.8", "javac1.9" or "javac9". + * "javac1.6", "javac1.7", "javac1.8", "javac1.9", "javac9" or "javac10+". */ protected boolean isJdkCompiler(final String compilerImpl) { return MODERN.equals(compilerImpl) || CLASSIC.equals(compilerImpl) + || JAVAC10_PLUS.equals(compilerImpl) || JAVAC9.equals(compilerImpl) || JAVAC18.equals(compilerImpl) || JAVAC17.equals(compilerImpl) diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java b/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java index 871271593..48d93adb0 100644 --- a/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java +++ b/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java @@ -123,7 +123,8 @@ public final class CompilerAdapterFactory { || compilerType.equalsIgnoreCase("javac1.7") || compilerType.equalsIgnoreCase("javac1.8") || compilerType.equalsIgnoreCase("javac1.9") - || compilerType.equalsIgnoreCase("javac9")) { + || compilerType.equalsIgnoreCase("javac9") + || compilerType.equalsIgnoreCase("javac10+")) { // does the modern compiler exist? if (doesModernCompilerExist()) { return new Javac13(); diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java b/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java index 82373a9b3..350dbe560 100644 --- a/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java +++ b/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java @@ -323,7 +323,7 @@ public abstract class DefaultCompilerAdapter cmd.createArgument().setValue("-sourcepath"); cmd.createArgument().setPath(sourcepath); } - if (release == null || !assumeJava19()) { + if (release == null || !assumeJava9Plus()) { if (target != null) { cmd.createArgument().setValue("-target"); cmd.createArgument().setValue(target); @@ -395,7 +395,7 @@ public abstract class DefaultCompilerAdapter if (!assumeJava13()) { // -source added with JDK 1.4 final String t = attributes.getTarget(); final String s = attributes.getSource(); - if (release == null || !assumeJava19()) { + if (release == null || !assumeJava9Plus()) { if (release != null) { attributes.log("Support for javac --release has been added" + " in Java9 ignoring it"); @@ -720,6 +720,21 @@ public abstract class DefaultCompilerAdapter } /** + * Shall we assume JDK 9+ command line switches? + * @return true if JDK 9+ + * @since Ant 1.9.10 + */ + protected boolean assumeJava9Plus() { + return "javac1.9".equals(attributes.getCompilerVersion()) + || "javac9".equals(attributes.getCompilerVersion()) + || "javac10+".equals(attributes.getCompilerVersion()) + || (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9) && + ("classic".equals(attributes.getCompilerVersion()) + || "modern".equals(attributes.getCompilerVersion()) + || "extJavac".equals(attributes.getCompilerVersion()))); + } + + /** * Shall we assume command line switches for the given version of Java? * @since Ant 1.8.3 */ @@ -792,7 +807,7 @@ public abstract class DefaultCompilerAdapter if (assumeJava18()) { return "1.8 in JDK 1.8"; } - if (assumeJava9()) { + if (assumeJava9Plus()) { return "9 in JDK 9"; } return ""; @@ -819,7 +834,7 @@ public abstract class DefaultCompilerAdapter && !assumeJava15() && !assumeJava16()) || (t.equals("7") && !assumeJava17()) || (t.equals("8") && !assumeJava18()) - || (t.equals("9") && !assumeJava9()); + || (t.equals("9") && !assumeJava9Plus()); } diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/JavaVersion.java b/src/main/org/apache/tools/ant/taskdefs/condition/JavaVersion.java new file mode 100644 index 000000000..69a929055 --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/condition/JavaVersion.java @@ -0,0 +1,115 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.taskdefs.condition; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.util.DeweyDecimal; +import org.apache.tools.ant.util.JavaEnvUtils; + +/** + * An Java version condition. + * @since Java 1.9.10 + */ +public class JavaVersion implements Condition { + + private String atLeast = null; + private String exactly = null; + + /** + * Evaluate the condition. + * @return true if the condition is true. + * @throws BuildException if an error occurs. + */ + public boolean eval() throws BuildException { + validate(); + DeweyDecimal actual = JavaEnvUtils.getParsedJavaVersion(); + if (null != atLeast) { + return actual.isGreaterThanOrEqual(new DeweyDecimal(atLeast)); + } + if (null != exactly) { + return actual.isEqual(new DeweyDecimal(exactly)); + } + //default + return false; + } + + private void validate() throws BuildException { + if (atLeast != null && exactly != null) { + throw new BuildException("Only one of atleast or exactly may be set."); + } + if (null == atLeast && null == exactly) { + throw new BuildException("One of atleast or exactly must be set."); + } + if (atLeast != null) { + try { + // only created for side effect + new DeweyDecimal(atLeast); //NOSONAR + } catch (NumberFormatException e) { + throw new BuildException( + "The 'atleast' attribute is not a Dewey Decimal eg 1.1.0 : " + + atLeast); + } + } else { + try { + // only created for side effect + new DeweyDecimal(exactly); //NOSONAR + } catch (NumberFormatException e) { + throw new BuildException( + "The 'exactly' attribute is not a Dewey Decimal eg 1.1.0 : " + + exactly); + } + } + } + + /** + * Get the atleast attribute. + * @return the atleast attribute. + */ + public String getAtLeast() { + return atLeast; + } + + /** + * Set the atleast attribute. + * This is of the form major.minor.point. + * For example 1.7.0. + * @param atLeast the version to check against. + */ + public void setAtLeast(String atLeast) { + this.atLeast = atLeast; + } + + /** + * Get the exactly attribute. + * @return the exactly attribute. + */ + public String getExactly() { + return exactly; + } + + /** + * Set the exactly attribute. + * This is of the form major.minor.point. + * For example 1.7.0. + * @param exactly the version to check against. + */ + public void setExactly(String exactly) { + this.exactly = exactly; + } + +} diff --git a/src/main/org/apache/tools/ant/types/conditions/antlib.xml b/src/main/org/apache/tools/ant/types/conditions/antlib.xml index ff407b28b..5643a2ed0 100644 --- a/src/main/org/apache/tools/ant/types/conditions/antlib.xml +++ b/src/main/org/apache/tools/ant/types/conditions/antlib.xml @@ -66,6 +66,8 @@ classname="org.apache.tools.ant.taskdefs.condition.IsSigned"/> <typedef name="istrue" onerror="ignore" classname="org.apache.tools.ant.taskdefs.condition.IsTrue"/> + <typedef name="javaversion" onerror="ignore" + classname="org.apache.tools.ant.taskdefs.condition.JavaVersion"/> <typedef name="not" onerror="ignore" classname="org.apache.tools.ant.taskdefs.condition.Not"/> <typedef name="matches" onerror="ignore" diff --git a/src/main/org/apache/tools/ant/util/JavaEnvUtils.java b/src/main/org/apache/tools/ant/util/JavaEnvUtils.java index a551c0f6b..a86d2b120 100644 --- a/src/main/org/apache/tools/ant/util/JavaEnvUtils.java +++ b/src/main/org/apache/tools/ant/util/JavaEnvUtils.java @@ -29,6 +29,10 @@ import org.apache.tools.ant.taskdefs.condition.Os; * A set of helper methods related to locating executables or checking * conditions of a given Java installation. * + * <p>Starting with Java 10 we've stopped adding <code>JAVA_</code> + * and <code>VERSION_</code> attributes for new major version numbers + * of the JVM.</p> + * * @since Ant 1.5 */ public final class JavaEnvUtils { @@ -181,6 +185,10 @@ public final class JavaEnvUtils { 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"); + javaVersionNumber = Integer.parseInt(v) * 10; + javaVersion = v; } catch (Throwable t) { // swallow as we've hit the max class version that // we have @@ -449,51 +457,45 @@ public final class JavaEnvUtils { private static void buildJrePackages() { jrePackages = new Vector<String>(); - switch(javaVersionNumber) { - case VERSION_9: - case VERSION_1_8: - case VERSION_1_7: - jrePackages.addElement("jdk"); - // fall through - case VERSION_1_6: - case VERSION_1_5: - //In Java1.5, the apache stuff moved. - jrePackages.addElement("com.sun.org.apache"); - //fall through. - case VERSION_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"); - // fall through - case VERSION_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"); - // fall through - case VERSION_1_2: - jrePackages.addElement("com.sun.java"); - jrePackages.addElement("com.sun.image"); - // are there any here that we forgot? - // fall through - case VERSION_1_1: - default: - //things like sun.reflection, sun.misc, sun.net - jrePackages.addElement("sun"); - jrePackages.addElement("java"); - jrePackages.addElement("javax"); - break; + 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"); } } @@ -503,53 +505,46 @@ public final class JavaEnvUtils { */ public static Vector<String> getJrePackageTestCases() { Vector<String> tests = new Vector<String>(); - tests.addElement("java.lang.Object"); - switch(javaVersionNumber) { - case VERSION_9: - case VERSION_1_8: - case VERSION_1_7: - tests.addElement("jdk.net.Sockets"); - // fall through - case VERSION_1_6: - case VERSION_1_5: - tests.addElement( - "com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl "); - // Fall through - case VERSION_1_4: - tests.addElement("sun.audio.AudioPlayer"); - if (javaVersionNumber == VERSION_1_4) { - // only for 1.4, not for higher versions which fall through - 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"); - // fall through - case VERSION_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"); - // fall through - case VERSION_1_2: - tests.addElement("javax.accessibility.Accessible"); - tests.addElement("sun.misc.BASE64Encoder"); - tests.addElement("com.sun.image.codec.jpeg.JPEGCodec"); - // fall through - case VERSION_1_1: - default: - //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"); - break; + 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; } diff --git a/src/tests/antunit/antunit-base.xml b/src/tests/antunit/antunit-base.xml index 9863f3fcc..4bd4643d3 100644 --- a/src/tests/antunit/antunit-base.xml +++ b/src/tests/antunit/antunit-base.xml @@ -27,6 +27,9 @@ <property name="test3.jar" location="${antunit.tmpdir}/test3.jar"/> <property name="test4.jar" location="${antunit.tmpdir}/test4.jar"/> <property name="test5.jar" location="${antunit.tmpdir}/test5.jar"/> + <condition property="jdk10+"> + <javaversion atleast="10"/> + </condition> <available property="jdk9+" classname="java.lang.module.ModuleDescriptor"/> <available property="jdk1.8+" classname="java.lang.reflect.Executable"/> <available property="jdk1.7+" classname="java.nio.file.FileSystem"/> diff --git a/src/tests/antunit/taskdefs/condition/javaversion-test.xml b/src/tests/antunit/taskdefs/condition/javaversion-test.xml new file mode 100644 index 000000000..5f15a1e39 --- /dev/null +++ b/src/tests/antunit/taskdefs/condition/javaversion-test.xml @@ -0,0 +1,40 @@ +<?xml version="1.0"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<project name="javaversion-test" default="antunit" xmlns:au="antlib:org.apache.ant.antunit"> + <import file="../../antunit-base.xml" /> + + <target name="test-atleast"> + <au:assertTrue message="Expected javaversion of ${ant.version} to be at least 1.7.0"> + <!-- Ant 1.9.x requires Java5 at runtime - so this must be true --> + <javaversion atleast="1.5" /> + </au:assertTrue> + </target> + + <target name="test-exactly"> + <au:assertTrue message="Expected javaversion of ${ant.java.version}"> + <javaversion exactly="${ant.java.version}" /> + </au:assertTrue> + </target> + + <target name="test-atleast-fail"> + <au:assertFalse> + <javaversion atleast="1000.0" /> + </au:assertFalse> + </target> + +</project> diff --git a/src/tests/antunit/taskdefs/javac-test.xml b/src/tests/antunit/taskdefs/javac-test.xml index 05c3269d2..48ed15daf 100644 --- a/src/tests/antunit/taskdefs/javac-test.xml +++ b/src/tests/antunit/taskdefs/javac-test.xml @@ -314,7 +314,14 @@ public class Adapter implements CompilerAdapter { <delete dir="${javac-dir}/classes"/> <mkdir dir="${javac-dir}/classes"/> </sequential> - </target> + + <sequential if:set="jdk10+"> + <echo>JDK 10+</echo> + <testJavac source="10" target="10"/> + <delete dir="${javac-dir}/classes"/> + <mkdir dir="${javac-dir}/classes"/> + </sequential> + </target> <target name="testJavacWithNativeHeaderGeneration" if="jdk1.8+" depends="setup"> <mkdir dir="${javac-dir}/src/org/example" /> |