diff --git a/lib/java/Makefile.am b/lib/java/Makefile.am
index 1e1ee9b..1dd42a7 100644
--- a/lib/java/Makefile.am
+++ b/lib/java/Makefile.am
@@ -26,7 +26,7 @@
 		--console=plain
 
 install-exec-hook:
-	$(GRADLE) $(GRADLE_OPTS) install \
+	$(GRADLE) $(GRADLE_OPTS) publishToMavenLocal \
 		-Prelease=true \
 		-Pinstall.path=$(DESTDIR)$(JAVA_PREFIX) \
 		-Pinstall.javadoc.path=$(DESTDIR)$(docdir)/java \
@@ -51,7 +51,7 @@
 		--console=plain
 
 maven-publish:
-	$(GRADLE) $(GRADLE_OPTS) uploadArchives \
+	$(GRADLE) $(GRADLE_OPTS) publish \
 		-Prelease=true \
 		-Pthrift.version=$(PACKAGE_VERSION) \
 		--console=plain
diff --git a/lib/java/README.md b/lib/java/README.md
index 214ac90..d60dbb7 100644
--- a/lib/java/README.md
+++ b/lib/java/README.md
@@ -42,7 +42,7 @@
 the Gradle build system, which tends to be predominant amongst Java
 developers.
 
-Currently we use gradle 6.9.2 to build the Thrift Java source. The usual way to setup gradle
+Currently we use gradle 7.4.2 to build the Thrift Java source. The usual way to setup gradle
 project is to include the gradle-wrapper.jar in the project and then run the gradle wrapper to
 bootstrap setting up gradle binaries. However to avoid putting binary files into the source tree we
 have ignored the gradle wrapper files. You are expected to install it manually, as described in
@@ -50,13 +50,13 @@
 following this step (which is also done in the travis CI docker images):
 
 ```bash
-export GRADLE_VERSION="6.9.2"
+export GRADLE_VERSION="7.4.2"
 # install dependencies
 apt-get install -y --no-install-recommends openjdk-11-jdk-headless wget unzip
 # download gradle distribution
 wget https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip -q -O /tmp/gradle-$GRADLE_VERSION-bin.zip
 # check binary integrity
-echo "8b356fd8702d5ffa2e066ed0be45a023a779bba4dd1a68fd11bc2a6bdc981e8f  /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -
+echo "29e49b10984e585d8118b7d0bc452f944e386458df27371b49b4ac1dec4b7fda  /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -
 # unzip and install
 unzip -d /tmp /tmp/gradle-$GRADLE_VERSION-bin.zip
 mv /tmp/gradle-$GRADLE_VERSION /usr/local/gradle
@@ -103,7 +103,7 @@
 where other Maven or Gradle builds can reference it simply do this.
 
 ```bash
-gradle install
+gradle publishToMavenLocal
 ```
 
 The library will be placed in your home directory under .m2/repository
@@ -163,7 +163,7 @@
 make MavenPublish    -- This is for a CMake generated build
 ```
 
-The uploadArchives task in Gradle is preconfigured with all necessary details
+The `publish` task in Gradle is preconfigured with all necessary details
 to sign and publish the artifacts from the build to the Apache Maven staging
 repository. The task requires the following externally provided properties to
 authenticate to the repository and sign the artifacts. The preferred approach
@@ -190,7 +190,7 @@
 if needed the build artifacts and proceed to publish the results.
 
 ```bash
-gradle -Prelease=true uploadArchives
+gradle -Prelease=true publish
 ```
 
 It is also possible to override the target repository for the Maven Publication
@@ -205,7 +205,7 @@
 Or the same on the command line:
 
 ```bash
-gradle -Pmaven-repository-url=https://my.company.com/service/local/staging/deploy/maven2 -Prelease=true -Pthrift.version=0.11.0 uploadArchives
+gradle -Pmaven-repository-url=https://my.company.com/service/local/staging/deploy/maven2 -Prelease=true -Pthrift.version=0.11.0 publish
 ```
 
 
