From d21cef3f5509f4366b5d78536c2d83db4f2beec8 Mon Sep 17 00:00:00 2001
From: Stefan Bodewig
Date: Mon, 25 Jul 2016 15:20:12 +0200
Subject: [PATCH 1/4] line-ends
---
.../tools/ant/util/JavaEnvUtilsTest.java | 282 +++++++++---------
1 file changed, 141 insertions(+), 141 deletions(-)
diff --git a/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java b/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java
index aef4f1b19..b3f3e0205 100644
--- a/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java
+++ b/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java
@@ -1,141 +1,141 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.tools.ant.util;
-
-import java.io.File;
-
-import junit.framework.AssertionFailedError;
-
-import org.apache.tools.ant.taskdefs.condition.Os;
-import org.junit.Assume;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-/**
- * TestCase for JavaEnvUtils.
- *
- */
-public class JavaEnvUtilsTest {
-
- private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
-
-
- @Test
- public void testGetExecutableNetware() {
- Assume.assumeTrue("Test only runs on netware", Os.isName("netware"));
- assertEquals("java", JavaEnvUtils.getJreExecutable("java"));
- assertEquals("javac", JavaEnvUtils.getJdkExecutable("javac"));
- assertEquals("foo", JavaEnvUtils.getJreExecutable("foo"));
- assertEquals("foo", JavaEnvUtils.getJdkExecutable("foo"));
- }
-
- @Test
- public void testGetExecutableWindows() {
- Assume.assumeTrue("Test only runs on windows", Os.isFamily("windows"));
- String javaHome =
- FILE_UTILS.normalize(System.getProperty("java.home"))
- .getAbsolutePath();
-
- String j = JavaEnvUtils.getJreExecutable("java");
- assertTrue(j.endsWith(".exe"));
- assertTrue(j+" is absolute", (new File(j)).isAbsolute());
- try {
- assertTrue(j+" is normalized and in the JRE dir",
- j.startsWith(javaHome));
- } catch (AssertionFailedError e) {
- // java.home is bogus
- assertEquals("java.exe", j);
- }
-
- j = JavaEnvUtils.getJdkExecutable("javac");
- assertTrue(j.endsWith(".exe"));
- try {
- assertTrue(j+" is absolute", (new File(j)).isAbsolute());
- String javaHomeParent =
- FILE_UTILS.normalize(javaHome+"/..").getAbsolutePath();
- assertTrue(j+" is normalized and in the JDK dir",
- j.startsWith(javaHomeParent));
- assertTrue(j+" is normalized and not in the JRE dir",
- !j.startsWith(javaHome));
-
- } catch (AssertionFailedError e) {
- // java.home is bogus
- assertEquals("javac.exe", j);
- }
-
- assertEquals("foo.exe", JavaEnvUtils.getJreExecutable("foo"));
- assertEquals("foo.exe", JavaEnvUtils.getJdkExecutable("foo"));
- }
-
- @Test
- public void testGetExecutableMostPlatforms() {
- Assume.assumeTrue("Test only runs on non Netware and non Windows systems",
- !Os.isName("netware") && !Os.isFamily("windows"));
- String javaHome =
- FILE_UTILS.normalize(System.getProperty("java.home"))
- .getAbsolutePath();
-
- // could still be OS/2
- String extension = Os.isFamily("dos") ? ".exe" : "";
-
- String j = JavaEnvUtils.getJreExecutable("java");
- if (!extension.equals("")) {
- assertTrue(j.endsWith(extension));
- }
- assertTrue(j+" is absolute", (new File(j)).isAbsolute());
- assertTrue(j+" is normalized and in the JRE dir",
- j.startsWith(javaHome));
-
- j = JavaEnvUtils.getJdkExecutable("javac");
- if (!extension.equals("")) {
- assertTrue(j.endsWith(extension));
- }
- assertTrue(j+" is absolute", (new File(j)).isAbsolute());
-
- String javaHomeParent =
- FILE_UTILS.normalize(javaHome+"/..").getAbsolutePath();
- assertTrue(j+" is normalized and in the JDK dir",
- j.startsWith(javaHomeParent));
-
- if ((Os.isFamily("mac") && JavaEnvUtils.getJavaVersionNumber() <= JavaEnvUtils.VERSION_1_6)
- || JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) {
- assertTrue(j+" is normalized and in the JRE dir",
- j.startsWith(javaHome));
- } else {
- assertTrue(j+" is normalized and not in the JRE dir",
- !j.startsWith(javaHome));
- }
-
- assertEquals("foo"+extension,
- JavaEnvUtils.getJreExecutable("foo"));
- assertEquals("foo"+extension,
- JavaEnvUtils.getJdkExecutable("foo"));
- }
-
- @Test
- public void testIsAtLeastJavaVersion()
- {
- assertTrue(
- "Current java version is not at least the current java version...",
- JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.getJavaVersion()));
- }
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.tools.ant.util;
+
+import java.io.File;
+
+import junit.framework.AssertionFailedError;
+
+import org.apache.tools.ant.taskdefs.condition.Os;
+import org.junit.Assume;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * TestCase for JavaEnvUtils.
+ *
+ */
+public class JavaEnvUtilsTest {
+
+ private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
+
+
+ @Test
+ public void testGetExecutableNetware() {
+ Assume.assumeTrue("Test only runs on netware", Os.isName("netware"));
+ assertEquals("java", JavaEnvUtils.getJreExecutable("java"));
+ assertEquals("javac", JavaEnvUtils.getJdkExecutable("javac"));
+ assertEquals("foo", JavaEnvUtils.getJreExecutable("foo"));
+ assertEquals("foo", JavaEnvUtils.getJdkExecutable("foo"));
+ }
+
+ @Test
+ public void testGetExecutableWindows() {
+ Assume.assumeTrue("Test only runs on windows", Os.isFamily("windows"));
+ String javaHome =
+ FILE_UTILS.normalize(System.getProperty("java.home"))
+ .getAbsolutePath();
+
+ String j = JavaEnvUtils.getJreExecutable("java");
+ assertTrue(j.endsWith(".exe"));
+ assertTrue(j+" is absolute", (new File(j)).isAbsolute());
+ try {
+ assertTrue(j+" is normalized and in the JRE dir",
+ j.startsWith(javaHome));
+ } catch (AssertionFailedError e) {
+ // java.home is bogus
+ assertEquals("java.exe", j);
+ }
+
+ j = JavaEnvUtils.getJdkExecutable("javac");
+ assertTrue(j.endsWith(".exe"));
+ try {
+ assertTrue(j+" is absolute", (new File(j)).isAbsolute());
+ String javaHomeParent =
+ FILE_UTILS.normalize(javaHome+"/..").getAbsolutePath();
+ assertTrue(j+" is normalized and in the JDK dir",
+ j.startsWith(javaHomeParent));
+ assertTrue(j+" is normalized and not in the JRE dir",
+ !j.startsWith(javaHome));
+
+ } catch (AssertionFailedError e) {
+ // java.home is bogus
+ assertEquals("javac.exe", j);
+ }
+
+ assertEquals("foo.exe", JavaEnvUtils.getJreExecutable("foo"));
+ assertEquals("foo.exe", JavaEnvUtils.getJdkExecutable("foo"));
+ }
+
+ @Test
+ public void testGetExecutableMostPlatforms() {
+ Assume.assumeTrue("Test only runs on non Netware and non Windows systems",
+ !Os.isName("netware") && !Os.isFamily("windows"));
+ String javaHome =
+ FILE_UTILS.normalize(System.getProperty("java.home"))
+ .getAbsolutePath();
+
+ // could still be OS/2
+ String extension = Os.isFamily("dos") ? ".exe" : "";
+
+ String j = JavaEnvUtils.getJreExecutable("java");
+ if (!extension.equals("")) {
+ assertTrue(j.endsWith(extension));
+ }
+ assertTrue(j+" is absolute", (new File(j)).isAbsolute());
+ assertTrue(j+" is normalized and in the JRE dir",
+ j.startsWith(javaHome));
+
+ j = JavaEnvUtils.getJdkExecutable("javac");
+ if (!extension.equals("")) {
+ assertTrue(j.endsWith(extension));
+ }
+ assertTrue(j+" is absolute", (new File(j)).isAbsolute());
+
+ String javaHomeParent =
+ FILE_UTILS.normalize(javaHome+"/..").getAbsolutePath();
+ assertTrue(j+" is normalized and in the JDK dir",
+ j.startsWith(javaHomeParent));
+
+ if ((Os.isFamily("mac") && JavaEnvUtils.getJavaVersionNumber() <= JavaEnvUtils.VERSION_1_6)
+ || JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) {
+ assertTrue(j+" is normalized and in the JRE dir",
+ j.startsWith(javaHome));
+ } else {
+ assertTrue(j+" is normalized and not in the JRE dir",
+ !j.startsWith(javaHome));
+ }
+
+ assertEquals("foo"+extension,
+ JavaEnvUtils.getJreExecutable("foo"));
+ assertEquals("foo"+extension,
+ JavaEnvUtils.getJdkExecutable("foo"));
+ }
+
+ @Test
+ public void testIsAtLeastJavaVersion()
+ {
+ assertTrue(
+ "Current java version is not at least the current java version...",
+ JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.getJavaVersion()));
+ }
+
+}
From 53fed9e4e223adbc34760423a53654aa0546e3ea Mon Sep 17 00:00:00 2001
From: Stefan Bodewig
Date: Mon, 25 Jul 2016 15:25:51 +0200
Subject: [PATCH 2/4] old JAVA_1_9 still works as expected
---
.../junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java b/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java
index b3f3e0205..80a92a97d 100644
--- a/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java
+++ b/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java
@@ -28,6 +28,7 @@ import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assume.assumeTrue;
/**
* TestCase for JavaEnvUtils.
@@ -138,4 +139,11 @@ public class JavaEnvUtilsTest {
JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.getJavaVersion()));
}
+ @Test
+ public void isJavaVersionSupportsBothVersionsOfJava9() {
+ assumeTrue(JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_9));
+ assertTrue("JAVA_1_9 is not considered equal to JAVA_9",
+ JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_9));
+ }
+
}
From 2bac4d00111b0f2df6c8db54bfd591206b0d6ad3 Mon Sep 17 00:00:00 2001
From: Stefan Bodewig
Date: Mon, 25 Jul 2016 15:49:17 +0200
Subject: [PATCH 3/4] we can always assume java5
---
src/etc/testcases/taskdefs/rmic/rmic.xml | 18 ++++++------------
1 file changed, 6 insertions(+), 12 deletions(-)
diff --git a/src/etc/testcases/taskdefs/rmic/rmic.xml b/src/etc/testcases/taskdefs/rmic/rmic.xml
index 757fca517..944cdcd6b 100644
--- a/src/etc/testcases/taskdefs/rmic/rmic.xml
+++ b/src/etc/testcases/taskdefs/rmic/rmic.xml
@@ -202,12 +202,6 @@
-
-
-
-
-
-
@@ -434,41 +428,41 @@
-
+
-
+
-
+
-
+
-
+
-
+
From fdfebe8013e1e2fe89b571d96935e61dbdbdc0c2 Mon Sep 17 00:00:00 2001
From: Stefan Bodewig
Date: Mon, 25 Jul 2016 16:14:59 +0200
Subject: [PATCH 4/4] default to forking rmic on JDK 9+
https://bz.apache.org/bugzilla/show_bug.cgi?id=59860
---
WHATSNEW | 6 ++++
manual/Tasks/rmic.html | 8 +++--
src/etc/testcases/taskdefs/rmic/rmic.xml | 34 ++++++++++++-------
.../ant/taskdefs/rmic/RmicAdapterFactory.java | 11 ++++--
.../tools/ant/taskdefs/rmic/SunRmic.java | 8 +++++
.../tools/ant/taskdefs/RmicAdvancedTest.java | 7 ++--
6 files changed, 52 insertions(+), 22 deletions(-)
diff --git a/WHATSNEW b/WHATSNEW
index 3e4e90ba0..da25374ec 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -50,6 +50,12 @@ Other changes:
* added a new filter that can perform non-ASCII
to Unicode-escape conversions.
+ * defaults to the "forking" compiler on JDK 9+ as the
+ implementation class of rmic is not exported by its containing
+ module and thus not accessible to Ant without applying -XaddExports
+ magic.
+ Bugzilla Report 59860
+
Changes from Ant 1.9.6 TO Ant 1.9.7
===================================
diff --git a/manual/Tasks/rmic.html b/manual/Tasks/rmic.html
index b644c68cd..12b30c51e 100644
--- a/manual/Tasks/rmic.html
+++ b/manual/Tasks/rmic.html
@@ -52,11 +52,13 @@ with the "build.rmic" property, the compiler
attribute. or a nested element.
Here are the choices:
- - default -the default compiler (kaffe or sun) for the platform.
-
- sun (the standard compiler of the JDK)
+ - default -the default compiler (kaffe, sun or forking) for the platform.
+
- sun (the standard compiler of the JDK < JDK 9)
- kaffe (the standard compiler of Kaffe)
- weblogic
- - forking - the sun compiler forked into a separate process (since Apache Ant 1.7)
+ - forking - the sun compiler forked into a separate process (since
+ Apache Ant 1.7). Starting with Ant 1.9.8 this is the default when
+ running on JDK 9+.
- xnew - the sun compiler forked into a separate process,
with the -Xnew option (since Ant 1.7).
This is the most reliable way to use -Xnew
diff --git a/src/etc/testcases/taskdefs/rmic/rmic.xml b/src/etc/testcases/taskdefs/rmic/rmic.xml
index 944cdcd6b..4670f43f7 100644
--- a/src/etc/testcases/taskdefs/rmic/rmic.xml
+++ b/src/etc/testcases/taskdefs/rmic/rmic.xml
@@ -200,7 +200,17 @@
-
+
+
+
+
+
+
+
+
+
+
+
@@ -263,24 +273,24 @@
-
+
-
+
-
+
-
+
@@ -322,7 +332,7 @@
-
+
@@ -330,12 +340,12 @@
-
+
@@ -389,14 +399,14 @@
-
+
-
+
@@ -429,14 +439,14 @@
This test stamps on the XML parser settings on java6, so it is disabled.
-->
-
+
-
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java b/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
index 4a2708c78..a604144ad 100644
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
+++ b/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
@@ -22,6 +22,7 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.util.ClasspathUtils;
+import org.apache.tools.ant.util.JavaEnvUtils;
/**
* Creates the necessary rmic adapter, given basic criteria.
@@ -95,9 +96,13 @@ public final class RmicAdapterFactory {
throws BuildException {
//handle default specially by choosing the sun or kaffe compiler
if (DEFAULT_COMPILER.equalsIgnoreCase(rmicType) || rmicType.length() == 0) {
- rmicType = KaffeRmic.isAvailable()
- ? KaffeRmic.COMPILER_NAME
- : SunRmic.COMPILER_NAME;
+ if (KaffeRmic.isAvailable()) {
+ rmicType = KaffeRmic.COMPILER_NAME;
+ } else if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) {
+ rmicType = ForkingSunRmic.COMPILER_NAME;
+ } else {
+ rmicType = SunRmic.COMPILER_NAME;
+ }
}
if (SunRmic.COMPILER_NAME.equalsIgnoreCase(rmicType)) {
return new SunRmic();
diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java b/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java
index 07cbd3062..1b5e67dad 100644
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java
+++ b/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java
@@ -27,6 +27,7 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.LogOutputStream;
import org.apache.tools.ant.types.Commandline;
+import org.apache.tools.ant.util.JavaEnvUtils;
/**
* The implementation of the rmic for SUN's JDK.
@@ -54,6 +55,9 @@ public class SunRmic extends DefaultRmicAdapter {
+ "available. A common solution is to "
+ "set the environment variable "
+ "JAVA_HOME";
+ public static final String ERROR_NO_RMIC_ON_CLASSPATH_JAVA_9 = "Cannot use SUN rmic, as it is not "
+ + "available. The class we try to use is part of the jdk.rmic module which may not be. "
+ + "Please use the 'forking' compiler for JDK 9+";
/** Error message to use when there is an error starting the sun rmic compiler */
public static final String ERROR_RMIC_FAILED = "Error starting SUN rmic: ";
@@ -84,6 +88,10 @@ public class SunRmic extends DefaultRmicAdapter {
(new Object[] {cmd.getArguments()}));
return ok.booleanValue();
} catch (ClassNotFoundException ex) {
+ if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9)) {
+ throw new BuildException(ERROR_NO_RMIC_ON_CLASSPATH_JAVA_9,
+ getRmic().getLocation());
+ }
throw new BuildException(ERROR_NO_RMIC_ON_CLASSPATH,
getRmic().getLocation());
} catch (Exception ex) {
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 c9d251469..e0e2d9a1e 100644
--- a/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java
+++ b/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java
@@ -137,7 +137,7 @@ public class RmicAdvancedTest {
* test weblogic
*/
@Test
- @Ignore("WLRmin tests don't work")
+ @Ignore("WLRmic tests don't work")
public void XtestWlrmic() throws Exception {
buildRule.executeTarget("testWlrmic");
}
@@ -146,7 +146,7 @@ public class RmicAdvancedTest {
* test weblogic's stripping of -J args
*/
@Test
- @Ignore("WLRmin tests don't work")
+ @Ignore("WLRmic tests don't work")
public void XtestWlrmicJArg() throws Exception {
buildRule.executeTarget("testWlrmicJArg");
}
@@ -155,8 +155,7 @@ public class RmicAdvancedTest {
* test the forking compiler
*/
@Test
- @Ignore("WLRmin tests don't work")
- public void NotestForking() throws Exception {
+ public void testForking() throws Exception {
buildRule.executeTarget("testForking");
}