diff --git a/WHATSNEW b/WHATSNEW index 4f82e815f..cd960d225 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -33,6 +33,9 @@ Other changes: * Allow Saxon to be used for junitreport XSL transformation Github Pull Request #57 + * when running on Java 11+ rmic will fail early if iiop or idl are + requested. Java11 removes support for CORBA and the switches have + been removed from the rmic tool. Changes from Ant 1.10.1 TO Ant 1.10.2 ===================================== diff --git a/manual/Tasks/rmic.html b/manual/Tasks/rmic.html index 5c6c77aab..35c6302de 100644 --- a/manual/Tasks/rmic.html +++ b/manual/Tasks/rmic.html @@ -70,6 +70,14 @@ are the choices:

project contains a compiler implementation for this task as well, please consult miniRMI's documentation to learn how to use it.

+

CORBA support

+ +

Java 11 removes the CORBA and JavaEE packages and rmic no longer + supports either iiop nor idl. Starting + with Ant 1.10.3 the rmic task will fail when using either while + running Java11+ unless you fork the task and explicitly specify an + executable.

+

Parameters

@@ -155,7 +163,8 @@ documentation to learn how to use it.

- + @@ -165,7 +174,8 @@ documentation to learn how to use it.

- + diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java b/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java index 914598f44..f3a050392 100644 --- a/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java +++ b/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java @@ -175,6 +175,18 @@ public abstract class DefaultRmicAdapter implements RmicAdapter { return classpath; } + /** + * Whether the iiop and idl switches are supported. + * + *

This implementation returns false if running on Java 11 + * onwards and true otherwise.

+ * @return true if the iiop and idl switches are supported + * @since Ant 1.10.3 + */ + protected boolean areIiopAndIdlSupported() { + return !JavaEnvUtils.isAtLeastJavaVersion("11"); + } + /** * Setup rmic argument for rmic. * @return the command line @@ -222,6 +234,9 @@ public abstract class DefaultRmicAdapter implements RmicAdapter { } if (attributes.getIiop()) { + if (!areIiopAndIdlSupported()) { + throw new BuildException("this rmic implementation doesn't support the -iiop switch"); + } attributes.log("IIOP has been turned on.", Project.MSG_INFO); cmd.createArgument().setValue("-iiop"); if (attributes.getIiopopts() != null) { @@ -232,6 +247,9 @@ public abstract class DefaultRmicAdapter implements RmicAdapter { } if (attributes.getIdl()) { + if (!areIiopAndIdlSupported()) { + throw new BuildException("this rmic implementation doesn't support the -idl switch"); + } cmd.createArgument().setValue("-idl"); attributes.log("IDL has been turned on.", Project.MSG_INFO); if (attributes.getIdlopts() != null) { 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 7f670094f..bd2e56229 100644 --- a/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java +++ b/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java @@ -45,6 +45,21 @@ public class ForkingSunRmic extends DefaultRmicAdapter { */ public static final String COMPILER_NAME = "forking"; + /** + * @since Ant 1.10.3 + */ + @Override + protected boolean areIiopAndIdlSupported() { + boolean supported = !JavaEnvUtils.isAtLeastJavaVersion("11"); + if (!supported && getRmic().getExecutable() != null) { + getRmic().getProject() + .log("Allowing -iiop and -idl for forked rmic even though this version of Java doesn't support it.", + Project.MSG_INFO); + return true; + } + return supported; + } + /** * exec by creating a new command * @return true if the command ran successfully diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java b/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java index 018ba95cd..bf2775133 100644 --- a/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java +++ b/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java @@ -43,6 +43,16 @@ public class KaffeRmic extends DefaultRmicAdapter { */ public static final String COMPILER_NAME = "kaffe"; + /** + * @since Ant 1.10.3 + */ + @Override + protected boolean areIiopAndIdlSupported() { + // actually I don't think Kaffee supports either, but we've + // accepted the flags prior to 1.10.3 + return true; + } + /** {@inheritDoc} */ @Override public boolean execute() throws BuildException { diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java b/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java index 17a765080..da82048af 100644 --- a/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java +++ b/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java @@ -51,6 +51,16 @@ public class WLRmic extends DefaultRmicAdapter { /** unsupported error message */ public static final String UNSUPPORTED_STUB_OPTION = "Unsupported stub option: "; + /** + * @since Ant 1.10.3 + */ + @Override + protected boolean areIiopAndIdlSupported() { + // actually I don't think Weblogic's rmic supports either, but + // we've accepted the flags prior to 1.10.3 + return true; + } + /** * Carry out the rmic compilation. * @return true if the compilation succeeded 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 139ff68b3..1766a74a8 100644 --- a/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java +++ b/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java @@ -389,7 +389,7 @@ public class RmicAdvancedTest { */ @Test public void testIDL() throws Exception { - buildRule.executeTarget("testIDL"); + corbaTest("testIDL"); } /** @@ -399,7 +399,7 @@ public class RmicAdvancedTest { */ @Test public void testIDLDest() throws Exception { - buildRule.executeTarget("testIDLDest"); + corbaTest("testIDLDest"); } /** @@ -409,7 +409,7 @@ public class RmicAdvancedTest { */ @Test public void testIIOP() throws Exception { - buildRule.executeTarget("testIIOP"); + corbaTest("testIIOP"); } /** @@ -419,7 +419,7 @@ public class RmicAdvancedTest { */ @Test public void testIIOPDest() throws Exception { - buildRule.executeTarget("testIIOPDest"); + corbaTest("testIIOPDest"); } private void xnewTest(String target) { @@ -435,6 +435,23 @@ public class RmicAdvancedTest { } } + private void corbaTest(String target) { + if (!JavaEnvUtils.isAtLeastJavaVersion("11")) { + buildRule.executeTarget(target); + } else { + try { + buildRule.executeTarget(target); + fail("Target should have thrown a BuildException"); + } catch (BuildException ex) { + if (target.indexOf("IDL") > -1) { + assertEquals("this rmic implementation doesn't support the -idl switch", ex.getMessage()); + } else { + assertEquals("this rmic implementation doesn't support the -iiop switch", ex.getMessage()); + } + } + } + } + /** * this little bunny verifies that we can load stuff, and that * a failure to execute is turned into a fault
iiopindicates that portable (RMI/IIOP) stubs should be generatedindicates that portable (RMI/IIOP) stubs should be + generated.
See the note on CORBA support above.
No
idlindicates that IDL output files should be generatedindicates that IDL output files should be generated.
See + the note on CORBA support above.
No