https://bz.apache.org/bugzilla/show_bug.cgi?id=59860master
| @@ -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 | |||
| =================================== | |||
| @@ -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> | |||
| @@ -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/> | |||
| @@ -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(); | |||
| @@ -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) { | |||
| @@ -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"); | |||
| } | |||