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"); }