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