diff --git a/WHATSNEW b/WHATSNEW
index aac8219a8..55ef28963 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -7,6 +7,9 @@ Other changes:
* 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 c0d6dafd3..226b54ba5 100644
--- a/manual/Tasks/rmic.html
+++ b/manual/Tasks/rmic.html
@@ -27,6 +27,11 @@
Description
Runs the rmic compiler for a certain class.
+
+Note rmic
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.
+
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 4670f43f7..fe9973e33 100644
--- a/src/etc/testcases/taskdefs/rmic/rmic.xml
+++ b/src/etc/testcases/taskdefs/rmic/rmic.xml
@@ -201,11 +201,16 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -218,56 +223,59 @@
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -385,35 +393,35 @@
-
+
-
+
-
+
-
+
-
+
@@ -429,7 +437,7 @@
/>
-
+
@@ -478,23 +486,23 @@
-
+
-
+
-
+
-
+
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 9efc486d5..5afae42ee 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 @@ public class ForkingSunRmic extends DefaultRmicAdapter {
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 67b4afc3f..3fdf5a59f 100644
--- a/src/tests/antunit/taskdefs/rmic-test.xml
+++ b/src/tests/antunit/taskdefs/rmic-test.xml
@@ -76,8 +76,13 @@ public class Adapter implements RmicAdapter {
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 676eda4b2..4ca4fe22c 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.BuildException;
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 @@ public class RmicAdvancedTest {
*/
@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 @@ public class RmicAdvancedTest {
}
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 @@ public class RmicAdvancedTest {
}
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 {