Skip to content

Commit

Permalink
THRIFT-5274: Enforce Java 8 compatibility
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
ctubbsii authored and Jens-G committed Feb 4, 2021
1 parent 518163a commit ebfa771
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/java/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
7 changes: 7 additions & 0 deletions lib/java/gradle/sourceConfiguration.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,20 @@ 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'

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')
}

Expand Down

0 comments on commit ebfa771

Please sign in to comment.