default to forking rmic on JDK 9+ https://bz.apache.org/bugzilla/show_bug.cgi?id=59860
Project: http://git-wip-us.apache.org/repos/asf/ant/repo Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/fdfebe80 Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/fdfebe80 Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/fdfebe80 Branch: refs/heads/master Commit: fdfebe8013e1e2fe89b571d96935e61dbdbdc0c2 Parents: 2bac4d0 Author: Stefan Bodewig <[email protected]> Authored: Mon Jul 25 16:14:59 2016 +0200 Committer: Stefan Bodewig <[email protected]> Committed: Mon Jul 25 16:14:59 2016 +0200 ---------------------------------------------------------------------- WHATSNEW | 6 ++++ manual/Tasks/rmic.html | 8 +++-- src/etc/testcases/taskdefs/rmic/rmic.xml | 34 +++++++++++++------- .../ant/taskdefs/rmic/RmicAdapterFactory.java | 11 +++++-- .../apache/tools/ant/taskdefs/rmic/SunRmic.java | 8 +++++ .../tools/ant/taskdefs/RmicAdvancedTest.java | 7 ++-- 6 files changed, 52 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ant/blob/fdfebe80/WHATSNEW ---------------------------------------------------------------------- diff --git a/WHATSNEW b/WHATSNEW index 3e4e90b..da25374 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -50,6 +50,12 @@ Other changes: * added a new <native2asciifilter> filter that can perform non-ASCII to Unicode-escape conversions. + * <rmic> defaults to the "forking" compiler on JDK 9+ as the + implementation class of rmic is not exported by its containing + module and thus not accessible to Ant without applying -XaddExports + magic. + Bugzilla Report 59860 + Changes from Ant 1.9.6 TO Ant 1.9.7 =================================== http://git-wip-us.apache.org/repos/asf/ant/blob/fdfebe80/manual/Tasks/rmic.html ---------------------------------------------------------------------- diff --git a/manual/Tasks/rmic.html b/manual/Tasks/rmic.html index b644c68..12b30c5 100644 --- a/manual/Tasks/rmic.html +++ b/manual/Tasks/rmic.html @@ -52,11 +52,13 @@ with the "build.rmic" property, the <code>compiler</code> attribute. or a nested element. <a name="compilervalues">Here are the choices</a>:</p> <ul> - <li>default -the default compiler (kaffe or sun) for the platform. - <li>sun (the standard compiler of the JDK)</li> + <li>default -the default compiler (kaffe, sun or forking) for the platform. + <li>sun (the standard compiler of the JDK < JDK 9)</li> <li>kaffe (the standard compiler of <a href="http://www.kaffe.org" target="_top">Kaffe</a>)</li> <li>weblogic</li> - <li>forking - the sun compiler forked into a separate process (since Apache Ant 1.7)</li> + <li>forking - the sun compiler forked into a separate process (since + Apache Ant 1.7). Starting with Ant 1.9.8 this is the default when + 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> http://git-wip-us.apache.org/repos/asf/ant/blob/fdfebe80/src/etc/testcases/taskdefs/rmic/rmic.xml ---------------------------------------------------------------------- diff --git a/src/etc/testcases/taskdefs/rmic/rmic.xml b/src/etc/testcases/taskdefs/rmic/rmic.xml index 944cdcd..4670f43 100644 --- a/src/etc/testcases/taskdefs/rmic/rmic.xml +++ b/src/etc/testcases/taskdefs/rmic/rmic.xml @@ -200,7 +200,17 @@ <target name="probe-rmic"> <available property="kaffe.present" classname="jkaffe.rmi.rmic.RMIC"/> - <available property="rmic.present" classname="sun.rmi.rmic.Main"/> + <condition property="rmic.present"> + <or> + <available classname="sun.rmi.rmic.Main"/> + <!-- we'll use forking as default for Java9 --> + <available classname="java.lang.module.ModuleDescriptor"/> + </or> + </condition> + <condition property="rmic.compiler" value="forking"> + <available classname="java.lang.module.ModuleDescriptor"/> + </condition> + <property name="rmic.compiler" value="sun"/> <available property="wlrmic.present" classname="weblogic.rmic"/> <condition property="rmic6.present"> <and> @@ -263,24 +273,24 @@ </target> <target name="testRmic" if="rmic.present" depends="init"> - <base-rmic compiler="sun"/> + <base-rmic compiler="${rmic.compiler}"/> <assertBaseCompiled/> </target> <target name="testRmicDest" if="rmic.present" depends="init"> - <dest-rmic compiler="sun"/> + <dest-rmic compiler="${rmic.compiler}"/> <assertBaseCompiledInDest/> </target> <target name="testRmicJArg" if="rmic.present" depends="init"> - <base-rmic compiler="sun"> + <base-rmic compiler="${rmic.compiler}"> <compilerarg value="-J-mx256m" /> </base-rmic> <assertBaseCompiled/> </target> <target name="testRmicJArgDest" if="rmic.present" depends="init"> - <dest-rmic compiler="sun"> + <dest-rmic compiler="${rmic.compiler}"> <compilerarg value="-J-mx256m" /> </dest-rmic> <assertBaseCompiledInDest/> @@ -322,7 +332,7 @@ <assertBaseCompiled/> </target> - <target name="testBadName" if="rmic.present" depends="init"> + <target name="testBadName" depends="init"> <base-rmic compiler="no-such-compiler" /> @@ -330,12 +340,12 @@ <target name="testExplicitClass" if="rmic.present" depends="init"> <base-rmic - compiler="org.apache.tools.ant.taskdefs.rmic.SunRmic" + compiler="org.apache.tools.ant.taskdefs.rmic.ForkingSunRmic" /> <assertBaseCompiled/> </target> - <target name="testWrongClass" if="rmic.present" depends="init"> + <target name="testWrongClass" depends="init"> <base-rmic compiler="org.apache.tools.ant.BuildException" /> @@ -389,14 +399,14 @@ <assertAntCompiledInDest/> </target> - <target name="testForkingAntClasspath" if="rmic.present" depends="compileAntTimestamp"> + <target name="testForkingAntClasspath" depends="compileAntTimestamp"> <base-rmic compiler="forking" /> <assertAntCompiled /> </target> - <target name="testForkingAntClasspathDest" if="rmic.present" depends="compileAntTimestamp"> + <target name="testForkingAntClasspathDest" depends="compileAntTimestamp"> <dest-rmic compiler="forking" /> @@ -429,14 +439,14 @@ This test stamps on the XML parser settings on java6, so it is disabled. --> <target name="testXnew" if="rmic.present" unless="rmic6.present" depends="init"> - <base-rmic compiler="sun"> + <base-rmic compiler="${rmic.compiler}"> <compilerarg value="-Xnew"/> </base-rmic> <assertBaseCompiled/> </target> <target name="testXnewDest" if="rmic.present" unless="rmic6.present" depends="init"> - <dest-rmic compiler="sun"> + <dest-rmic compiler="${rmic.compiler}"> <compilerarg value="-Xnew"/> </dest-rmic> <assertBaseCompiledInDest/> http://git-wip-us.apache.org/repos/asf/ant/blob/fdfebe80/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java ---------------------------------------------------------------------- diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java b/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java index 4a2708c..a604144 100644 --- a/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java +++ b/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java @@ -22,6 +22,7 @@ import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.util.ClasspathUtils; +import org.apache.tools.ant.util.JavaEnvUtils; /** * Creates the necessary rmic adapter, given basic criteria. @@ -95,9 +96,13 @@ public final class RmicAdapterFactory { throws BuildException { //handle default specially by choosing the sun or kaffe compiler if (DEFAULT_COMPILER.equalsIgnoreCase(rmicType) || rmicType.length() == 0) { - rmicType = KaffeRmic.isAvailable() - ? KaffeRmic.COMPILER_NAME - : SunRmic.COMPILER_NAME; + if (KaffeRmic.isAvailable()) { + rmicType = KaffeRmic.COMPILER_NAME; + } else if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) { + rmicType = ForkingSunRmic.COMPILER_NAME; + } else { + rmicType = SunRmic.COMPILER_NAME; + } } if (SunRmic.COMPILER_NAME.equalsIgnoreCase(rmicType)) { return new SunRmic(); http://git-wip-us.apache.org/repos/asf/ant/blob/fdfebe80/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java ---------------------------------------------------------------------- diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java b/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java index 07cbd30..1b5e67d 100644 --- a/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java +++ b/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java @@ -27,6 +27,7 @@ import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.LogOutputStream; import org.apache.tools.ant.types.Commandline; +import org.apache.tools.ant.util.JavaEnvUtils; /** * The implementation of the rmic for SUN's JDK. @@ -54,6 +55,9 @@ public class SunRmic extends DefaultRmicAdapter { + "available. A common solution is to " + "set the environment variable " + "JAVA_HOME"; + public static final String ERROR_NO_RMIC_ON_CLASSPATH_JAVA_9 = "Cannot use SUN rmic, as it is not " + + "available. The class we try to use is part of the jdk.rmic module which may not be. " + + "Please use the 'forking' compiler for JDK 9+"; /** Error message to use when there is an error starting the sun rmic compiler */ public static final String ERROR_RMIC_FAILED = "Error starting SUN rmic: "; @@ -84,6 +88,10 @@ public class SunRmic extends DefaultRmicAdapter { (new Object[] {cmd.getArguments()})); return ok.booleanValue(); } catch (ClassNotFoundException ex) { + if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) { + throw new BuildException(ERROR_NO_RMIC_ON_CLASSPATH_JAVA_9, + getRmic().getLocation()); + } throw new BuildException(ERROR_NO_RMIC_ON_CLASSPATH, getRmic().getLocation()); } catch (Exception ex) { http://git-wip-us.apache.org/repos/asf/ant/blob/fdfebe80/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java ---------------------------------------------------------------------- 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 c9d2514..e0e2d9a 100644 --- a/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java +++ b/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java @@ -137,7 +137,7 @@ public class RmicAdvancedTest { * test weblogic */ @Test - @Ignore("WLRmin tests don't work") + @Ignore("WLRmic tests don't work") public void XtestWlrmic() throws Exception { buildRule.executeTarget("testWlrmic"); } @@ -146,7 +146,7 @@ public class RmicAdvancedTest { * test weblogic's stripping of -J args */ @Test - @Ignore("WLRmin tests don't work") + @Ignore("WLRmic tests don't work") public void XtestWlrmicJArg() throws Exception { buildRule.executeTarget("testWlrmicJArg"); } @@ -155,8 +155,7 @@ public class RmicAdvancedTest { * test the forking compiler */ @Test - @Ignore("WLRmin tests don't work") - public void NotestForking() throws Exception { + public void testForking() throws Exception { buildRule.executeTarget("testForking"); }
