Stefan Bodewig 9 years ago
parent
commit
fdfebe8013
6 changed files with 52 additions and 22 deletions
  1. +6
    -0
      WHATSNEW
  2. +5
    -3
      manual/Tasks/rmic.html
  3. +22
    -12
      src/etc/testcases/taskdefs/rmic/rmic.xml
  4. +8
    -3
      src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
  5. +8
    -0
      src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java
  6. +3
    -4
      src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java

+ 6
- 0
WHATSNEW View File

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




+ 5
- 3
manual/Tasks/rmic.html View File

@@ -52,11 +52,13 @@ with the &quot;build.rmic&quot; 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>


+ 22
- 12
src/etc/testcases/taskdefs/rmic/rmic.xml View File

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


+ 8
- 3
src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java View File

@@ -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();


+ 8
- 0
src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java View File

@@ -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) {


+ 3
- 4
src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java View File

@@ -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");
} }




Loading…
Cancel
Save