From 5aa1e8eff81ad6005e62587cdaaa962fce1105ea Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Mon, 5 Mar 2018 12:45:56 +0100 Subject: [PATCH] Java11 removes support for rmic -idl/-iiop --- WHATSNEW | 7 ++++++ manual/Tasks/rmic.html | 16 ++++++++++-- .../ant/taskdefs/rmic/DefaultRmicAdapter.java | 18 +++++++++++++ .../ant/taskdefs/rmic/ForkingSunRmic.java | 15 +++++++++++ .../tools/ant/taskdefs/rmic/KaffeRmic.java | 10 ++++++++ .../tools/ant/taskdefs/rmic/WLRmic.java | 10 ++++++++ .../tools/ant/taskdefs/RmicAdvancedTest.java | 25 ++++++++++++++++--- 7 files changed, 95 insertions(+), 6 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index 8c2af62b8..6dd00fe29 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -17,6 +17,13 @@ Fixed bugs: Bugzilla Report 62076 +Other changes: +-------------- + + * 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.9.9 TO Ant 1.9.10 ==================================== diff --git a/manual/Tasks/rmic.html b/manual/Tasks/rmic.html index fa927bf8d..c0d6dafd3 100644 --- a/manual/Tasks/rmic.html +++ b/manual/Tasks/rmic.html @@ -74,6 +74,14 @@ attribute. or a nested element. 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.9.11 the rmic task will fail when using either while + running Java11+ unless you fork the task and explicitly specify an + executable.

+

Parameters

@@ -168,7 +176,10 @@ please consult miniRMI's documentation to learn how to use it.

- + @@ -178,7 +189,8 @@ please consult miniRMI's 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 d4483d98f..37a14cbd8 100644 --- a/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java +++ b/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java @@ -176,6 +176,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.9.11 + */ + protected boolean areIiopAndIdlSupported() { + return !JavaEnvUtils.isAtLeastJavaVersion("11"); + } + /** * Setup rmic argument for rmic. * @return the command line @@ -223,6 +235,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) { @@ -233,6 +248,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 81bd7971c..9efc486d5 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.9.11 + */ + @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 ff72ad406..f5f0bff0d 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.9.11 + */ + @Override + protected boolean areIiopAndIdlSupported() { + // actually I don't think Kaffee supports either, but we've + // accepted the flags prior to 1.9.11 + return true; + } + /** {@inheritDoc} */ public boolean execute() throws BuildException { getRmic().log("Using Kaffe rmic", Project.MSG_VERBOSE); 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 3b1f2a19e..a4236d287 100644 --- a/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java +++ b/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java @@ -52,6 +52,16 @@ public class WLRmic extends DefaultRmicAdapter { /** unsupported error message */ public static final String UNSUPPORTED_STUB_OPTION = "Unsupported stub option: "; + /** + * @since Ant 1.9.11 + */ + @Override + protected boolean areIiopAndIdlSupported() { + // actually I don't think Weblogic's rmic supports either, but + // we've accepted the flags prior to 1.9.11 + 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 138712dbb..4991143d5 100644 --- a/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java +++ b/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java @@ -411,7 +411,7 @@ public class RmicAdvancedTest { */ @Test public void testIDL() throws Exception { - buildRule.executeTarget("testIDL"); + corbaTest("testIDL"); } /** @@ -421,7 +421,7 @@ public class RmicAdvancedTest { */ @Test public void testIDLDest() throws Exception { - buildRule.executeTarget("testIDLDest"); + corbaTest("testIDLDest"); } /** @@ -431,7 +431,7 @@ public class RmicAdvancedTest { */ @Test public void testIIOP() throws Exception { - buildRule.executeTarget("testIIOP"); + corbaTest("testIIOP"); } /** @@ -441,7 +441,7 @@ public class RmicAdvancedTest { */ @Test public void testIIOPDest() throws Exception { - buildRule.executeTarget("testIIOPDest"); + corbaTest("testIIOPDest"); } private void xnewTest(String target) { @@ -457,6 +457,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