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