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 | * The ant.java.version property will now hold the value "9" rather | ||||
| than "1.9" if running on Java 9. | 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: | Fixed bugs: | ||||
| ----------- | ----------- | ||||
| @@ -61,7 +61,9 @@ attribute. or a nested element. | |||||
| running on JDK 9+.</li> | running on JDK 9+.</li> | ||||
| <li>xnew - the sun compiler forked into a separate process, | <li>xnew - the sun compiler forked into a separate process, | ||||
| with the -Xnew option (since Ant 1.7). | 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. | <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 | 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. | 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.Random; | ||||
| import java.util.Vector; | import java.util.Vector; | ||||
| import org.apache.tools.ant.BuildException; | |||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.taskdefs.Rmic; | import org.apache.tools.ant.taskdefs.Rmic; | ||||
| import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
| import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
| import org.apache.tools.ant.util.FileNameMapper; | import org.apache.tools.ant.util.FileNameMapper; | ||||
| import org.apache.tools.ant.util.JavaEnvUtils; | |||||
| import org.apache.tools.ant.util.StringUtils; | import org.apache.tools.ant.util.StringUtils; | ||||
| /** | /** | ||||
| @@ -248,6 +250,8 @@ public abstract class DefaultRmicAdapter implements RmicAdapter { | |||||
| compilerArgs = preprocessCompilerArgs(compilerArgs); | compilerArgs = preprocessCompilerArgs(compilerArgs); | ||||
| cmd.addArguments(compilerArgs); | cmd.addArguments(compilerArgs); | ||||
| verifyArguments(cmd); | |||||
| logAndAddFilesToCompile(cmd); | logAndAddFilesToCompile(cmd); | ||||
| return cmd; | return cmd; | ||||
| } | } | ||||
| @@ -349,6 +353,16 @@ public abstract class DefaultRmicAdapter implements RmicAdapter { | |||||
| attributes.log(niceSourceList.toString(), Project.MSG_VERBOSE); | 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. | * 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.BuildException; | ||||
| import org.apache.tools.ant.taskdefs.rmic.RmicAdapterFactory; | import org.apache.tools.ant.taskdefs.rmic.RmicAdapterFactory; | ||||
| import org.apache.tools.ant.taskdefs.rmic.DefaultRmicAdapter; | import org.apache.tools.ant.taskdefs.rmic.DefaultRmicAdapter; | ||||
| import org.apache.tools.ant.util.JavaEnvUtils; | |||||
| import org.junit.Before; | import org.junit.Before; | ||||
| import org.junit.Ignore; | import org.junit.Ignore; | ||||
| import org.junit.Rule; | import org.junit.Rule; | ||||
| import org.junit.Test; | import org.junit.Test; | ||||
| import static org.junit.Assert.assertEquals; | |||||
| import static org.junit.Assert.fail; | import static org.junit.Assert.fail; | ||||
| /** | /** | ||||
| @@ -352,6 +354,7 @@ public class RmicAdvancedTest { | |||||
| */ | */ | ||||
| @Test | @Test | ||||
| public void testXnew() throws Exception { | public void testXnew() throws Exception { | ||||
| // skipped via unless attribute for JDK > 6 | |||||
| buildRule.executeTarget("testXnew"); | buildRule.executeTarget("testXnew"); | ||||
| } | } | ||||
| @@ -362,6 +365,7 @@ public class RmicAdvancedTest { | |||||
| */ | */ | ||||
| @Test | @Test | ||||
| public void testXnewDest() throws Exception { | public void testXnewDest() throws Exception { | ||||
| // skipped via unless attribute for JDK > 6 | |||||
| buildRule.executeTarget("testXnewDest"); | buildRule.executeTarget("testXnewDest"); | ||||
| } | } | ||||
| @@ -372,7 +376,7 @@ public class RmicAdvancedTest { | |||||
| */ | */ | ||||
| @Test | @Test | ||||
| public void testXnewForked() throws Exception { | public void testXnewForked() throws Exception { | ||||
| buildRule.executeTarget("testXnewForked"); | |||||
| xnewTest("testXnewForked"); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -382,7 +386,7 @@ public class RmicAdvancedTest { | |||||
| */ | */ | ||||
| @Test | @Test | ||||
| public void testXnewForkedDest() throws Exception { | public void testXnewForkedDest() throws Exception { | ||||
| buildRule.executeTarget("testXnewForkedDest"); | |||||
| xnewTest("testXnewForkedDest"); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -392,7 +396,7 @@ public class RmicAdvancedTest { | |||||
| */ | */ | ||||
| @Test | @Test | ||||
| public void testXnewCompiler() throws Exception { | public void testXnewCompiler() throws Exception { | ||||
| buildRule.executeTarget("testXnewCompiler"); | |||||
| xnewTest("testXnewCompiler"); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -402,7 +406,7 @@ public class RmicAdvancedTest { | |||||
| */ | */ | ||||
| @Test | @Test | ||||
| public void testXnewCompilerDest() throws Exception { | public void testXnewCompilerDest() throws Exception { | ||||
| buildRule.executeTarget("testXnewCompilerDest"); | |||||
| xnewTest("testXnewCompilerDest"); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -445,6 +449,19 @@ public class RmicAdvancedTest { | |||||
| buildRule.executeTarget("testIIOPDest"); | 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 | * this little bunny verifies that we can load stuff, and that | ||||
| * a failure to execute is turned into a fault | * a failure to execute is turned into a fault | ||||