diff --git a/WHATSNEW b/WHATSNEW index 1936b379b..998144631 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -21,6 +21,10 @@ Changes that could break older environments: * The ant.java.version property will now hold the value "9" rather than "1.9" if running on Java 9. + * will no longer allow the -Xnew option (or xmic compiler) to + be used when running on Java 9 since this option has been removed. + Bugzilla Report 59906 + Fixed bugs: ----------- diff --git a/bootstrap.bat b/bootstrap.bat index 2f919b39f..be2ec0b5a 100755 --- a/bootstrap.bat +++ b/bootstrap.bat @@ -53,6 +53,7 @@ echo JAVA_HOME=%JAVA_HOME% echo JAVA=%JAVA% echo JAVAC=%JAVAC% echo CLASSPATH=%CLASSPATH% +echo ANT_HOME=%ANT_HOME% if "%OS%" == "Windows_NT" if exist %CLASSDIR%\nul rmdir/s/q %CLASSDIR% if not "%OS%" == "Windows_NT" if exist %CLASSDIR%\nul deltree/y %CLASSDIR% diff --git a/manual/Tasks/rmic.html b/manual/Tasks/rmic.html index 12b30c51e..3c7a6d643 100644 --- a/manual/Tasks/rmic.html +++ b/manual/Tasks/rmic.html @@ -61,7 +61,9 @@ attribute. or a nested element. running on JDK 9+.
  • xnew - the sun compiler forked into a separate process, with the -Xnew option (since Ant 1.7). - This is the most reliable way to use -Xnew
  • + This is the most reliable way to use -Xnew. +

    JDK9 has removed support for -Xnew and starting with Ant + 1.9.8 this option will be rejected by ant when running on JDK9.
  • "" (empty string). This has the same behaviour as not setting the compiler attribute. First the value of build.rmic is used if defined, and if not, the default for the platform is chosen. If build.rmic is set to this, you get the default. diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java b/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java index bb2cfaabb..d4483d98f 100644 --- a/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java +++ b/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java @@ -24,11 +24,13 @@ import java.util.List; import java.util.Random; import java.util.Vector; +import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Rmic; import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.util.FileNameMapper; +import org.apache.tools.ant.util.JavaEnvUtils; import org.apache.tools.ant.util.StringUtils; /** @@ -248,6 +250,8 @@ public abstract class DefaultRmicAdapter implements RmicAdapter { compilerArgs = preprocessCompilerArgs(compilerArgs); cmd.addArguments(compilerArgs); + verifyArguments(cmd); + logAndAddFilesToCompile(cmd); return cmd; } @@ -349,6 +353,16 @@ public abstract class DefaultRmicAdapter implements RmicAdapter { attributes.log(niceSourceList.toString(), Project.MSG_VERBOSE); } + private void verifyArguments(Commandline cmd) { + if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) { + for (String arg : cmd.getArguments()) { + if ("-Xnew".equals(arg)) { + throw new BuildException("JDK9 has removed support for -Xnew"); + } + } + } + } + /** * Mapper that may return up to two file names. * diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java index 1f41bcf0c..f2f186135 100644 --- a/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java +++ b/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java @@ -24,11 +24,13 @@ import org.apache.tools.ant.BuildFileRule; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.taskdefs.rmic.RmicAdapterFactory; import org.apache.tools.ant.taskdefs.rmic.DefaultRmicAdapter; +import org.apache.tools.ant.util.JavaEnvUtils; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; /** @@ -352,7 +354,7 @@ public class RmicAdvancedTest { */ @Test public void testXnewForked() throws Exception { - buildRule.executeTarget("testXnewForked"); + xnewTest("testXnewForked"); } /** @@ -362,7 +364,7 @@ public class RmicAdvancedTest { */ @Test public void testXnewForkedDest() throws Exception { - buildRule.executeTarget("testXnewForkedDest"); + xnewTest("testXnewForkedDest"); } /** @@ -372,7 +374,7 @@ public class RmicAdvancedTest { */ @Test public void testXnewCompiler() throws Exception { - buildRule.executeTarget("testXnewCompiler"); + xnewTest("testXnewCompiler"); } /** @@ -382,7 +384,7 @@ public class RmicAdvancedTest { */ @Test public void testXnewCompilerDest() throws Exception { - buildRule.executeTarget("testXnewCompilerDest"); + xnewTest("testXnewCompilerDest"); } /** @@ -425,6 +427,19 @@ public class RmicAdvancedTest { buildRule.executeTarget("testIIOPDest"); } + private void xnewTest(String target) { + if (!JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) { + buildRule.executeTarget(target); + } else { + try { + buildRule.executeTarget(target); + fail("Target should have thrown a BuildException"); + } catch (BuildException ex) { + assertEquals("JDK9 has removed support for -Xnew", ex.getMessage()); + } + } + } + /** * this little bunny verifies that we can load stuff, and that * a failure to execute is turned into a fault