https://bz.apache.org/bugzilla/show_bug.cgi?id=59906master
| @@ -12,6 +12,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. | |||
| * <rmic> 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: | |||
| ----------- | |||
| @@ -61,7 +61,9 @@ attribute. or a nested element. | |||
| running on JDK 9+.</li> | |||
| <li>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</li> | |||
| This is the most reliable way to use -Xnew. | |||
| <br></br>JDK9 has removed support for -Xnew and starting with Ant | |||
| 1.9.8 this option will be rejected by ant when running on JDK9.</li> | |||
| <li> "" (empty string). This has the same behaviour as not setting the compiler attribute. | |||
| First the value of <tt>build.rmic</tt> 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. | |||
| @@ -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. | |||
| * | |||
| @@ -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,6 +354,7 @@ public class RmicAdvancedTest { | |||
| */ | |||
| @Test | |||
| public void testXnew() throws Exception { | |||
| // skipped via unless attribute for JDK > 6 | |||
| buildRule.executeTarget("testXnew"); | |||
| } | |||
| @@ -362,6 +365,7 @@ public class RmicAdvancedTest { | |||
| */ | |||
| @Test | |||
| public void testXnewDest() throws Exception { | |||
| // skipped via unless attribute for JDK > 6 | |||
| buildRule.executeTarget("testXnewDest"); | |||
| } | |||
| @@ -372,7 +376,7 @@ public class RmicAdvancedTest { | |||
| */ | |||
| @Test | |||
| public void testXnewForked() throws Exception { | |||
| buildRule.executeTarget("testXnewForked"); | |||
| xnewTest("testXnewForked"); | |||
| } | |||
| /** | |||
| @@ -382,7 +386,7 @@ public class RmicAdvancedTest { | |||
| */ | |||
| @Test | |||
| public void testXnewForkedDest() throws Exception { | |||
| buildRule.executeTarget("testXnewForkedDest"); | |||
| xnewTest("testXnewForkedDest"); | |||
| } | |||
| /** | |||
| @@ -392,7 +396,7 @@ public class RmicAdvancedTest { | |||
| */ | |||
| @Test | |||
| public void testXnewCompiler() throws Exception { | |||
| buildRule.executeTarget("testXnewCompiler"); | |||
| xnewTest("testXnewCompiler"); | |||
| } | |||
| /** | |||
| @@ -402,7 +406,7 @@ public class RmicAdvancedTest { | |||
| */ | |||
| @Test | |||
| public void testXnewCompilerDest() throws Exception { | |||
| buildRule.executeTarget("testXnewCompilerDest"); | |||
| xnewTest("testXnewCompilerDest"); | |||
| } | |||
| /** | |||
| @@ -445,6 +449,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 | |||