Please see the attached debdiff to enable some basic OpenJDK 9 support
for gradle 3.4.1. The patches were downloaded from gradle upstream to
prevent the dreadful "Could not determine java version from '9.0.x'".

After applying the patches and rebuilding with OpenJDK 8, gradle can
then build itself with openjdk 9. I have also rebuild groovy, gant,
spock (FTBFS due to source/target 1.5), and dom4j (FTBFS due to
failing tests) which all previously failed.

Hopefully this should unblock #875336.

Please note that the debdiff includes the fix for #893487 for convenience.

thanks

On Fri, 25 Aug 2017 17:01:23 +0100 Chris West
<solo-debianb...@goeswhere.com> wrote:
> Source: gradle
> Version: 3.2.1-1
> Severity: normal
> User: debian-j...@lists.debian.org
> Usertags: default-java9
>
> Gradle doesn't officially support running under Java 9 until 4.1, which
> was released a fortnight ago.
>
> The version in Debian seems to actually be much better at surviving real
> builds than other random versions of Gradle I have lying around, but it
> would still be nice totally eliminate this as a java-9 blocker.
>
> Cheers,
> Chris.
>
>
>
diff -Nru gradle-3.4.1/debian/changelog gradle-3.4.1/debian/changelog
--- gradle-3.4.1/debian/changelog	2017-11-29 16:09:02.000000000 +0100
+++ gradle-3.4.1/debian/changelog	2018-03-19 12:19:49.000000000 +0100
@@ -1,3 +1,15 @@
+gradle (3.4.1-3) UNRELEASED; urgency=medium
+
+  * d/p/cast-estimated-runtime-to-long.patch: fix FTBFS due to missing cast.
+    (Closes: #893487)
+  * d/p/support-running-gradle-on-jdk-10-500485df3a18.patch,
+    d/p/add-test-case-for-10-internal_c1fe5e40a76b.patch,
+    d/p/support-zulu9-version-number_d9c35cf9d74c.patch: prevent failures when
+    building projects with openjdk 9.
+
+
+ -- Tiago Stürmer Daitx <tiago.da...@ubuntu.com>  Mon, 19 Mar 2018 11:19:49 +0000
+
 gradle (3.4.1-2) experimental; urgency=medium
 
   * Team upload.
diff -Nru gradle-3.4.1/debian/patches/add-test-case-for-10-internal_c1fe5e40a76b.patch gradle-3.4.1/debian/patches/add-test-case-for-10-internal_c1fe5e40a76b.patch
--- gradle-3.4.1/debian/patches/add-test-case-for-10-internal_c1fe5e40a76b.patch	1970-01-01 01:00:00.000000000 +0100
+++ gradle-3.4.1/debian/patches/add-test-case-for-10-internal_c1fe5e40a76b.patch	2018-03-19 12:19:49.000000000 +0100
@@ -0,0 +1,21 @@
+From c1fe5e40a76b79a98e8916c2ce3b4e1e6ed3f343 Mon Sep 17 00:00:00 2001
+From: Cedric Champeau <ced...@gradle.com>
+Date: Thu, 13 Jul 2017 16:16:46 +0200
+Subject: [PATCH] Add test case for `10-internal`
+
+---
+ .../base-services/src/test/groovy/org/gradle/api/JavaVersionSpec.groovy  | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/subprojects/base-services/src/test/groovy/org/gradle/api/JavaVersionSpec.groovy b/subprojects/base-services/src/test/groovy/org/gradle/api/JavaVersionSpec.groovy
+index 75459ed3f06..fbb243ba992 100644
+--- a/subprojects/base-services/src/test/groovy/org/gradle/api/JavaVersionSpec.groovy
++++ b/subprojects/base-services/src/test/groovy/org/gradle/api/JavaVersionSpec.groovy
+@@ -65,6 +65,7 @@ public class JavaVersionSpec extends Specification {
+         JavaVersion.toVersion("9-ea") == JavaVersion.VERSION_1_9
+ 
+         JavaVersion.toVersion("10-ea") == JavaVersion.VERSION_1_10
++        JavaVersion.toVersion("10-internal") == JavaVersion.VERSION_1_10
+     }
+ 
+     def convertClassVersionToJavaVersion() {
diff -Nru gradle-3.4.1/debian/patches/cast-estimated-runtime-to-long.patch gradle-3.4.1/debian/patches/cast-estimated-runtime-to-long.patch
--- gradle-3.4.1/debian/patches/cast-estimated-runtime-to-long.patch	1970-01-01 01:00:00.000000000 +0100
+++ gradle-3.4.1/debian/patches/cast-estimated-runtime-to-long.patch	2018-03-19 12:15:47.000000000 +0100
@@ -0,0 +1,22 @@
+Description: gradle 3.4.1 FTBFS with a missing cast to long
+ estimatedRuntime must be cast to long otherwise gradle 3.4.1 FTBFS with
+ buildSrc/src/main/groovy/org/gradle/testing/DistributedPerformanceTest.groovy:
+ 134: [Static type checking] - Cannot assign value of type java.math.BigDecimal
+ to variable of type long.
+Author: Tiago Stürmer Daitx <tiago.da...@ubuntu.com>
+Bug-Debian: https://bugs.debian.org/893487
+Forwarded: no
+Last-Update: 2018-03-19
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/buildSrc/src/main/groovy/org/gradle/testing/DistributedPerformanceTest.groovy
++++ b/buildSrc/src/main/groovy/org/gradle/testing/DistributedPerformanceTest.groovy
+@@ -131,7 +131,7 @@ class DistributedPerformanceTest extends
+         def scenarios = scenarioList.readLines()
+             .collect { line ->
+                 def parts = Splitter.on(';').split(line).toList()
+-                new Scenario(id : parts[0], estimatedRuntime: new BigDecimal(parts[1]), templates: parts.subList(2, parts.size()))
++                new Scenario(id : parts[0], estimatedRuntime: new BigDecimal(parts[1]) as long, templates: parts.subList(2, parts.size()))
+             }
+             .sort{ -it.estimatedRuntime }
+ 
diff -Nru gradle-3.4.1/debian/patches/series gradle-3.4.1/debian/patches/series
--- gradle-3.4.1/debian/patches/series	2017-11-29 16:07:56.000000000 +0100
+++ gradle-3.4.1/debian/patches/series	2018-03-19 12:19:49.000000000 +0100
@@ -23,3 +23,7 @@
 use-local-artifacts.patch
 jansi.patch
 commons-io.patch
+cast-estimated-runtime-to-long.patch
+support-running-gradle-on-jdk-10-500485df3a18.patch
+add-test-case-for-10-internal_c1fe5e40a76b.patch
+support-zulu9-version-number_d9c35cf9d74c.patch
diff -Nru gradle-3.4.1/debian/patches/support-running-gradle-on-jdk-10-500485df3a18.patch gradle-3.4.1/debian/patches/support-running-gradle-on-jdk-10-500485df3a18.patch
--- gradle-3.4.1/debian/patches/support-running-gradle-on-jdk-10-500485df3a18.patch	1970-01-01 01:00:00.000000000 +0100
+++ gradle-3.4.1/debian/patches/support-running-gradle-on-jdk-10-500485df3a18.patch	2018-03-19 12:19:49.000000000 +0100
@@ -0,0 +1,173 @@
+From 500485df3a1898d4637bfa42b73e356941b4af91 Mon Sep 17 00:00:00 2001
+From: Cedric Champeau <ced...@gradle.com>
+Date: Thu, 13 Jul 2017 10:08:33 +0200
+Subject: [PATCH] Support running Gradle on JDK 10
+
+This commit adds support for `JavaVersion.1_10` (yes, this is awkward naming, blame versioning scheme change).
+Note that there are 2 different aspects of Java 10 detection:
+
+1. given a string representation of a version number, return the appropriate `JavaVersion` enum value
+2. given the current runtime, return the appropriate `JavaVersion` enum value
+
+This commit fixes 1, but didn't change anything in the way 2 works. In particular, 2 still uses the `java.version`
+property, which is then parsed and we follow the process of 1. However, since Java 9, a new `Runtime#getVersion`
+method exists, that we should use instead of relying on parsing the version number returned by `java.version`.
+The reason we don't do this yet is that Gradle needs to run on older JDKs, so we cannot statically link to this
+method, which involves either the use of reflection or method handles to get a hand on the result of the invocation.
+Since the invocation returns a complex object (not just a `String`), we're deferring this work (PRs welcome!).
+---
+ .../src/main/java/org/gradle/api/JavaVersion.java  | 16 ++++++++--
+ .../groovy/org/gradle/api/JavaVersionSpec.groovy   | 34 ++++++++++++++++++++--
+ 2 files changed, 44 insertions(+), 6 deletions(-)
+
+diff --git a/subprojects/base-services/src/main/java/org/gradle/api/JavaVersion.java b/subprojects/base-services/src/main/java/org/gradle/api/JavaVersion.java
+index 3b9a7280c14..4a2195a5b0b 100644
+--- a/subprojects/base-services/src/main/java/org/gradle/api/JavaVersion.java
++++ b/subprojects/base-services/src/main/java/org/gradle/api/JavaVersion.java
+@@ -24,7 +24,9 @@
+  * An enumeration of Java versions.
+  */
+ public enum JavaVersion {
+-    VERSION_1_1(false), VERSION_1_2(false), VERSION_1_3(false), VERSION_1_4(false), VERSION_1_5(true), VERSION_1_6(true), VERSION_1_7(true), VERSION_1_8(true), VERSION_1_9(true);
++    VERSION_1_1(false), VERSION_1_2(false), VERSION_1_3(false), VERSION_1_4(false),
++    // starting from here versions are 1_ but their official name is "Java 6", "Java 7", ...
++    VERSION_1_5(true), VERSION_1_6(true), VERSION_1_7(true), VERSION_1_8(true), VERSION_1_9(true), VERSION_1_10(true);
+     private static JavaVersion currentJavaVersion;
+     private final boolean hasMajorVersion;
+     private final String versionName;
+@@ -52,7 +54,7 @@ public static JavaVersion toVersion(Object value) throws IllegalArgumentExceptio
+         }
+ 
+         String name = value.toString();
+-        Matcher matcher = Pattern.compile("(\\d)(-.+)?").matcher(name);
++        Matcher matcher = Pattern.compile("(\\d{1,2})(-.+)?").matcher(name);
+         if (matcher.matches()) {
+             int index = Integer.parseInt(matcher.group(1)) - 1;
+             if (index < values().length && values()[index].hasMajorVersion) {
+@@ -60,7 +62,7 @@ public static JavaVersion toVersion(Object value) throws IllegalArgumentExceptio
+             }
+         }
+ 
+-        matcher = Pattern.compile("1\\.(\\d)(\\D.+)?").matcher(name);
++        matcher = Pattern.compile("1\\.(\\d{1,2})(\\D.+)?").matcher(name);
+         if (matcher.matches()) {
+             int versionIdx = Integer.parseInt(matcher.group(1)) - 1;
+             if (versionIdx >= 0 && versionIdx < values().length) {
+@@ -122,6 +124,10 @@ private boolean isJava9() {
+         return this == VERSION_1_9;
+     }
+ 
++    private boolean isJava10() {
++        return this == VERSION_1_10;
++    }
++
+     public boolean isJava5Compatible() {
+         return this.compareTo(VERSION_1_5) >= 0;
+     }
+@@ -142,6 +148,10 @@ public boolean isJava9Compatible() {
+         return this.compareTo(VERSION_1_9) >= 0;
+     }
+ 
++    public boolean isJava10Compatible() {
++        return this.compareTo(VERSION_1_10) >= 0;
++    }
++
+     @Override
+     public String toString() {
+         return getName();
+diff --git a/subprojects/base-services/src/test/groovy/org/gradle/api/JavaVersionSpec.groovy b/subprojects/base-services/src/test/groovy/org/gradle/api/JavaVersionSpec.groovy
+index fab8be67274..75459ed3f06 100644
+--- a/subprojects/base-services/src/test/groovy/org/gradle/api/JavaVersionSpec.groovy
++++ b/subprojects/base-services/src/test/groovy/org/gradle/api/JavaVersionSpec.groovy
+@@ -41,6 +41,7 @@ public class JavaVersionSpec extends Specification {
+         JavaVersion.VERSION_1_7.toString() == "1.7"
+         JavaVersion.VERSION_1_8.toString() == "1.8"
+         JavaVersion.VERSION_1_9.toString() == "1.9"
++        JavaVersion.VERSION_1_10.toString() == "1.10"
+     }
+ 
+     def convertsStringToVersion() {
+@@ -57,10 +58,13 @@ public class JavaVersionSpec extends Specification {
+         JavaVersion.toVersion("7") == JavaVersion.VERSION_1_7
+         JavaVersion.toVersion("8") == JavaVersion.VERSION_1_8
+         JavaVersion.toVersion("9") == JavaVersion.VERSION_1_9
++        JavaVersion.toVersion("10") == JavaVersion.VERSION_1_10
+ 
+         JavaVersion.toVersion("1.9.0-internal") == JavaVersion.VERSION_1_9
+         JavaVersion.toVersion("1.9.0-ea") == JavaVersion.VERSION_1_9
+         JavaVersion.toVersion("9-ea") == JavaVersion.VERSION_1_9
++
++        JavaVersion.toVersion("10-ea") == JavaVersion.VERSION_1_10
+     }
+ 
+     def convertClassVersionToJavaVersion() {
+@@ -74,6 +78,7 @@ public class JavaVersionSpec extends Specification {
+         JavaVersion.forClassVersion(51) == JavaVersion.VERSION_1_7
+         JavaVersion.forClassVersion(52) == JavaVersion.VERSION_1_8
+         JavaVersion.forClassVersion(53) == JavaVersion.VERSION_1_9
++        JavaVersion.forClassVersion(54) == JavaVersion.VERSION_1_10
+     }
+ 
+     def failsToConvertStringToVersionForUnknownVersion() {
+@@ -81,7 +86,6 @@ public class JavaVersionSpec extends Specification {
+         conversionFails("1");
+         conversionFails("2");
+ 
+-        conversionFails("10");
+         conversionFails("17");
+ 
+         conversionFails("a");
+@@ -91,7 +95,6 @@ public class JavaVersionSpec extends Specification {
+ 
+         conversionFails("0.1");
+         conversionFails("1.54");
+-        conversionFails("1.10");
+         conversionFails("2.0");
+         conversionFails("1_4");
+         conversionFails("8.1");
+@@ -100,7 +103,7 @@ public class JavaVersionSpec extends Specification {
+         conversionFails("10.1.2");
+ 
+         conversionFails("9-");
+-        conversionFails("10-ea");
++        conversionFails("11-ea");
+     }
+ 
+     def convertsVersionToVersion() {
+@@ -118,6 +121,8 @@ public class JavaVersionSpec extends Specification {
+         JavaVersion.toVersion(1.7) == JavaVersion.VERSION_1_7
+         JavaVersion.toVersion(1.8) == JavaVersion.VERSION_1_8
+         JavaVersion.toVersion(1.9) == JavaVersion.VERSION_1_9
++        JavaVersion.toVersion(9) == JavaVersion.VERSION_1_9
++        JavaVersion.toVersion(10) == JavaVersion.VERSION_1_10
+     }
+ 
+     def failsToConvertNumberToVersionForUnknownVersion() {
+@@ -233,4 +238,27 @@ public class JavaVersionSpec extends Specification {
+         where:
+         javaVersion << ['1.9', '9-ea']
+     }
++
++    def "uses system property to determine if compatible with Java 10"() {
++        System.properties['java.version'] = javaVersion
++
++        expect:
++        !JavaVersion.current().java5
++        !JavaVersion.current().java6
++        !JavaVersion.current().java7
++        !JavaVersion.current().java8
++        !JavaVersion.current().java9
++        JavaVersion.current().java10
++
++        and:
++        JavaVersion.current().java5Compatible
++        JavaVersion.current().java6Compatible
++        JavaVersion.current().java7Compatible
++        JavaVersion.current().java8Compatible
++        JavaVersion.current().java9Compatible
++        JavaVersion.current().java10Compatible
++
++        where:
++        javaVersion << ['1.10', '10-ea']
++    }
+ }
diff -Nru gradle-3.4.1/debian/patches/support-zulu9-version-number_d9c35cf9d74c.patch gradle-3.4.1/debian/patches/support-zulu9-version-number_d9c35cf9d74c.patch
--- gradle-3.4.1/debian/patches/support-zulu9-version-number_d9c35cf9d74c.patch	1970-01-01 01:00:00.000000000 +0100
+++ gradle-3.4.1/debian/patches/support-zulu9-version-number_d9c35cf9d74c.patch	2018-03-19 12:19:49.000000000 +0100
@@ -0,0 +1,68 @@
+From d9c35cf9d74c102641fcfe0bb7bf622791a96caf Mon Sep 17 00:00:00 2001
+From: Bo Zhang <b...@gradle.com>
+Date: Mon, 25 Sep 2017 04:05:42 -0500
+Subject: [PATCH] Support zulu9 version number(#2992) (#2994)
+
+https://github.com/gradle/gradle/issues/2992
+zulu JDK 9 introduces version number format '9.0.0.15' which
+can't be recognized by Gradle. This fix adjusts the recognition
+pattern.
+---
+ .../base-services/src/main/java/org/gradle/api/JavaVersion.java  | 6 +++---
+ .../src/test/groovy/org/gradle/api/JavaVersionSpec.groovy        | 9 +++++----
+ 2 files changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/subprojects/base-services/src/main/java/org/gradle/api/JavaVersion.java b/subprojects/base-services/src/main/java/org/gradle/api/JavaVersion.java
+index b3219645099..04d8671cd5f 100644
+--- a/subprojects/base-services/src/main/java/org/gradle/api/JavaVersion.java
++++ b/subprojects/base-services/src/main/java/org/gradle/api/JavaVersion.java
+@@ -54,10 +54,10 @@ public static JavaVersion toVersion(Object value) throws IllegalArgumentExceptio
+         }
+ 
+         String name = value.toString();
+-        Matcher matcher = Pattern.compile("(\\d{1,2})(-.+)?").matcher(name);
++        Matcher matcher = Pattern.compile("(\\d{1,2})(\\D.+)?").matcher(name);
+         if (matcher.matches()) {
+             int index = Integer.parseInt(matcher.group(1)) - 1;
+-            if (index < values().length && values()[index].hasMajorVersion) {
++            if (index > 0 && index < values().length && values()[index].hasMajorVersion) {
+                 return values()[index];
+             }
+         }
+@@ -98,7 +98,7 @@ public static JavaVersion forClassVersion(int classVersion) {
+     }
+ 
+     public static JavaVersion forClass(byte[] classData) {
+-        if (classData.length<8) {
++        if (classData.length < 8) {
+             throw new IllegalArgumentException("Invalid class format. Should contain at least 8 bytes");
+         }
+         return forClassVersion(classData[7] & 0xFF);
+diff --git a/subprojects/base-services/src/test/groovy/org/gradle/api/JavaVersionSpec.groovy b/subprojects/base-services/src/test/groovy/org/gradle/api/JavaVersionSpec.groovy
+index fbb243ba992..17dc3956118 100644
+--- a/subprojects/base-services/src/test/groovy/org/gradle/api/JavaVersionSpec.groovy
++++ b/subprojects/base-services/src/test/groovy/org/gradle/api/JavaVersionSpec.groovy
+@@ -63,7 +63,12 @@ public class JavaVersionSpec extends Specification {
+         JavaVersion.toVersion("1.9.0-internal") == JavaVersion.VERSION_1_9
+         JavaVersion.toVersion("1.9.0-ea") == JavaVersion.VERSION_1_9
+         JavaVersion.toVersion("9-ea") == JavaVersion.VERSION_1_9
++        JavaVersion.toVersion("9.0.0.15") == JavaVersion.VERSION_1_9
++        JavaVersion.toVersion("9.0.1") == JavaVersion.VERSION_1_9
++        JavaVersion.toVersion("9.1") == JavaVersion.VERSION_1_9
+ 
++        JavaVersion.toVersion("10.1") == JavaVersion.VERSION_1_10
++        JavaVersion.toVersion("10.1.2") == JavaVersion.VERSION_1_10
+         JavaVersion.toVersion("10-ea") == JavaVersion.VERSION_1_10
+         JavaVersion.toVersion("10-internal") == JavaVersion.VERSION_1_10
+     }
+@@ -98,10 +103,6 @@ public class JavaVersionSpec extends Specification {
+         conversionFails("1.54");
+         conversionFails("2.0");
+         conversionFails("1_4");
+-        conversionFails("8.1");
+-        conversionFails("9.1");
+-        conversionFails("9.0.0");
+-        conversionFails("10.1.2");
+ 
+         conversionFails("9-");
+         conversionFails("11-ea");

Reply via email to