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