From 4ea39464abb7633cfc68d43da5791e5c4897fd03 Mon Sep 17 00:00:00 2001
From: Stefan Bodewig
Date: Sat, 9 Dec 2017 19:28:56 +0100
Subject: [PATCH 1/4] add test for Java10 version support
---
.../org/apache/tools/ant/util/JavaEnvUtilsTest.java | 9 +++++++++
1 file changed, 9 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 6b27652d7..e26a7cb3e 100644
--- a/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java
+++ b/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java
@@ -145,4 +145,13 @@ public class JavaEnvUtilsTest {
JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_9));
}
+ @Test
+ public void java10IsDetectedProperly() {
+ assumeTrue("10".equals(System.getProperty("java.specification.version")));
+ assertEquals("10", JavaEnvUtils.getJavaVersion());
+ assertEquals(100, JavaEnvUtils.getJavaVersionNumber());
+ assertEquals(new DeweyDecimal("10"), JavaEnvUtils.getParsedJavaVersion());
+ assertTrue(JavaEnvUtils.isJavaVersion("10"));
+ assertTrue(JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_9));
+ }
}
From 6cd989e534dd52130f932ce04d3ca8aafe387cc9 Mon Sep 17 00:00:00 2001
From: Stefan Bodewig
Date: Sat, 9 Dec 2017 19:29:09 +0100
Subject: [PATCH 2/4] deal with theoretical case of version scheme changing
again
---
src/main/org/apache/tools/ant/util/JavaEnvUtils.java | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/main/org/apache/tools/ant/util/JavaEnvUtils.java b/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
index 7c980c89e..359174a75 100644
--- a/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
+++ b/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
@@ -187,8 +187,12 @@ public final class JavaEnvUtils {
javaVersionNumber = VERSION_9;
// at least Java9 and this should properly support the purely numeric version property
String v = System.getProperty("java.specification.version");
- javaVersionNumber = Integer.parseInt(v) * 10;
- javaVersion = v;
+ DeweyDecimal pv = new DeweyDecimal(v);
+ javaVersionNumber = pv.get(0) * 10;
+ if (pv.getSize() > 1) {
+ javaVersionNumber += pv.get(1);
+ }
+ javaVersion = pv.toString();
} catch (Throwable t) {
// swallow as we've hit the max class version that
// we have
From 8191d7e0f2e961953bbbb9bfd7003d6d32f3182c Mon Sep 17 00:00:00 2001
From: Stefan Bodewig
Date: Sat, 9 Dec 2017 19:34:17 +0100
Subject: [PATCH 3/4] use cleaner methid to detect current java version in
---
src/main/org/apache/tools/ant/taskdefs/Apt.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/org/apache/tools/ant/taskdefs/Apt.java b/src/main/org/apache/tools/ant/taskdefs/Apt.java
index 52154a8c0..ab527b8f6 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Apt.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Apt.java
@@ -262,7 +262,7 @@ public class Apt
*/
public void execute()
throws BuildException {
- if (JavaEnvUtils.getJavaVersionNumber() >= 18) {
+ if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_1_8)) {
throw new BuildException("apt does not exist under Java 1.8 and higher");
}
super.execute();
From 79e9d104350c4c3db04ccb7d53a6a9a1544d17fa Mon Sep 17 00:00:00 2001
From: Stefan Bodewig
Date: Sat, 9 Dec 2017 20:03:15 +0100
Subject: [PATCH 4/4] fail early if javah is used with java 10+
---
WHATSNEW | 3 +++
manual/Tasks/javah.html | 3 ++-
.../optional/javah/JavahAdapterFactory.java | 4 ++++
.../antunit/taskdefs/optional/javah-test.xml | 16 ++++++++++++----
.../tools/ant/taskdefs/optional/JavahTest.java | 4 ++++
5 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/WHATSNEW b/WHATSNEW
index 0f5e9bf7b..e855833b6 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -52,6 +52,9 @@ Other changes:
* added "javac10+" as new supported value for javac's compiler attribute.
+ * javah has been removed from Java 10. The task will now throw an
+ exception if you try to use it while running Java 10 or newer.
+
Changes from Ant 1.9.8 TO Ant 1.9.9
===================================
diff --git a/manual/Tasks/javah.html b/manual/Tasks/javah.html
index 4d3979bd0..d1daa7c01 100644
--- a/manual/Tasks/javah.html
+++ b/manual/Tasks/javah.html
@@ -39,7 +39,8 @@ systems are used.
generate the native header files with a single step.
Note the javah
has been deprecated as of Java 9
- and is scheduled to be removed with Java 10.
+ and removed as of Java 10. Trying to use it with Java10 will
+ fail.
It is possible to use different compilers. This can be selected
with the implementation
attribute or a nested element.
-
+
-
+
@@ -123,13 +123,21 @@ public class Foo {
-
+
-
+
+
+
+
+
+
+
+
diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/JavahTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/JavahTest.java
index 40472de2b..91f7b3278 100644
--- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/JavahTest.java
+++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/JavahTest.java
@@ -18,6 +18,8 @@
package org.apache.tools.ant.taskdefs.optional;
import org.apache.tools.ant.BuildFileRule;
+import org.apache.tools.ant.util.JavaEnvUtils;
+import org.junit.Assume;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@@ -47,6 +49,7 @@ public class JavahTest {
@Test
public void testSimpleCompile() {
+ Assume.assumeFalse(JavaEnvUtils.isAtLeastJavaVersion("10"));
buildRule.executeTarget("simple-compile");
assertTrue(new File(buildRule.getProject().getProperty("output"), "org_example_Foo.h")
.exists());
@@ -54,6 +57,7 @@ public class JavahTest {
@Test
public void testCompileFileset() {
+ Assume.assumeFalse(JavaEnvUtils.isAtLeastJavaVersion("10"));
buildRule.executeTarget("test-fileset");
assertTrue(new File(buildRule.getProject().getProperty("output"), "org_example_Foo.h").exists());
}