Browse Source

try to adapt to Java10+ rapidly changing major versions

master
Stefan Bodewig 7 years ago
parent
commit
bd0759d943
14 changed files with 337 additions and 106 deletions
  1. +1
    -0
      WHATSNEW
  2. +3
    -0
      build.xml
  3. +39
    -0
      manual/Tasks/conditions.html
  4. +5
    -4
      manual/Tasks/javac.html
  5. +2
    -0
      src/main/org/apache/tools/ant/antlib.xml
  6. +11
    -5
      src/main/org/apache/tools/ant/taskdefs/Javac.java
  7. +2
    -1
      src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
  8. +19
    -4
      src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
  9. +115
    -0
      src/main/org/apache/tools/ant/taskdefs/condition/JavaVersion.java
  10. +2
    -0
      src/main/org/apache/tools/ant/types/conditions/antlib.xml
  11. +87
    -91
      src/main/org/apache/tools/ant/util/JavaEnvUtils.java
  12. +3
    -0
      src/tests/antunit/antunit-base.xml
  13. +40
    -0
      src/tests/antunit/taskdefs/condition/javaversion-test.xml
  14. +8
    -1
      src/tests/antunit/taskdefs/javac-test.xml

+ 1
- 0
WHATSNEW View File

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


+ 3
- 0
build.xml View File

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


+ 39
- 0
manual/Tasks/conditions.html View File

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

+ 5
- 4
manual/Tasks/javac.html View File

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


+ 2
- 0
src/main/org/apache/tools/ant/antlib.xml View File

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


+ 11
- 5
src/main/org/apache/tools/ant/taskdefs/Javac.java View File

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


+ 2
- 1
src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java View File

@@ -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();


+ 19
- 4
src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java View File

@@ -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");
@@ -719,6 +719,21 @@ public abstract class DefaultCompilerAdapter
return assumeJava19();
}

/**
* 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());
}




+ 115
- 0
src/main/org/apache/tools/ant/taskdefs/condition/JavaVersion.java View File

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

}

+ 2
- 0
src/main/org/apache/tools/ant/types/conditions/antlib.xml View File

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


+ 87
- 91
src/main/org/apache/tools/ant/util/JavaEnvUtils.java View File

@@ -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");
}
}

@@ -504,52 +506,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;
}


+ 3
- 0
src/tests/antunit/antunit-base.xml View File

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


+ 40
- 0
src/tests/antunit/taskdefs/condition/javaversion-test.xml View File

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

+ 8
- 1
src/tests/antunit/taskdefs/javac-test.xml View File

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


Loading…
Cancel
Save