diff --git a/lib/java/build.gradle b/lib/java/build.gradle
index 3e750fd..8206411 100644
--- a/lib/java/build.gradle
+++ b/lib/java/build.gradle
@@ -37,11 +37,11 @@
 
 plugins {
     id 'java-library'
-    id 'maven'
+    id 'maven-publish'
     id 'signing'
     id 'com.github.johnrengelman.shadow' version '6.1.0'
     id "com.github.spotbugs" version "4.7.1"
-    id "com.diffplug.spotless" version "6.4.2"
+    id "com.diffplug.spotless" version "6.5.2"
 }
 
 description = 'Apache Thrift Java Library'
@@ -60,7 +60,6 @@
 // Keeping the rest of the build logic in functional named scripts for clarity
 apply from: 'gradle/environment.gradle'
 apply from: 'gradle/sourceConfiguration.gradle'
-apply from: 'gradle/additionalArtifacts.gradle'
 apply from: 'gradle/generateTestThrift.gradle'
 apply from: 'gradle/unitTests.gradle'
 apply from: 'gradle/cloverCoverage.gradle'
diff --git a/lib/java/gradle/additionalArtifacts.gradle b/lib/java/gradle/additionalArtifacts.gradle
deleted file mode 100644
index 201469d..0000000
--- a/lib/java/gradle/additionalArtifacts.gradle
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// Following Gradle best practices to keep build logic organized
-
-task sourcesJar(type: Jar, group: 'Build') {
-    description = 'Assembles a jar archive containing the main Java sources.'
-
-    classifier 'sources'
-    from sourceSets.main.allSource
-}
-
-task javadocJar(type: Jar, dependsOn: javadoc, group: 'Build') {
-    description = 'Assembles a jar archive containing the JavaDoc.'
-
-    classifier 'javadoc'
-    from javadoc.destinationDir
-}
-
-artifacts {
-    archives sourcesJar
-    archives javadocJar
-}
-
diff --git a/lib/java/gradle/codeQualityChecks.gradle b/lib/java/gradle/codeQualityChecks.gradle
index f633413..b8d13f9 100644
--- a/lib/java/gradle/codeQualityChecks.gradle
+++ b/lib/java/gradle/codeQualityChecks.gradle
@@ -39,8 +39,8 @@
 
 tasks.withType(Pmd) {
     reports {
-        html.enabled = true
-        xml.enabled = false
+        html.required = true
+        xml.required = false
     }
 }
 
diff --git a/lib/java/gradle/functionalTests.gradle b/lib/java/gradle/functionalTests.gradle
index e8a3e89..0c27078 100644
--- a/lib/java/gradle/functionalTests.gradle
+++ b/lib/java/gradle/functionalTests.gradle
@@ -67,7 +67,6 @@
     dependsOn 'generateRunnerScriptForClient', 'generateRunnerScriptForServer', 'generateRunnerScriptForNonblockingServer', 'generateRunnerScriptForTServletServer'
     archiveBaseName.set('functionalTest')
     destinationDirectory = file("$buildDir/functionalTestJar")
-    archiveClassifier.set(null)
     // We do not need a version number for this internal jar
     archiveVersion.set(null)
     // Bundle the complete set of unit test classes including generated code
diff --git a/lib/java/gradle/publishing.gradle b/lib/java/gradle/publishing.gradle
index 7be7de4..91f456a 100644
--- a/lib/java/gradle/publishing.gradle
+++ b/lib/java/gradle/publishing.gradle
@@ -27,7 +27,7 @@
     destinationDir = file(installPath)
 
     from jar
-    from configurations.compile
+    from configurations.implementation
 }
 
 task installJavadoc(type: Copy, group: 'Install', dependsOn: javadoc) {
@@ -38,84 +38,66 @@
     from javadoc.destinationDir
 }
 
