You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by je...@apache.org on 2021/02/04 21:11:39 UTC

[thrift] branch master updated: THRIFT-5274: Enforce Java 8 compatibility Client: Java Patch: Christopher Tubbs

This is an automated email from the ASF dual-hosted git repository.

jensg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/thrift.git


The following commit(s) were added to refs/heads/master by this push:
     new ebfa771  THRIFT-5274: Enforce Java 8 compatibility Client: Java Patch: Christopher Tubbs
ebfa771 is described below

commit ebfa771a26e406da947f72ae8d87602c892435cc
Author: Christopher Tubbs <ct...@apache.org>
AuthorDate: Thu Feb 4 14:13:24 2021 -0500

    THRIFT-5274: Enforce Java 8 compatibility
    Client: Java
    Patch: Christopher Tubbs
    
    This closes #2325
    
    * Enforce Java 8 compatibility using the new `--release` flag introduced
      in JDK9, so that all generated bytecode follows Java 8 strict
      compatibility, even when building with newer JDK versions (9 or later)
      (this fixes NoSuchMethodError with ByteBuffer, and other potential
      incompatibilities in bytecode generation that would make the code
      unable to run on a Java 8 JRE)
    * Also strictly enforce the JDK version used to build the project by
      ensuring it is at least version 1.8, and will fail fast when building
      the Java libraries if this condition is not met.
---
 lib/java/build.gradle                      | 5 +++++
 lib/java/gradle/sourceConfiguration.gradle | 7 +++++++
 2 files changed, 12 insertions(+)

diff --git a/lib/java/build.gradle b/lib/java/build.gradle
index 9184f7b..57a8e1e 100644
--- a/lib/java/build.gradle
+++ b/lib/java/build.gradle
@@ -19,6 +19,11 @@
 
 // Using the legacy plugin classpath for Clover so it can be loaded optionally
 buildscript {
+    // strictly enforce the minimum version of Java required to build and fail fast
+    if (JavaVersion.current() < JavaVersion.VERSION_1_8) {
+        throw new GradleException("The java version used is ${JavaVersion.current()}, but must be at least ${JavaVersion.VERSION_1_8}")
+    }
+
     repositories {
         mavenCentral()
         google()
diff --git a/lib/java/gradle/sourceConfiguration.gradle b/lib/java/gradle/sourceConfiguration.gradle
index 07c2a7f..d15c117 100644
--- a/lib/java/gradle/sourceConfiguration.gradle
+++ b/lib/java/gradle/sourceConfiguration.gradle
@@ -46,6 +46,9 @@ sourceSets {
 // ----------------------------------------------------------------------------
 // Compiler configuration details
 
+// These two properties are still needed on JDK8, and possibly used directly by
+// plugins. However, the '--release' option added below makes these two
+// properties redundant when building with JDK9 or later.
 sourceCompatibility = '1.8'
 targetCompatibility = '1.8'
 
@@ -53,6 +56,10 @@ tasks.withType(JavaCompile) {
     options.encoding = 'UTF-8'
     options.debug = true
     options.deprecation = true
+    // the following is to build with Java 8 specifications, even when building with JDK9 or later
+    if (JavaVersion.current() > JavaVersion.VERSION_1_8) {
+        options.compilerArgs.addAll(['--release', '8'])
+    }
     // options.compilerArgs.addAll('-Xlint:unchecked')
 }