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 {