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 | * added a new <native2asciifilter> filter that can perform non-ASCII | ||||
to Unicode-escape conversions. | 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 | 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. | attribute. or a nested element. | ||||
<a name="compilervalues">Here are the choices</a>:</p> | <a name="compilervalues">Here are the choices</a>:</p> | ||||
<ul> | <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>kaffe (the standard compiler of <a href="http://www.kaffe.org" target="_top">Kaffe</a>)</li> | ||||
<li>weblogic</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, | <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</li> | ||||
@@ -200,7 +200,17 @@ | |||||
<target name="probe-rmic"> | <target name="probe-rmic"> | ||||
<available property="kaffe.present" classname="jkaffe.rmi.rmic.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"/> | <available property="wlrmic.present" classname="weblogic.rmic"/> | ||||
<condition property="rmic6.present"> | <condition property="rmic6.present"> | ||||
<and> | <and> | ||||
@@ -263,24 +273,24 @@ | |||||
</target> | </target> | ||||
<target name="testRmic" if="rmic.present" depends="init"> | <target name="testRmic" if="rmic.present" depends="init"> | ||||
<base-rmic compiler="sun"/> | |||||
<base-rmic compiler="${rmic.compiler}"/> | |||||
<assertBaseCompiled/> | <assertBaseCompiled/> | ||||
</target> | </target> | ||||
<target name="testRmicDest" if="rmic.present" depends="init"> | <target name="testRmicDest" if="rmic.present" depends="init"> | ||||
<dest-rmic compiler="sun"/> | |||||
<dest-rmic compiler="${rmic.compiler}"/> | |||||
<assertBaseCompiledInDest/> | <assertBaseCompiledInDest/> | ||||
</target> | </target> | ||||
<target name="testRmicJArg" if="rmic.present" depends="init"> | <target name="testRmicJArg" if="rmic.present" depends="init"> | ||||
<base-rmic compiler="sun"> | |||||
<base-rmic compiler="${rmic.compiler}"> | |||||
<compilerarg value="-J-mx256m" /> | <compilerarg value="-J-mx256m" /> | ||||
</base-rmic> | </base-rmic> | ||||
<assertBaseCompiled/> | <assertBaseCompiled/> | ||||
</target> | </target> | ||||
<target name="testRmicJArgDest" if="rmic.present" depends="init"> | <target name="testRmicJArgDest" if="rmic.present" depends="init"> | ||||
<dest-rmic compiler="sun"> | |||||
<dest-rmic compiler="${rmic.compiler}"> | |||||
<compilerarg value="-J-mx256m" /> | <compilerarg value="-J-mx256m" /> | ||||
</dest-rmic> | </dest-rmic> | ||||
<assertBaseCompiledInDest/> | <assertBaseCompiledInDest/> | ||||
@@ -322,7 +332,7 @@ | |||||
<assertBaseCompiled/> | <assertBaseCompiled/> | ||||
</target> | </target> | ||||
<target name="testBadName" if="rmic.present" depends="init"> | |||||
<target name="testBadName" depends="init"> | |||||
<base-rmic | <base-rmic | ||||
compiler="no-such-compiler" | compiler="no-such-compiler" | ||||
/> | /> | ||||
@@ -330,12 +340,12 @@ | |||||
<target name="testExplicitClass" if="rmic.present" depends="init"> | <target name="testExplicitClass" if="rmic.present" depends="init"> | ||||
<base-rmic | <base-rmic | ||||
compiler="org.apache.tools.ant.taskdefs.rmic.SunRmic" | |||||
compiler="org.apache.tools.ant.taskdefs.rmic.ForkingSunRmic" | |||||
/> | /> | ||||
<assertBaseCompiled/> | <assertBaseCompiled/> | ||||
</target> | </target> | ||||
<target name="testWrongClass" if="rmic.present" depends="init"> | |||||
<target name="testWrongClass" depends="init"> | |||||
<base-rmic | <base-rmic | ||||
compiler="org.apache.tools.ant.BuildException" | compiler="org.apache.tools.ant.BuildException" | ||||
/> | /> | ||||
@@ -389,14 +399,14 @@ | |||||
<assertAntCompiledInDest/> | <assertAntCompiledInDest/> | ||||
</target> | </target> | ||||
<target name="testForkingAntClasspath" if="rmic.present" depends="compileAntTimestamp"> | |||||
<target name="testForkingAntClasspath" depends="compileAntTimestamp"> | |||||
<base-rmic | <base-rmic | ||||
compiler="forking" | compiler="forking" | ||||
/> | /> | ||||
<assertAntCompiled /> | <assertAntCompiled /> | ||||
</target> | </target> | ||||
<target name="testForkingAntClasspathDest" if="rmic.present" depends="compileAntTimestamp"> | |||||
<target name="testForkingAntClasspathDest" depends="compileAntTimestamp"> | |||||
<dest-rmic | <dest-rmic | ||||
compiler="forking" | compiler="forking" | ||||
/> | /> | ||||
@@ -429,14 +439,14 @@ | |||||
This test stamps on the XML parser settings on java6, so it is disabled. | 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"> | <target name="testXnew" if="rmic.present" unless="rmic6.present" depends="init"> | ||||
<base-rmic compiler="sun"> | |||||
<base-rmic compiler="${rmic.compiler}"> | |||||
<compilerarg value="-Xnew"/> | <compilerarg value="-Xnew"/> | ||||
</base-rmic> | </base-rmic> | ||||
<assertBaseCompiled/> | <assertBaseCompiled/> | ||||
</target> | </target> | ||||
<target name="testXnewDest" if="rmic.present" unless="rmic6.present" depends="init"> | <target name="testXnewDest" if="rmic.present" unless="rmic6.present" depends="init"> | ||||
<dest-rmic compiler="sun"> | |||||
<dest-rmic compiler="${rmic.compiler}"> | |||||
<compilerarg value="-Xnew"/> | <compilerarg value="-Xnew"/> | ||||
</dest-rmic> | </dest-rmic> | ||||
<assertBaseCompiledInDest/> | <assertBaseCompiledInDest/> | ||||
@@ -22,6 +22,7 @@ import org.apache.tools.ant.BuildException; | |||||
import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
import org.apache.tools.ant.util.ClasspathUtils; | import org.apache.tools.ant.util.ClasspathUtils; | ||||
import org.apache.tools.ant.util.JavaEnvUtils; | |||||
/** | /** | ||||
* Creates the necessary rmic adapter, given basic criteria. | * Creates the necessary rmic adapter, given basic criteria. | ||||
@@ -95,9 +96,13 @@ public final class RmicAdapterFactory { | |||||
throws BuildException { | throws BuildException { | ||||
//handle default specially by choosing the sun or kaffe compiler | //handle default specially by choosing the sun or kaffe compiler | ||||
if (DEFAULT_COMPILER.equalsIgnoreCase(rmicType) || rmicType.length() == 0) { | 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)) { | if (SunRmic.COMPILER_NAME.equalsIgnoreCase(rmicType)) { | ||||
return new SunRmic(); | return new SunRmic(); | ||||
@@ -27,6 +27,7 @@ import org.apache.tools.ant.BuildException; | |||||
import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
import org.apache.tools.ant.taskdefs.LogOutputStream; | import org.apache.tools.ant.taskdefs.LogOutputStream; | ||||
import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
import org.apache.tools.ant.util.JavaEnvUtils; | |||||
/** | /** | ||||
* The implementation of the rmic for SUN's JDK. | * The implementation of the rmic for SUN's JDK. | ||||
@@ -54,6 +55,9 @@ public class SunRmic extends DefaultRmicAdapter { | |||||
+ "available. A common solution is to " | + "available. A common solution is to " | ||||
+ "set the environment variable " | + "set the environment variable " | ||||
+ "JAVA_HOME"; | + "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 */ | /** 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: "; | public static final String ERROR_RMIC_FAILED = "Error starting SUN rmic: "; | ||||
@@ -84,6 +88,10 @@ public class SunRmic extends DefaultRmicAdapter { | |||||
(new Object[] {cmd.getArguments()})); | (new Object[] {cmd.getArguments()})); | ||||
return ok.booleanValue(); | return ok.booleanValue(); | ||||
} catch (ClassNotFoundException ex) { | } 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, | throw new BuildException(ERROR_NO_RMIC_ON_CLASSPATH, | ||||
getRmic().getLocation()); | getRmic().getLocation()); | ||||
} catch (Exception ex) { | } catch (Exception ex) { | ||||
@@ -137,7 +137,7 @@ public class RmicAdvancedTest { | |||||
* test weblogic | * test weblogic | ||||
*/ | */ | ||||
@Test | @Test | ||||
@Ignore("WLRmin tests don't work") | |||||
@Ignore("WLRmic tests don't work") | |||||
public void XtestWlrmic() throws Exception { | public void XtestWlrmic() throws Exception { | ||||
buildRule.executeTarget("testWlrmic"); | buildRule.executeTarget("testWlrmic"); | ||||
} | } | ||||
@@ -146,7 +146,7 @@ public class RmicAdvancedTest { | |||||
* test weblogic's stripping of -J args | * test weblogic's stripping of -J args | ||||
*/ | */ | ||||
@Test | @Test | ||||
@Ignore("WLRmin tests don't work") | |||||
@Ignore("WLRmic tests don't work") | |||||
public void XtestWlrmicJArg() throws Exception { | public void XtestWlrmicJArg() throws Exception { | ||||
buildRule.executeTarget("testWlrmicJArg"); | buildRule.executeTarget("testWlrmicJArg"); | ||||
} | } | ||||
@@ -155,8 +155,7 @@ public class RmicAdvancedTest { | |||||
* test the forking compiler | * test the forking compiler | ||||
*/ | */ | ||||
@Test | @Test | ||||
@Ignore("WLRmin tests don't work") | |||||
public void NotestForking() throws Exception { | |||||
public void testForking() throws Exception { | |||||
buildRule.executeTarget("testForking"); | buildRule.executeTarget("testForking"); | ||||
} | } | ||||