-// This is not needed by Gradle builds but the remaining Ant builds seem to
-// need access to the generated test classes for Thrift unit tests so we
-// assist them to use it this way.
-task copyDependencies(type: Copy, group: 'Build') {
-    description = 'Copy runtime dependencies in a common location for other Ant based projects'
-    project.assemble.dependsOn it
-
-    destinationDir = file("$buildDir/deps")
-    from configurations.testRuntime
-    // exclude some very specific unit test dependencies
-    exclude '**/junit*.jar', '**/mockito*.jar', '**/hamcrest*.jar'
+java {
+    withJavadocJar()
+    withSourcesJar()
 }
 
-// ----------------------------------------------------------------------------
-// Allow this configuration to be shared between install and uploadArchives tasks
-def configurePom(pom) {
-    pom.project {
-        name 'Apache Thrift'
-        description 'Thrift is a software framework for scalable cross-language services development.'
-        packaging 'jar'
-        url 'http://thrift.apache.org'
-
-        scm {
-            url 'https://github.com/apache/thrift'
-            connection 'scm:git:https://github.com/apache/thrift.git'
-            developerConnection 'scm:git:git@github.com:apache/thrift.git'
-        }
-
-        licenses {
-            license {
-                name 'The Apache Software License, Version 2.0'
-                url "${project.license}"
-                distribution 'repo'
-            }
-        }
-
-        developers {
-            developer {
-                id 'dev'
-                name 'Apache Thrift Developers'
-                email 'dev@thrift.apache.org'
+publishing {
+    publications {
+        mavenJava(MavenPublication) {
+            artifactId = "libthrift"
+            // explicitly set 3 jars because calling "from components.java" will include shadow jar which isn't what we want
+            artifact jar
+            artifact sourcesJar
+            artifact javadocJar
+            pom {
+                name = 'Apache Thrift'
+                description = 'Thrift is a software framework for scalable cross-language services development.'
+                url = 'http://thrift.apache.org'
+                licenses {
+                    license {
+                        name = 'The Apache Software License, Version 2.0'
+                        url = "${project.license}"
+                        distribution = 'repo'
+                    }
+                }
+                developers {
+                    developer {
+                        id = 'dev'
+                        name = 'Apache Thrift Developers'
+                        email = 'dev@thrift.apache.org'
+                    }
+                }
+                scm {
+                    url = 'https://github.com/apache/thrift'
+                    connection = 'scm:git:https://github.com/apache/thrift.git'
+                    developerConnection = 'scm:git:git@github.com:apache/thrift.git'
+                }
             }
         }
     }
-
-    pom.whenConfigured {
-        // Fixup the scope for servlet-api to be 'provided' instead of 'compile'
-        dependencies.find { dep -> dep.groupId == 'javax.servlet' && dep.artifactId == 'javax.servlet-api' }.with {
-            if(it != null) {
-              // it.optional = true
-              it.scope = 'provided'
+    repositories {
+        maven {
+            url = mavenRepositoryUrl
+            if (project.hasProperty("mavenUser") && project.hasProperty("mavenPassword")) {
+                credentials {
+                    username = mavenUser
+                    password = mavenPassword
+                }
             }
         }
     }
 }
 
-install {
-    repositories.mavenInstaller {
-        configurePom(pom)
-    }
-}
-
-uploadArchives {
-    dependsOn test // make sure we run unit tests when publishing
-    repositories.mavenDeployer {
-        // signPom will silently do nothing when no signing information is provided
-        beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
-        repository(url: project.mavenRepositoryUrl) {
-            if (project.hasProperty('mavenUser') && project.hasProperty('mavenPassword')) {
-                authentication(userName: mavenUser, password: mavenPassword)
-            }
-        }
-        configurePom(pom)
-    }
-}
-
-// Signing configuration, optional, only when release and uploadArchives is activated
+// Signing configuration, optional, only when release and publish is activated
 signing {
-    required { !version.endsWith("SNAPSHOT") && gradle.taskGraph.hasTask("uploadArchives") }
-    sign configurations.archives
+    required { !version.endsWith("SNAPSHOT") && gradle.taskGraph.hasTask("publish") }
+    sign publishing.publications.mavenJava
+}
+
+javadoc {
+    if(JavaVersion.current().isJava9Compatible()) {
+        options.addBooleanOption('html5', true)
+    }
 }
diff --git a/lib/java/gradle/sourceConfiguration.gradle b/lib/java/gradle/sourceConfiguration.gradle
index 827e926..97ce1b9 100644
--- a/lib/java/gradle/sourceConfiguration.gradle
+++ b/lib/java/gradle/sourceConfiguration.gradle
@@ -70,7 +70,7 @@
             "Bundle-Description": "Apache Thrift library",
             "Bundle-License": "${project.license}",
             "Bundle-ActivationPolicy": "lazy",
-            "Export-Package": "${project.group}.async;uses:=\"${project.group}.protocol,${project.group}.transport,org.slf4j,${project.group}\";version=\"${version}\",${project.group}.protocol;uses:=\"${project.group}.transport,${project.group},${project.group}.scheme\";version=\"${version}\",${project.group}.server;uses:=\"${project.group}.transport,${project.group}.protocol,${project.group},org.slf4j,javax.servlet,javax.servlet.http\";version=\"${version}\",${project.group}.transport;uses:=\"${project.group}.protocol,${project.group},org.apache.http.client,org.apache.http.params,org.apache.http.entity,org.apache.http.client.methods,org.apache.http,org.slf4j,javax.net.ssl,javax.net,javax.security.sasl,javax.security.auth.callback\";version=\"${version}\",${project.group};uses:=\"${project.group}.protocol,${project.group}.async,${project.group}.server,${project.group}.transport,org.slf4j,org.apache.log4j,${project.group}.scheme\";version=\"${version}\",${project.group}.meta_data;uses:=\"${project.group}\";version=\"${version}\",${project.group}.scheme;uses:=\"${project.group}.protocol,${project.group}\";version=\"${version}\",${project.group}.annotation;version=\"${version}\"",
+            "Export-Package": "${project.group}.async;uses:=\"${project.group}.protocol,${project.group}.transport,org.slf4j,${project.group}\";version=\"${archiveVersion}\",${project.group}.protocol;uses:=\"${project.group}.transport,${project.group},${project.group}.scheme\";version=\"${archiveVersion}\",${project.group}.server;uses:=\"${project.group}.transport,${project.group}.protocol,${project.group},org.slf4j,javax.servlet,javax.servlet.http\";version=\"${archiveVersion}\",${project.group}.transport;uses:=\"${project.group}.protocol,${project.group},org.apache.http.client,org.apache.http.params,org.apache.http.entity,org.apache.http.client.methods,org.apache.http,org.slf4j,javax.net.ssl,javax.net,javax.security.sasl,javax.security.auth.callback\";version=\"${archiveVersion}\",${project.group};uses:=\"${project.group}.protocol,${project.group}.async,${project.group}.server,${project.group}.transport,org.slf4j,org.apache.log4j,${project.group}.scheme\";version=\"${archiveVersion}\",${project.group}.meta_data;uses:=\"${project.group}\";version=\"${archiveVersion}\",${project.group}.scheme;uses:=\"${project.group}.protocol,${project.group}\";version=\"${archiveVersion}\",${project.group}.annotation;version=\"${archiveVersion}\"",
             "Import-Package": "javax.net,javax.net.ssl,javax.security.auth.callback,javax.security.sasl,javax.servlet;resolution:=optional,javax.servlet.http;resolution:=optional,org.slf4j;resolution:=optional;version=\"[1.4,2)\",org.apache.http.client;resolution:=optional,org.apache.http.params;resolution:=optional,org.apache.http.entity;resolution:=optional,org.apache.http.client.methods;resolution:=optional,org.apache.http;resolution:=optional"
         ])
     }
diff --git a/lib/java/gradle/unitTests.gradle b/lib/java/gradle/unitTests.gradle
index 0f09aa9..db9ad82 100644
--- a/lib/java/gradle/unitTests.gradle
+++ b/lib/java/gradle/unitTests.gradle
@@ -44,14 +44,14 @@
 task deprecatedEqualityTest(type: JavaExec, group: 'Verification') {
     description = 'Run the non-JUnit test suite '
     classpath = sourceSets.test.runtimeClasspath
-    main 'org.apache.thrift.test.EqualityTest'
+    mainClass.set('org.apache.thrift.test.EqualityTest')
     markTaskDone(it)
 }
 
 task deprecatedJavaBeansTest(type: JavaExec, group: 'Verification') {
     description = 'Run the non-JUnit test suite '
     classpath = sourceSets.test.runtimeClasspath
-    main 'org.apache.thrift.test.JavaBeansTest'
+    mainClass.set('org.apache.thrift.test.JavaBeansTest')
     markTaskDone(it)
 }
 
diff --git a/lib/java/src/main/java/org/apache/thrift/server/TExtensibleServlet.java b/lib/java/src/main/java/org/apache/thrift/server/TExtensibleServlet.java
index 5773e9c..5c14100 100644
--- a/lib/java/src/main/java/org/apache/thrift/server/TExtensibleServlet.java
+++ b/lib/java/src/main/java/org/apache/thrift/server/TExtensibleServlet.java
@@ -99,7 +99,9 @@
     }
   }
 
-  /** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */
+  /**
+   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
+   */
   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
@@ -132,7 +134,9 @@
     }
   }
 
-  /** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */
+  /**
+   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
+   */
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
       throws ServletException, IOException {
diff --git a/lib/java/src/main/java/org/apache/thrift/server/TServlet.java b/lib/java/src/main/java/org/apache/thrift/server/TServlet.java
index 0f233fa..c025a49 100644
--- a/lib/java/src/main/java/org/apache/thrift/server/TServlet.java
+++ b/lib/java/src/main/java/org/apache/thrift/server/TServlet.java
@@ -28,7 +28,9 @@
 
   private final Collection<Map.Entry<String, String>> customHeaders;
 
-  /** @see HttpServlet#HttpServlet() */
+  /**
+   * @see HttpServlet#HttpServlet()
+   */
   public TServlet(
       TProcessor processor,
       TProtocolFactory inProtocolFactory,
@@ -40,12 +42,16 @@
     this.customHeaders = new ArrayList<Map.Entry<String, String>>();
   }
 
-  /** @see HttpServlet#HttpServlet() */
+  /**
+   * @see HttpServlet#HttpServlet()
+   */
   public TServlet(TProcessor processor, TProtocolFactory protocolFactory) {
     this(processor, protocolFactory, protocolFactory);
   }
 
-  /** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */
+  /**
+   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
+   */
   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
@@ -78,7 +84,9 @@
     }
   }
 
