git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@1236803 13f79535-47bb-0310-9956-ffa450edef68master
@@ -178,6 +178,8 @@ Other changes: | |||||
algorithms. | algorithms. | ||||
Bugzilla Report 52344. | Bugzilla Report 52344. | ||||
* Initial support for Java 8. | |||||
Changes from Ant 1.8.1 TO Ant 1.8.2 | Changes from Ant 1.8.1 TO Ant 1.8.2 | ||||
=================================== | =================================== | ||||
@@ -369,6 +369,7 @@ | |||||
<available property="jdk1.5+" classname="java.net.Proxy"/> | <available property="jdk1.5+" classname="java.net.Proxy"/> | ||||
<available property="jdk1.6+" classname="java.net.CookieStore"/> | <available property="jdk1.6+" classname="java.net.CookieStore"/> | ||||
<available property="jdk1.7+" classname="java.nio.file.FileSystem"/> | <available property="jdk1.7+" classname="java.nio.file.FileSystem"/> | ||||
<available property="jdk1.8+" classname="java.lang.reflect.Executable"/> | |||||
<available property="kaffe" classname="kaffe.util.NotImplemented"/> | <available property="kaffe" classname="kaffe.util.NotImplemented"/> | ||||
<available property="harmony" | <available property="harmony" | ||||
classname="org.apache.harmony.luni.util.Base64"/> | classname="org.apache.harmony.luni.util.Base64"/> | ||||
@@ -72,12 +72,13 @@ attribute are:</a></p> | |||||
<li><code>classic</code> (the standard compiler of JDK 1.1/1.2) – | <li><code>classic</code> (the standard compiler of JDK 1.1/1.2) – | ||||
<code>javac1.1</code> and | <code>javac1.1</code> and | ||||
<code>javac1.2</code> can be used as aliases.</li> | <code>javac1.2</code> can be used as aliases.</li> | ||||
<li><code>modern</code> (the standard compiler of JDK 1.3/1.4/1.5/1.6/1.7) – | |||||
<li><code>modern</code> (the standard compiler of JDK 1.3/1.4/1.5/1.6/1.7/1.8) – | |||||
<code>javac1.3</code> and | <code>javac1.3</code> and | ||||
<code>javac1.4</code> and | <code>javac1.4</code> and | ||||
<code>javac1.5</code> and | <code>javac1.5</code> and | ||||
<code>javac1.6</code> and | <code>javac1.6</code> and | ||||
<code>javac1.7</code> (<em>since Ant 1.8.2</em>) can be used as aliases.</li> | |||||
<code>javac1.7</code> (<em>since Ant 1.8.2</em>) and | |||||
<code>javac1.8</code> (<em>since Ant 1.8.3</em>) can be used as aliases.</li> | |||||
<li><code>jikes</code> (the <a | <li><code>jikes</code> (the <a | ||||
href="http://jikes.sourceforge.net/" target="_top">Jikes</a> | href="http://jikes.sourceforge.net/" target="_top">Jikes</a> | ||||
compiler).</li> | compiler).</li> | ||||
@@ -80,6 +80,7 @@ public class Javac extends MatchingTask { | |||||
private static final String FAIL_MSG | private static final String FAIL_MSG | ||||
= "Compile failed; see the compiler error output for details."; | = "Compile failed; see the compiler error output for details."; | ||||
private static final String JAVAC18 = "javac1.8"; | |||||
private static final String JAVAC17 = "javac1.7"; | private static final String JAVAC17 = "javac1.7"; | ||||
private static final String JAVAC16 = "javac1.6"; | private static final String JAVAC16 = "javac1.6"; | ||||
private static final String JAVAC15 = "javac1.5"; | private static final String JAVAC15 = "javac1.5"; | ||||
@@ -149,6 +150,8 @@ public class Javac extends MatchingTask { | |||||
return JAVAC16; | return JAVAC16; | ||||
} else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)) { | } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)) { | ||||
return JAVAC17; | return JAVAC17; | ||||
} else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)) { | |||||
return JAVAC18; | |||||
} else { | } else { | ||||
return CLASSIC; | return CLASSIC; | ||||
} | } | ||||
@@ -600,7 +603,7 @@ public class Javac extends MatchingTask { | |||||
/** | /** | ||||
* Sets the target VM that the classes will be compiled for. Valid | * 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 | * 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", "5", "6" and "7". | |||||
* "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "5", "6", "7" and "8". | |||||
* @param target the target VM | * @param target the target VM | ||||
*/ | */ | ||||
public void setTarget(String target) { | public void setTarget(String target) { | ||||
@@ -765,6 +768,7 @@ public class Javac extends MatchingTask { | |||||
private String getAltCompilerName(String anImplementation) { | private String getAltCompilerName(String anImplementation) { | ||||
if (JAVAC17.equalsIgnoreCase(anImplementation) | if (JAVAC17.equalsIgnoreCase(anImplementation) | ||||
|| JAVAC18.equalsIgnoreCase(anImplementation) | |||||
|| JAVAC16.equalsIgnoreCase(anImplementation) | || JAVAC16.equalsIgnoreCase(anImplementation) | ||||
|| JAVAC15.equalsIgnoreCase(anImplementation) | || JAVAC15.equalsIgnoreCase(anImplementation) | ||||
|| JAVAC14.equalsIgnoreCase(anImplementation) | || JAVAC14.equalsIgnoreCase(anImplementation) | ||||
@@ -778,6 +782,7 @@ public class Javac extends MatchingTask { | |||||
if (MODERN.equalsIgnoreCase(anImplementation)) { | if (MODERN.equalsIgnoreCase(anImplementation)) { | ||||
String nextSelected = assumedJavaVersion(); | String nextSelected = assumedJavaVersion(); | ||||
if (JAVAC17.equalsIgnoreCase(nextSelected) | if (JAVAC17.equalsIgnoreCase(nextSelected) | ||||
|| JAVAC18.equalsIgnoreCase(nextSelected) | |||||
|| JAVAC16.equalsIgnoreCase(nextSelected) | || JAVAC16.equalsIgnoreCase(nextSelected) | ||||
|| JAVAC15.equalsIgnoreCase(nextSelected) | || JAVAC15.equalsIgnoreCase(nextSelected) | ||||
|| JAVAC14.equalsIgnoreCase(nextSelected) | || JAVAC14.equalsIgnoreCase(nextSelected) | ||||
@@ -1014,6 +1019,7 @@ public class Javac extends MatchingTask { | |||||
protected boolean isJdkCompiler(String compilerImpl) { | protected boolean isJdkCompiler(String compilerImpl) { | ||||
return MODERN.equals(compilerImpl) | return MODERN.equals(compilerImpl) | ||||
|| CLASSIC.equals(compilerImpl) | || CLASSIC.equals(compilerImpl) | ||||
|| JAVAC18.equals(compilerImpl) | |||||
|| JAVAC17.equals(compilerImpl) | || JAVAC17.equals(compilerImpl) | ||||
|| JAVAC16.equals(compilerImpl) | || JAVAC16.equals(compilerImpl) | ||||
|| JAVAC15.equals(compilerImpl) | || JAVAC15.equals(compilerImpl) | ||||
@@ -348,7 +348,7 @@ public abstract class DefaultCompilerAdapter | |||||
} else { | } else { | ||||
cmd.createArgument().setValue(source); | cmd.createArgument().setValue(source); | ||||
} | } | ||||
} else if ((assumeJava15() || assumeJava16() || assumeJava17()) | |||||
} else if ((assumeJava15() || assumeJava16() || assumeJava17() || assumeJava18()) | |||||
&& attributes.getTarget() != null) { | && attributes.getTarget() != null) { | ||||
String t = attributes.getTarget(); | String t = attributes.getTarget(); | ||||
if (t.equals("1.1") || t.equals("1.2") || t.equals("1.3") | if (t.equals("1.1") || t.equals("1.2") || t.equals("1.3") | ||||
@@ -360,10 +360,15 @@ public abstract class DefaultCompilerAdapter | |||||
} | } | ||||
setImplicitSourceSwitch((assumeJava15() || assumeJava16()) | setImplicitSourceSwitch((assumeJava15() || assumeJava16()) | ||||
? "1.5 in JDK 1.5 and 1.6" | ? "1.5 in JDK 1.5 and 1.6" | ||||
: "1.7 in JDK 1.7", | |||||
: (assumeJava17() | |||||
? "1.7 in JDK 1.7" | |||||
: "1.8 in JDK 1.8"), | |||||
cmd, t, s); | cmd, t, s); | ||||
} else if (assumeJava17() && (t.equals("1.5") || t.equals("1.6"))) { | } else if (assumeJava17() && (t.equals("1.5") || t.equals("1.6"))) { | ||||
setImplicitSourceSwitch("1.7 in JDK 1.7", cmd, t, t); | setImplicitSourceSwitch("1.7 in JDK 1.7", cmd, t, t); | ||||
} else if (assumeJava18() && | |||||
(t.equals("1.5") || t.equals("1.6") || t.equals("1.7"))) { | |||||
setImplicitSourceSwitch("1.8 in JDK 1.8", cmd, t, t); | |||||
} | } | ||||
} | } | ||||
return cmd; | return cmd; | ||||
@@ -637,6 +642,21 @@ public abstract class DefaultCompilerAdapter | |||||
&& JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)); | && JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_7)); | ||||
} | } | ||||
/** | |||||
* Shall we assume JDK 1.8 command line switches? | |||||
* @return true if JDK 1.8 | |||||
* @since Ant 1.8.3 | |||||
*/ | |||||
protected boolean assumeJava18() { | |||||
return "javac1.8".equals(attributes.getCompilerVersion()) | |||||
|| ("classic".equals(attributes.getCompilerVersion()) | |||||
&& JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)) | |||||
|| ("modern".equals(attributes.getCompilerVersion()) | |||||
&& JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)) | |||||
|| ("extJavac".equals(attributes.getCompilerVersion()) | |||||
&& JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_8)); | |||||
} | |||||
/** | /** | ||||
* Combines a user specified bootclasspath with the system | * Combines a user specified bootclasspath with the system | ||||
* bootclasspath taking build.sysclasspath into account. | * bootclasspath taking build.sysclasspath into account. | ||||
@@ -94,6 +94,11 @@ public final class JavaEnvUtils { | |||||
/** Number Version constant for Java 1.7 */ | /** Number Version constant for Java 1.7 */ | ||||
public static final int VERSION_1_7 = 17; | public static final int VERSION_1_7 = 17; | ||||
/** Version constant for Java 1.8 */ | |||||
public static final String JAVA_1_8 = "1.8"; | |||||
/** Number Version constant for Java 1.8 */ | |||||
public static final int VERSION_1_8 = 18; | |||||
/** Whether this is the Kaffe VM */ | /** Whether this is the Kaffe VM */ | ||||
private static boolean kaffeDetected; | private static boolean kaffeDetected; | ||||
/** Whether this is the GNU VM (gcj/gij) */ | /** Whether this is the GNU VM (gcj/gij) */ | ||||
@@ -140,6 +145,9 @@ public final class JavaEnvUtils { | |||||
Class.forName("java.nio.file.FileSystem"); | Class.forName("java.nio.file.FileSystem"); | ||||
javaVersion = JAVA_1_7; | javaVersion = JAVA_1_7; | ||||
javaVersionNumber++; | javaVersionNumber++; | ||||
Class.forName("java.lang.reflect.Executable"); | |||||
javaVersion = JAVA_1_8; | |||||
javaVersionNumber++; | |||||
} catch (Throwable t) { | } catch (Throwable t) { | ||||
// swallow as we've hit the max class version that | // swallow as we've hit the max class version that | ||||
// we have | // we have | ||||
@@ -370,6 +378,7 @@ public final class JavaEnvUtils { | |||||
private static void buildJrePackages() { | private static void buildJrePackages() { | ||||
jrePackages = new Vector(); | jrePackages = new Vector(); | ||||
switch(javaVersionNumber) { | switch(javaVersionNumber) { | ||||
case VERSION_1_8: | |||||
case VERSION_1_7: | case VERSION_1_7: | ||||
case VERSION_1_6: | case VERSION_1_6: | ||||
case VERSION_1_5: | case VERSION_1_5: | ||||
@@ -421,6 +430,7 @@ public final class JavaEnvUtils { | |||||
Vector tests = new Vector(); | Vector tests = new Vector(); | ||||
tests.addElement("java.lang.Object"); | tests.addElement("java.lang.Object"); | ||||
switch(javaVersionNumber) { | switch(javaVersionNumber) { | ||||
case VERSION_1_8: | |||||
case VERSION_1_7: | case VERSION_1_7: | ||||
case VERSION_1_6: | case VERSION_1_6: | ||||
case VERSION_1_5: | case VERSION_1_5: | ||||
@@ -26,6 +26,7 @@ | |||||
<property name="test3.jar" location="${java.io.tmpdir}/test3.jar"/> | <property name="test3.jar" location="${java.io.tmpdir}/test3.jar"/> | ||||
<property name="test4.jar" location="${java.io.tmpdir}/test4.jar"/> | <property name="test4.jar" location="${java.io.tmpdir}/test4.jar"/> | ||||
<property name="test5.jar" location="${java.io.tmpdir}/test5.jar"/> | <property name="test5.jar" location="${java.io.tmpdir}/test5.jar"/> | ||||
<available property="jdk1.8+" classname="java.lang.reflect.Executable"/> | |||||
<available property="jdk1.7+" classname="java.nio.file.FileSystem"/> | <available property="jdk1.7+" classname="java.nio.file.FileSystem"/> | ||||
<available property="jdk1.6+" classname="java.net.CookieStore"/> | <available property="jdk1.6+" classname="java.net.CookieStore"/> | ||||
<available property="jdk1.5+" classname="java.net.Proxy"/> | <available property="jdk1.5+" classname="java.net.Proxy"/> | ||||