rmic has been removed in Java 15+
diff --git a/WHATSNEW b/WHATSNEW
index aac8219..55ef289 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -7,6 +7,9 @@
* The runant.py script should now work with Python 3.
Github Pull Request #96
+ * rmic has been removed from Java 15. The task will now throw an
+ exception if you try to use it while running Java 15 or newer.
+
Changes from Ant 1.9.13 TO Ant 1.9.14
=====================================
diff --git a/manual/Tasks/rmic.html b/manual/Tasks/rmic.html
index c0d6daf..226b54b 100644
--- a/manual/Tasks/rmic.html
+++ b/manual/Tasks/rmic.html
@@ -27,6 +27,11 @@
<h2><a name="rmic">Rmic</a></h2>
<h3>Description</h3>
<p>Runs the rmic compiler for a certain class.</p>
+
+<p><b>Note</b> <code>rmic</code> has been deprecated as of Java 13 and
+ removed as of Java 15. Trying to use it with Java15 will fail unless
+ you specifiy the execxutable or rmic-adapter explicitly.</p>
+
<p>Rmic can be run on a single class (as specified with the classname
attribute) or a number of classes at once (all classes below base that
are neither _Stub nor _Skel classes). If you want to rmic a single
diff --git a/src/etc/testcases/taskdefs/rmic/rmic.xml b/src/etc/testcases/taskdefs/rmic/rmic.xml
index 4670f43..fe9973e 100644
--- a/src/etc/testcases/taskdefs/rmic/rmic.xml
+++ b/src/etc/testcases/taskdefs/rmic/rmic.xml
@@ -201,11 +201,16 @@
<target name="probe-rmic">
<available property="kaffe.present" classname="jkaffe.rmi.rmic.RMIC"/>
<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>
+ <and>
+ <or>
+ <available classname="sun.rmi.rmic.Main"/>
+ <!-- we'll use forking as default for Java9 -->
+ <available classname="java.lang.module.ModuleDescriptor"/>
+ </or>
+ <not>
+ <javaversion atleast="15"/>
+ </not>
+ </and>
</condition>
<condition property="rmic.compiler" value="forking">
<available classname="java.lang.module.ModuleDescriptor"/>
@@ -218,56 +223,59 @@
<available classname="java.util.ServiceLoader"/>
</and>
</condition>
+ <condition property="java15+">
+ <javaversion atleast="15"/>
+ </condition>
</target>
- <target name="testDefault" depends="init">
+ <target name="testDefault" depends="init" unless="java15+">
<base-rmic compiler="default" listfiles="true"/>
<assertBaseCompiled/>
</target>
- <target name="testDefaultDest" depends="init">
+ <target name="testDefaultDest" depends="init" unless="java15+">
<dest-rmic compiler="default"/>
<assertBaseCompiledInDest/>
</target>
- <target name="testEmpty" depends="init">
+ <target name="testEmpty" depends="init" unless="java15+">
<base-rmic compiler=""/>
<assertBaseCompiled/>
</target>
- <target name="testEmptyDest" depends="init">
+ <target name="testEmptyDest" depends="init" unless="java15+">
<dest-rmic compiler=""/>
<assertBaseCompiledInDest/>
</target>
- <target name="testVersion11" depends="init">
+ <target name="testVersion11" depends="init" unless="java15+">
<base-rmic compiler="default" stubversion="1.1" />
<assertBaseCompiled/>
</target>
- <target name="testVersion11Dest" depends="init">
+ <target name="testVersion11Dest" depends="init" unless="java15+">
<dest-rmic compiler="default" stubversion="1.1" />
<assertBaseCompiledInDest/>
</target>
- <target name="testVersion12" depends="init">
+ <target name="testVersion12" depends="init" unless="java15+">
<base-rmic compiler="default" stubversion="1.2" />
<assertStubCompiled/>
<assertSkelAbsent/>
</target>
- <target name="testVersion12Dest" depends="init">
+ <target name="testVersion12Dest" depends="init" unless="java15+">
<dest-rmic compiler="default" stubversion="1.2" />
<assertStubCompiledInDest/>
<assertSkelAbsentInDest/>
</target>
- <target name="testVersionCompat" depends="init">
+ <target name="testVersionCompat" depends="init" unless="java15+">
<base-rmic compiler="default" stubversion="compat" />
<assertBaseCompiled/>
</target>
- <target name="testVersionCompatDest" depends="init">
+ <target name="testVersionCompatDest" depends="init" unless="java15+">
<dest-rmic compiler="default" stubversion="compat" />
<assertBaseCompiledInDest/>
</target>
@@ -385,35 +393,35 @@
</javac>
</target>
- <target name="testAntClasspath" depends="compileAntTimestamp">
+ <target name="testAntClasspath" depends="compileAntTimestamp" unless="java15+">
<base-rmic
compiler="default"
/>
<assertAntCompiled/>
</target>
- <target name="testAntClasspathDest" depends="compileAntTimestamp">
+ <target name="testAntClasspathDest" depends="compileAntTimestamp" unless="java15+">
<dest-rmic
compiler="default"
/>
<assertAntCompiledInDest/>
</target>
- <target name="testForkingAntClasspath" depends="compileAntTimestamp">
+ <target name="testForkingAntClasspath" depends="compileAntTimestamp" unless="java15+">
<base-rmic
compiler="forking"
/>
<assertAntCompiled />
</target>
- <target name="testForkingAntClasspathDest" depends="compileAntTimestamp">
+ <target name="testForkingAntClasspathDest" depends="compileAntTimestamp" unless="java15+">
<dest-rmic
compiler="forking"
/>
<assertAntCompiledInDest />
</target>
- <target name="testDefaultBadClass" depends="init">
+ <target name="testDefaultBadClass" depends="init" unless="java15+">
<rmic-bad-class compiler="default"/>
</target>
@@ -429,7 +437,7 @@
/>
</target>
- <target name="testMagicPropertyIsEmptyString" depends="init">
+ <target name="testMagicPropertyIsEmptyString" depends="init" unless="java15+">
<property name="build.rmic" value=""/>
<base-rmic />
<assertBaseCompiled/>
@@ -478,23 +486,23 @@
<assertBaseCompiledInDest/>
</target>
- <target name="testIDL" depends="init">
+ <target name="testIDL" depends="init" unless="java15+">
<base-rmic compiler="default" idl="true"/>
<assertFileCreated file="RemoteTimestamp.idl"/>
</target>
- <target name="testIDLDest" depends="init">
+ <target name="testIDLDest" depends="init" unless="java15+">
<dest-rmic compiler="default" idl="true"/>
<assertFileCreatedInDest file="RemoteTimestamp.idl"/>
</target>
- <target name="testIIOP" depends="init">
+ <target name="testIIOP" depends="init" unless="java15+">
<base-rmic compiler="default" iiop="true"/>
<assertFileCreated file="_RemoteTimestamp_Stub.class"/>
<assertFileCreated file="_RemoteTimestampImpl_Tie.class"/>
</target>
- <target name="testIIOPDest" depends="init">
+ <target name="testIIOPDest" depends="init" unless="java15+">
<dest-rmic compiler="default" iiop="true"/>
<assertFileCreatedInDest file="_RemoteTimestamp_Stub.class"/>
<assertFileCreatedInDest file="_RemoteTimestampImpl_Tie.class"/>
diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java b/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java
index 9efc486..5afae42 100644
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java
+++ b/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java
@@ -71,6 +71,11 @@
Project project = owner.getProject();
String executable = owner.getExecutable();
if (executable == null) {
+ if (JavaEnvUtils.isAtLeastJavaVersion("15")) {
+ throw new BuildException("rmic does not exist under Java 15 and higher,"
+ + " use rmic of an older JDK and explicitly set the executable attribute");
+ }
+
// no explicitly specified executable
// rely on RMIC being on the path
executable = JavaEnvUtils.getJdkExecutable(getExecutableName());
diff --git a/src/tests/antunit/taskdefs/rmic-test.xml b/src/tests/antunit/taskdefs/rmic-test.xml
index 67b4afc..3fdf5a5 100644
--- a/src/tests/antunit/taskdefs/rmic-test.xml
+++ b/src/tests/antunit/taskdefs/rmic-test.xml
@@ -76,8 +76,13 @@
<au:assertLogContains text="adapter called"/>
</target>
- <target name="testSourceBase"
- description="https://issues.apache.org/bugzilla/show_bug.cgi?id=48970">
+ <target name="-check-jdk">
+ <condition property="java15+">
+ <javaversion atleast="15"/>
+ </condition>
+ </target>
+
+ <target name="-setup-real-test">
<mkdir dir="${input}/org/example"/>
<mkdir dir="${output}"/>
<echo file="${input}/org/example/Foo.java"><![CDATA[
@@ -96,10 +101,23 @@
}
}]]></echo>
<javac srcdir="${input}" destdir="${output}"/>
+ </target>
+
+ <target name="testSourceBase" depends="-check-jdk, -setup-real-test" unless="java15+"
+ description="https://issues.apache.org/bugzilla/show_bug.cgi?id=48970">
<rmic sourcebase="${input}" base="${output}">
<include name="**/*Impl.class"/>
</rmic>
<au:assertFileExists file="${input}/org/example/FooImpl_Stub.java"/>
<au:assertFileDoesntExist file="${output}/org/example/FooImpl_Stub.java"/>
</target>
+
+ <target name="testSimpleCompileFailsOnJava15+" depends="-check-jdk, -setup-real-test"
+ if="java15+">
+ <au:expectfailure>
+ <rmic sourcebase="${input}" base="${output}">
+ <include name="**/*Impl.class"/>
+ </rmic>
+ </au:expectfailure>
+ </target>
</project>
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 676eda4..4ca4fe2 100644
--- a/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java
+++ b/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java
@@ -25,6 +25,7 @@
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.Assume;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
@@ -232,6 +233,7 @@
*/
@Test
public void testDefaultBadClass() throws Exception {
+ Assume.assumeFalse(JavaEnvUtils.isAtLeastJavaVersion("15"));
try {
buildRule.executeTarget("testDefaultBadClass");
fail("expected the class to fail");
@@ -445,7 +447,9 @@
}
private void xnewTest(String target) {
- if (!JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) {
+ if (!JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)
+ || JavaEnvUtils.isAtLeastJavaVersion("15")) {
+ // target is skipped with Java 15+
buildRule.executeTarget(target);
} else {
try {
@@ -458,7 +462,9 @@
}
private void corbaTest(String target) {
- if (!JavaEnvUtils.isAtLeastJavaVersion("11")) {
+ if (!JavaEnvUtils.isAtLeastJavaVersion("11")
+ || JavaEnvUtils.isAtLeastJavaVersion("15")) {
+ // target is skipped with Java 15+
buildRule.executeTarget(target);
} else {
try {