-  /** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */
+  /**
+   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
+   */
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
     doPost(request, response);
diff --git a/lib/java/src/main/java/org/apache/thrift/transport/AutoExpandingBufferWriteTransport.java b/lib/java/src/main/java/org/apache/thrift/transport/AutoExpandingBufferWriteTransport.java
index 741d629..4888481 100644
--- a/lib/java/src/main/java/org/apache/thrift/transport/AutoExpandingBufferWriteTransport.java
+++ b/lib/java/src/main/java/org/apache/thrift/transport/AutoExpandingBufferWriteTransport.java
@@ -80,7 +80,9 @@
     return buf;
   }
 
-  /** @return length of the buffer, including any front reserve */
+  /**
+   * @return length of the buffer, including any front reserve
+   */
   public int getLength() {
     return pos;
   }
diff --git a/lib/java/src/main/java/org/apache/thrift/transport/TIOStreamTransport.java b/lib/java/src/main/java/org/apache/thrift/transport/TIOStreamTransport.java
index edfd1f4..af745b8 100644
--- a/lib/java/src/main/java/org/apache/thrift/transport/TIOStreamTransport.java
+++ b/lib/java/src/main/java/org/apache/thrift/transport/TIOStreamTransport.java
@@ -125,7 +125,9 @@
     outputStream_ = os;
   }
 
