diff --git a/WHATSNEW b/WHATSNEW
index 65c0ce8bd..125def983 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -54,6 +54,9 @@ Other changes:
reproducible builds (https://reproducible-builds.org/specs/source-date-epoch/#idm55)
Bugzilla Report 62617
+ * 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.10.6 TO Ant 1.10.7
=====================================
diff --git a/manual/Tasks/rmic.html b/manual/Tasks/rmic.html
index 49a9788c7..c328c581d 100644
--- a/manual/Tasks/rmic.html
+++ b/manual/Tasks/rmic.html
@@ -27,6 +27,11 @@
Rmic
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 class and this class is
diff --git a/src/etc/testcases/taskdefs/rmic/rmic.xml b/src/etc/testcases/taskdefs/rmic/rmic.xml
index 78de8009a..04b3f4dee 100644
--- a/src/etc/testcases/taskdefs/rmic/rmic.xml
+++ b/src/etc/testcases/taskdefs/rmic/rmic.xml
@@ -201,67 +201,75 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -379,35 +387,35 @@
-
+
-
+
-
+
-
+
-
+
@@ -423,7 +431,7 @@
/>
-
+
@@ -455,23 +463,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 83b597aa7..cfd5fcac0 100644
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java
+++ b/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java
@@ -72,6 +72,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 f8a62f13d..58c3c00d5 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 ca23c82b5..3b78b8151 100644
--- a/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java
+++ b/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java
@@ -229,6 +229,8 @@ public class RmicAdvancedTest {
*/
@Test
public void testDefaultBadClass() {
+ assumeFalse("Current system is Java 15 or newer",
+ JavaEnvUtils.isAtLeastJavaVersion("15"));
thrown.expect(BuildException.class);
thrown.expectMessage(Rmic.ERROR_RMIC_FAILED);
try {
@@ -337,6 +339,8 @@ public class RmicAdvancedTest {
public void testXnewForkedJava9plus() {
assumeTrue("Current system is Java 8 or older",
JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9));
+ assumeFalse("Current system is Java 15 or newer",
+ JavaEnvUtils.isAtLeastJavaVersion("15"));
thrown.expect(BuildException.class);
thrown.expectMessage("JDK9 has removed support for -Xnew");
buildRule.executeTarget("testXnewForked");
@@ -359,6 +363,8 @@ public class RmicAdvancedTest {
public void testXnewForkedDestJava9plus() {
assumeTrue("Current system is Java 8 or older",
JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9));
+ assumeFalse("Current system is Java 15 or newer",
+ JavaEnvUtils.isAtLeastJavaVersion("15"));
thrown.expect(BuildException.class);
thrown.expectMessage("JDK9 has removed support for -Xnew");
buildRule.executeTarget("testXnewForkedDest");
@@ -381,6 +387,8 @@ public class RmicAdvancedTest {
public void testXnewCompilerJava9plus() {
assumeTrue("Current system is Java 8 or older",
JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9));
+ assumeFalse("Current system is Java 15 or newer",
+ JavaEnvUtils.isAtLeastJavaVersion("15"));
thrown.expect(BuildException.class);
thrown.expectMessage("JDK9 has removed support for -Xnew");
buildRule.executeTarget("testXnewCompiler");
@@ -403,6 +411,8 @@ public class RmicAdvancedTest {
public void testXnewCompilerDestJava9plus() {
assumeTrue("Current system is Java 8 or older",
JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9));
+ assumeFalse("Current system is Java 15 or newer",
+ JavaEnvUtils.isAtLeastJavaVersion("15"));
thrown.expect(BuildException.class);
thrown.expectMessage("JDK9 has removed support for -Xnew");
buildRule.executeTarget("testXnewCompilerDest");
@@ -423,6 +433,8 @@ public class RmicAdvancedTest {
@Test
public void testIDLJava11plus() {
assumeTrue("Current system is Java 10 or older", JavaEnvUtils.isAtLeastJavaVersion("11"));
+ assumeFalse("Current system is Java 15 or newer",
+ JavaEnvUtils.isAtLeastJavaVersion("15"));
thrown.expect(BuildException.class);
thrown.expectMessage("this rmic implementation doesn't support the -idl switch");
buildRule.executeTarget("testIDL");
@@ -443,6 +455,8 @@ public class RmicAdvancedTest {
@Test
public void testIDLDestJava11plus() {
assumeTrue("Current system is Java 10 or older", JavaEnvUtils.isAtLeastJavaVersion("11"));
+ assumeFalse("Current system is Java 15 or newer",
+ JavaEnvUtils.isAtLeastJavaVersion("15"));
thrown.expect(BuildException.class);
thrown.expectMessage("this rmic implementation doesn't support the -idl switch");
buildRule.executeTarget("testIDL");
@@ -463,6 +477,8 @@ public class RmicAdvancedTest {
@Test
public void testIIOPJava11plus() {
assumeTrue("Current system is Java 10 or older", JavaEnvUtils.isAtLeastJavaVersion("11"));
+ assumeFalse("Current system is Java 15 or newer",
+ JavaEnvUtils.isAtLeastJavaVersion("15"));
thrown.expect(BuildException.class);
thrown.expectMessage("this rmic implementation doesn't support the -iiop switch");
buildRule.executeTarget("testIIOP");
@@ -483,6 +499,8 @@ public class RmicAdvancedTest {
@Test
public void testIIOPDestJava11plus() {
assumeTrue("Current system is Java 10 or older", JavaEnvUtils.isAtLeastJavaVersion("11"));
+ assumeFalse("Current system is Java 15 or newer",
+ JavaEnvUtils.isAtLeastJavaVersion("15"));
thrown.expect(BuildException.class);
thrown.expectMessage("this rmic implementation doesn't support the -iiop switch");
buildRule.executeTarget("testIIOP");