summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Bodewig <bodewig@apache.org>2017-11-29 16:17:34 +0100
committerStefan Bodewig <bodewig@apache.org>2017-11-29 16:17:34 +0100
commit68b846a4c27361cce2b6d7e9c60ca697f980913e (patch)
tree41938c3c8a69674c6d624c6cef5dfc142f791b38
parentecb6acf016999e97e3c5ee4a4d109a4fff1eea4b (diff)
downloadant-java-10-version.tar.gz
try to adapt to Java10+ rapidly changing major versionsjava-10-version
-rw-r--r--WHATSNEW1
-rw-r--r--build.xml3
-rw-r--r--manual/Tasks/conditions.html39
-rw-r--r--manual/Tasks/javac.html9
-rw-r--r--src/main/org/apache/tools/ant/antlib.xml2
-rw-r--r--src/main/org/apache/tools/ant/taskdefs/Javac.java16
-rw-r--r--src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java3
-rw-r--r--src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java23
-rw-r--r--src/main/org/apache/tools/ant/taskdefs/condition/JavaVersion.java115
-rw-r--r--src/main/org/apache/tools/ant/types/conditions/antlib.xml2
-rw-r--r--src/main/org/apache/tools/ant/util/JavaEnvUtils.java179
-rw-r--r--src/tests/antunit/antunit-base.xml3
-rw-r--r--src/tests/antunit/taskdefs/condition/javaversion-test.xml40
-rw-r--r--src/tests/antunit/taskdefs/javac-test.xml9
14 files changed, 337 insertions, 107 deletions
diff --git a/WHATSNEW b/WHATSNEW
index e331033a6..79fb177bc 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -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
===================================
diff --git a/build.xml b/build.xml
index d20cdd33e..ffa86f1b8 100644
--- a/build.xml
+++ b/build.xml
@@ -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>
&lt;file file="${file}"/&gt;
&lt;/resourceexists&gt;
</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>
+&lt;javaversion atleast=&quot;9&quot;/&gt;
+</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 &lt; 9.<br>
When set and running on JDK &gt;= 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" />