-  /** @return false after close is called. */
+  /**
+   * @return false after close is called.
+   */
   public boolean isOpen() {
     return inputStream_ != null || outputStream_ != null;
   }
diff --git a/lib/java/src/main/java/org/apache/thrift/transport/sasl/FixedSizeHeaderReader.java b/lib/java/src/main/java/org/apache/thrift/transport/sasl/FixedSizeHeaderReader.java
index 4f90faf..b89484a 100644
--- a/lib/java/src/main/java/org/apache/thrift/transport/sasl/FixedSizeHeaderReader.java
+++ b/lib/java/src/main/java/org/apache/thrift/transport/sasl/FixedSizeHeaderReader.java
@@ -59,7 +59,9 @@
     return true;
   }
 
-  /** @return Size of the header. */
+  /**
+   * @return Size of the header.
+   */
   protected abstract int headerSize();
 
   /**
diff --git a/lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameHeaderReader.java b/lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameHeaderReader.java
index d618346..dd79bc4 100644
--- a/lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameHeaderReader.java
+++ b/lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameHeaderReader.java
@@ -41,7 +41,9 @@
    */
   byte[] toBytes();
 
-  /** @return true if this header has all its fields set. */
+  /**
+   * @return true if this header has all its fields set.
+   */
   boolean isComplete();
 
   /** Clear the header and make it available to read a new header. */
diff --git a/lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameReader.java b/lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameReader.java
index 1f5872c..5491ed8 100644
--- a/lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameReader.java
+++ b/lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameReader.java
@@ -86,27 +86,37 @@
     return payload.hasRemaining();
   }
 
-  /** @return header of the frame */
+  /**
+   * @return header of the frame
+   */
   public T getHeader() {
     return header;
   }
 
-  /** @return number of bytes of the header */
+  /**
+   * @return number of bytes of the header
+   */
   public int getHeaderSize() {
     return header.toBytes().length;
   }
 
-  /** @return byte array of the payload */
+  /**
+   * @return byte array of the payload
+   */
   public byte[] getPayload() {
     return payload.array();
   }
 
-  /** @return size of the payload */
+  /**
+   * @return size of the payload
+   */
   public int getPayloadSize() {
     return header.payloadSize();
   }
 
-  /** @return true if the reader has fully read a frame */
+  /**
+   * @return true if the reader has fully read a frame
+   */
   public boolean isComplete() {
     return !(payload == null || payload.hasRemaining());
   }
diff --git a/lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameWriter.java b/lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameWriter.java
index bae6d49..4af4aa0 100644
--- a/lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameWriter.java
+++ b/lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameWriter.java
@@ -113,7 +113,9 @@
     transport.write(frameBytes);
   }
 
-  /** @return true when no more data needs to be written out */
+  /**
+   * @return true when no more data needs to be written out
+   */
   public boolean isComplete() {
     return frameBytes == null || !frameBytes.hasRemaining();
   }
diff --git a/lib/java/src/main/java/org/apache/thrift/transport/sasl/NonblockingSaslHandler.java b/lib/java/src/main/java/org/apache/thrift/transport/sasl/NonblockingSaslHandler.java
index 2557a42..44862d2 100644
--- a/lib/java/src/main/java/org/apache/thrift/transport/sasl/NonblockingSaslHandler.java
+++ b/lib/java/src/main/java/org/apache/thrift/transport/sasl/NonblockingSaslHandler.java
@@ -123,17 +123,23 @@
     return nextPhase;
   }
 
-  /** @return underlying nonblocking socket */
+  /**
+   * @return underlying nonblocking socket
+   */
   public TNonblockingTransport getUnderlyingTransport() {
     return underlyingTransport;
   }
 
-  /** @return SaslServer instance */
+  /**
+   * @return SaslServer instance
+   */
   public SaslServer getSaslServer() {
     return saslPeer.getSaslServer();
   }
 
-  /** @return true if current phase is done. */
+  /**
+   * @return true if current phase is done.
+   */
   public boolean isCurrentPhaseDone() {
     return currentPhase != nextPhase;
   }
diff --git a/lib/java/src/main/java/org/apache/thrift/transport/sasl/SaslPeer.java b/lib/java/src/main/java/org/apache/thrift/transport/sasl/SaslPeer.java
index 9a9e733..83515b8 100644
--- a/lib/java/src/main/java/org/apache/thrift/transport/sasl/SaslPeer.java
+++ b/lib/java/src/main/java/org/apache/thrift/transport/sasl/SaslPeer.java
@@ -33,7 +33,9 @@
    */
   byte[] evaluate(byte[] negotiationMessage) throws TSaslNegotiationException;
 
-  /** @return true if authentication is done. */
+  /**
+   * @return true if authentication is done.
+   */
   boolean isAuthenticated();
 
   /**
diff --git a/lib/java/src/main/java/org/apache/thrift/transport/sasl/TSaslNegotiationException.java b/lib/java/src/main/java/org/apache/thrift/transport/sasl/TSaslNegotiationException.java
index 15c597e..9018e3a 100644
--- a/lib/java/src/main/java/org/apache/thrift/transport/sasl/TSaslNegotiationException.java
+++ b/lib/java/src/main/java/org/apache/thrift/transport/sasl/TSaslNegotiationException.java
@@ -40,12 +40,16 @@
     return error;
   }
 
-  /** @return Errory type plus the message. */
+  /**
+   * @return Errory type plus the message.
+   */
   public String getSummary() {
     return error.name() + ": " + getMessage();
   }
 
-  /** @return Summary and eventually the cause's message. */
+  /**
+   * @return Summary and eventually the cause's message.
+   */
   public String getDetails() {
     return getCause() == null
         ? getSummary()
diff --git a/lib/kotlin/build.gradle.kts b/lib/kotlin/build.gradle.kts
index 1f7711a..90b9e80 100644
--- a/lib/kotlin/build.gradle.kts
+++ b/lib/kotlin/build.gradle.kts
@@ -41,8 +41,10 @@
 }
 
 tasks {
-    ktfmt {
-        kotlinLangStyle()
+    if (JavaVersion.current().isJava11Compatible) {
+        ktfmt {
+            kotlinLangStyle()
+        }
     }
 
     test {
diff --git a/lib/kotlin/cross-test-client/build.gradle.kts b/lib/kotlin/cross-test-client/build.gradle.kts
index deda467..ff48eed 100644
--- a/lib/kotlin/cross-test-client/build.gradle.kts
+++ b/lib/kotlin/cross-test-client/build.gradle.kts
@@ -19,9 +19,9 @@
 
 plugins {
     kotlin("jvm")
-    id("com.ncorti.ktfmt.gradle")
     java
     application
+    id("com.ncorti.ktfmt.gradle")
 }
 
 repositories {
@@ -62,8 +62,10 @@
         mainClass.set("org.apache.thrift.test.TestClientKt")
     }
 
-    ktfmt {
-        kotlinLangStyle()
+    if (JavaVersion.current().isJava11Compatible) {
+        ktfmt {
+            kotlinLangStyle()
+        }
     }
 
     task<Exec>("compileThrift") {
diff --git a/lib/kotlin/cross-test-client/src/main/kotlin/org/apache/thrift/test/TestClient.kt b/lib/kotlin/cross-test-client/src/main/kotlin/org/apache/thrift/test/TestClient.kt
index 28f9ffd..39500df 100644
--- a/lib/kotlin/cross-test-client/src/main/kotlin/org/apache/thrift/test/TestClient.kt
+++ b/lib/kotlin/cross-test-client/src/main/kotlin/org/apache/thrift/test/TestClient.kt
@@ -77,30 +77,27 @@
 }
 
 class TestClient : CliktCommand() {
-    private val host: String by option(help = "The cross test host to connect to")
-        .default("localhost")
+    private val host: String by
+        option(help = "The cross test host to connect to").default("localhost")
     private val port: Int by option(help = "The cross test port to connect to").int().default(9090)
-    private val numTests: Int by option("--testloops", "--n", help = "Number of runs in this test")
-        .int()
-        .default(1)
-    private val protocolType: ProtocolType by option("--protocol", help = "Protocol type")
-        .enum<ProtocolType> { it.key }
-        .default(ProtocolType.Binary)
-    private val transportType: TransportType by option("--transport", help = "Transport type")
-        .enum<TransportType> { it.key }
-        .default(TransportType.Buffered)
-    private val useHttpClient: Boolean by option("--client", help = "Use http client")
-        .flag(default = false)
-    private val useSSL: Boolean by option("--ssl", help = "Use SSL for encrypted transport")
-        .flag(default = false)
-    private val useZlib: Boolean by option(
-            "--zlib",
-            help = "Use zlib wrapper for compressed transport"
-        )
-        .flag(default = false)
-    private val socketTimeout: Int by option("--timeout", help = "Socket timeout")
-        .int()
-        .default(1000)
+    private val numTests: Int by
+        option("--testloops", "--n", help = "Number of runs in this test").int().default(1)
+    private val protocolType: ProtocolType by
+        option("--protocol", help = "Protocol type")
+            .enum<ProtocolType> { it.key }
+            .default(ProtocolType.Binary)
+    private val transportType: TransportType by
+        option("--transport", help = "Transport type")
+            .enum<TransportType> { it.key }
+            .default(TransportType.Buffered)
+    private val useHttpClient: Boolean by
+        option("--client", help = "Use http client").flag(default = false)
+    private val useSSL: Boolean by
+        option("--ssl", help = "Use SSL for encrypted transport").flag(default = false)
+    private val useZlib: Boolean by
+        option("--zlib", help = "Use zlib wrapper for compressed transport").flag(default = false)
+    private val socketTimeout: Int by
+        option("--timeout", help = "Socket timeout").int().default(1000)
 
     private fun createProtocol(transport: TTransport): TProtocol =
         when (protocolType) {
diff --git a/lib/kotlin/cross-test-server/build.gradle.kts b/lib/kotlin/cross-test-server/build.gradle.kts
index 508b29d..eda1ebd 100644
--- a/lib/kotlin/cross-test-server/build.gradle.kts
+++ b/lib/kotlin/cross-test-server/build.gradle.kts
@@ -19,9 +19,9 @@
 
 plugins {
     kotlin("jvm")
-    id("com.ncorti.ktfmt.gradle")
     java
     application
+    id("com.ncorti.ktfmt.gradle")
 }
 
 repositories {
@@ -60,8 +60,10 @@
         mainClass.set("org.apache.thrift.test.TestServerKt")
     }
 
-    ktfmt {
-        kotlinLangStyle()
+    if (JavaVersion.current().isJava11Compatible) {
+        ktfmt {
+            kotlinLangStyle()
+        }
     }
 
     task<Exec>("compileThrift") {
diff --git a/lib/kotlin/cross-test-server/src/main/kotlin/org/apache/thrift/test/TestServer.kt b/lib/kotlin/cross-test-server/src/main/kotlin/org/apache/thrift/test/TestServer.kt
index d9c0c86..566e53d 100644
--- a/lib/kotlin/cross-test-server/src/main/kotlin/org/apache/thrift/test/TestServer.kt
+++ b/lib/kotlin/cross-test-server/src/main/kotlin/org/apache/thrift/test/TestServer.kt
@@ -167,17 +167,18 @@
 
 class TestServerCommand : CliktCommand() {
     private val port: Int by option(help = "The cross test port to connect to").int().default(9090)
-    private val protocolType: ProtocolType by option("--protocol", help = "Protocol type")
-        .enum<ProtocolType> { it.key }
-        .default(ProtocolType.Binary)
-    private val transportType: TransportType by option("--transport", help = "Transport type")
-        .enum<TransportType> { it.key }
-        .default(TransportType.Buffered)
-    private val serverType: ServerType by option("--server-type")
-        .enum<ServerType> { it.key }
-        .default(ServerType.NonBlocking)
-    private val useSSL: Boolean by option("--ssl", help = "Use SSL for encrypted transport")
-        .flag(default = false)
+    private val protocolType: ProtocolType by
+        option("--protocol", help = "Protocol type")
+            .enum<ProtocolType> { it.key }
+            .default(ProtocolType.Binary)
+    private val transportType: TransportType by
+        option("--transport", help = "Transport type")
+            .enum<TransportType> { it.key }
+            .default(TransportType.Buffered)
+    private val serverType: ServerType by
+        option("--server-type").enum<ServerType> { it.key }.default(ServerType.NonBlocking)
+    private val useSSL: Boolean by
+        option("--ssl", help = "Use SSL for encrypted transport").flag(default = false)
     private val stringLimit: Long by option("--string-limit").long().default(-1)
     private val containerLimit: Long by option("--container-limit").long().default(-1)
 
diff --git a/lib/kotlin/settings.gradle.kts b/lib/kotlin/settings.gradle.kts
index a6bdbbc..2eff402 100644
--- a/lib/kotlin/settings.gradle.kts
+++ b/lib/kotlin/settings.gradle.kts
@@ -18,8 +18,15 @@
  */
 pluginManagement {
     plugins {
-        kotlin("jvm") version "1.5.31"
-        id("com.ncorti.ktfmt.gradle") version "0.4.0"
+        kotlin("jvm") version "1.6.10"
+        // per https://github.com/cortinico/ktfmt-gradle/tags the latest version requires Gradle 7.4 which in turn
+        // requires Java 11, failing the xenial build which is still on Java 8. Here we both configure the plugin
+        // but with different version, and only enabling ktfmt configure for Java 11+, to make the legacy build happy
+        if (JavaVersion.current().isJava11Compatible) {
+            id("com.ncorti.ktfmt.gradle") version "0.8.0"
+        } else {
+            id("com.ncorti.ktfmt.gradle") version "0.5.0"
+        }
     }
 }
 
