summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiayu Liu <Jimexist@users.noreply.github.com>2022-05-12 00:20:37 +0800
committerGitHub <noreply@github.com>2022-05-11 12:20:37 -0400
commit5b158389b01d028e98e59f0ea41c01d625a84242 (patch)
tree7f8da5c4f388d25f9949952bb566baf6b6fdb1a2
parentdae1437ca03834527b654cf5bc8d7f41c9412a20 (diff)
downloadthrift-5b158389b01d028e98e59f0ea41c01d625a84242.tar.gz
THRIFT-5581: use gradle 7 for java/kotlin (#2601)
* upgrade gradle version to 7.4 * migrate from `maven` plugin to `maven-publish` plugin as required for Gradle 7 * add guard to ktfmt, since it can't run with JDK 8 Co-authored-by: Christopher Tubbs <ctubbsii@apache.org>
-rw-r--r--.github/workflows/build.yml5
-rw-r--r--build/docker/ubuntu-bionic/Dockerfile4
-rw-r--r--build/docker/ubuntu-disco/Dockerfile4
-rw-r--r--build/docker/ubuntu-xenial/Dockerfile4
-rw-r--r--doc/install/debian.md2
-rw-r--r--lib/java/Makefile.am4
-rw-r--r--lib/java/README.md14
-rw-r--r--lib/java/build.gradle5
-rw-r--r--lib/java/gradle/additionalArtifacts.gradle40
-rw-r--r--lib/java/gradle/codeQualityChecks.gradle4
-rw-r--r--lib/java/gradle/functionalTests.gradle1
-rw-r--r--lib/java/gradle/publishing.gradle118
-rw-r--r--lib/java/gradle/sourceConfiguration.gradle2
-rw-r--r--lib/java/gradle/unitTests.gradle4
-rw-r--r--lib/java/src/main/java/org/apache/thrift/server/TExtensibleServlet.java8
-rw-r--r--lib/java/src/main/java/org/apache/thrift/server/TServlet.java16
-rw-r--r--lib/java/src/main/java/org/apache/thrift/transport/AutoExpandingBufferWriteTransport.java4
-rw-r--r--lib/java/src/main/java/org/apache/thrift/transport/TIOStreamTransport.java4
-rw-r--r--lib/java/src/main/java/org/apache/thrift/transport/sasl/FixedSizeHeaderReader.java4
-rw-r--r--lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameHeaderReader.java4
-rw-r--r--lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameReader.java20
-rw-r--r--lib/java/src/main/java/org/apache/thrift/transport/sasl/FrameWriter.java4
-rw-r--r--lib/java/src/main/java/org/apache/thrift/transport/sasl/NonblockingSaslHandler.java12
-rw-r--r--lib/java/src/main/java/org/apache/thrift/transport/sasl/SaslPeer.java4
-rw-r--r--lib/java/src/main/java/org/apache/thrift/transport/sasl/TSaslNegotiationException.java8
-rw-r--r--lib/kotlin/build.gradle.kts6
-rw-r--r--lib/kotlin/cross-test-client/build.gradle.kts8
-rw-r--r--lib/kotlin/cross-test-client/src/main/kotlin/org/apache/thrift/test/TestClient.kt43
-rw-r--r--lib/kotlin/cross-test-server/build.gradle.kts8
-rw-r--r--lib/kotlin/cross-test-server/src/main/kotlin/org/apache/thrift/test/TestServer.kt23
-rw-r--r--lib/kotlin/settings.gradle.kts11
31 files changed, 197 insertions, 201 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index d1afc3383..a9698d7e2 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -52,7 +52,7 @@ jobs:
needs: compiler
runs-on: ubuntu-20.04
env:
- GRADLE_VERSION: 6.9.2
+ GRADLE_VERSION: 7.4.2
steps:
- uses: actions/checkout@v3
@@ -71,7 +71,7 @@ jobs:
- name: Setup gradle
run: |
wget https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip -q -O /tmp/gradle-$GRADLE_VERSION-bin.zip
- (echo "8b356fd8702d5ffa2e066ed0be45a023a779bba4dd1a68fd11bc2a6bdc981e8f /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -)
+ (echo "29e49b10984e585d8118b7d0bc452f944e386458df27371b49b4ac1dec4b7fda /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -)
unzip -d /tmp /tmp/gradle-$GRADLE_VERSION-bin.zip
sudo mv /tmp/gradle-$GRADLE_VERSION /usr/local/gradle
sudo ln -s /usr/local/gradle/bin/gradle /usr/local/bin
@@ -131,6 +131,7 @@ jobs:
- name: Run make for java
run: make -C lib/java
+ # this will invoke publishToMavenLocal and install locally
- name: Run make install for java
run: make -C lib/java install
diff --git a/build/docker/ubuntu-bionic/Dockerfile b/build/docker/ubuntu-bionic/Dockerfile
index 134d3ef56..4518df7d5 100644
--- a/build/docker/ubuntu-bionic/Dockerfile
+++ b/build/docker/ubuntu-bionic/Dockerfile
@@ -149,7 +149,7 @@ RUN apt-get install -y --no-install-recommends \
haxelib setup --always /usr/share/haxe/lib && \
haxelib install --always hxcpp 2>&1 > /dev/null
-ENV GRADLE_VERSION="6.9.2"
+ENV GRADLE_VERSION="7.4.2"
RUN apt-get install -y --no-install-recommends \
`# Java dependencies` \
ant \
@@ -158,7 +158,7 @@ RUN apt-get install -y --no-install-recommends \
openjdk-11-jdk-headless && \
`# Gradle` \
wget https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip -q -O /tmp/gradle-$GRADLE_VERSION-bin.zip && \
- (echo "8b356fd8702d5ffa2e066ed0be45a023a779bba4dd1a68fd11bc2a6bdc981e8f /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -) && \
+ (echo "29e49b10984e585d8118b7d0bc452f944e386458df27371b49b4ac1dec4b7fda /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -) && \
unzip -d /tmp /tmp/gradle-$GRADLE_VERSION-bin.zip && \
mv /tmp/gradle-$GRADLE_VERSION /usr/local/gradle && \
ln -s /usr/local/gradle/bin/gradle /usr/local/bin
diff --git a/build/docker/ubuntu-disco/Dockerfile b/build/docker/ubuntu-disco/Dockerfile
index ac3d81653..c6598f74e 100644
--- a/build/docker/ubuntu-disco/Dockerfile
+++ b/build/docker/ubuntu-disco/Dockerfile
@@ -148,7 +148,7 @@ RUN apt-get install -y --no-install-recommends \
haxelib setup --always /usr/share/haxe/lib && \
haxelib install --always hxcpp 2>&1 > /dev/null
-ENV GRADLE_VERSION="6.9.2"
+ENV GRADLE_VERSION="7.4.2"
RUN apt-get install -y --no-install-recommends \
`# Java dependencies` \
ant \
@@ -157,7 +157,7 @@ RUN apt-get install -y --no-install-recommends \
openjdk-11-jdk-headless && \
`# Gradle` \
wget https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip -q -O /tmp/gradle-$GRADLE_VERSION-bin.zip && \
- (echo "8b356fd8702d5ffa2e066ed0be45a023a779bba4dd1a68fd11bc2a6bdc981e8f /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -) && \
+ (echo "29e49b10984e585d8118b7d0bc452f944e386458df27371b49b4ac1dec4b7fda /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -) && \
unzip -d /tmp /tmp/gradle-$GRADLE_VERSION-bin.zip && \
mv /tmp/gradle-$GRADLE_VERSION /usr/local/gradle && \
ln -s /usr/local/gradle/bin/gradle /usr/local/bin
diff --git a/build/docker/ubuntu-xenial/Dockerfile b/build/docker/ubuntu-xenial/Dockerfile
index 637fa2517..7c523b42f 100644
--- a/build/docker/ubuntu-xenial/Dockerfile
+++ b/build/docker/ubuntu-xenial/Dockerfile
@@ -155,7 +155,7 @@ RUN apt-get install -y --no-install-recommends \
haxelib install --always hxcpp 3.4.64 2>&1 > /dev/null
# note: hxcpp 3.4.185 (latest) no longer ships static libraries, and caused a build failure
-ENV GRADLE_VERSION="6.9.2"
+ENV GRADLE_VERSION="7.4.2"
RUN apt-get install -y --no-install-recommends \
`# Java dependencies` \
ant \
@@ -165,7 +165,7 @@ RUN apt-get install -y --no-install-recommends \
unzip && \
`# Gradle` \
wget https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip -q -O /tmp/gradle-$GRADLE_VERSION-bin.zip && \
- (echo "8b356fd8702d5ffa2e066ed0be45a023a779bba4dd1a68fd11bc2a6bdc981e8f /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -) && \
+ (echo "29e49b10984e585d8118b7d0bc452f944e386458df27371b49b4ac1dec4b7fda /tmp/gradle-$GRADLE_VERSION-bin.zip" | sha256sum -c -) && \
unzip -d /tmp /tmp/gradle-$GRADLE_VERSION-bin.zip && \
mv /tmp/gradle-$GRADLE_VERSION /usr/local/gradle && \
ln -s /usr/local/gradle/bin/gradle /usr/local/bin
diff --git a/doc/install/debian.md b/doc/install/debian.md
index 9be7265bd..0792252e9 100644
--- a/doc/install/debian.md
+++ b/doc/install/debian.md
@@ -18,7 +18,7 @@ Debian 7/Ubuntu 12 users need to manually install a more recent version of autom
If you would like to build Apache Thrift libraries for other programming languages you may need to install additional packages. The following languages require the specified additional packages:
* Java
- * packages: gradle (version 6.9.2)
+ * packages: gradle (version 7.4.2)
* You will also need Java JDK v1.8 or higher. Type **javac** to see a list of available packages, pick the one you prefer and **apt-get install** it (e.g. default-jdk).
* Ruby
* ruby-full ruby-dev ruby-rspec rake rubygems bundler
diff --git a/lib/java/Makefile.am b/lib/java/Makefile.am
index 1e1ee9b09..1dd42a7d2 100644
--- a/lib/java/Makefile.am
+++ b/lib/java/Makefile.am
@@ -26,7 +26,7 @@ all-local:
--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 @@ check-local: $(THRIFT)
--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 214ac90b8..d60dbb70e 100644
--- a/lib/java/README.md
+++ b/lib/java/README.md
@@ -42,7 +42,7 @@ The Thrift Java source is not build using the GNU tools, but rather uses
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 @@ the [gradle documentation](https://docs.gradle.org/current/userguide/installatio
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 @@ To install the library in the local Maven repository location
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 maven-publish -- This is for an Automake Linux build
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 @@ With the key information and credentials in place the following will generate
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 @@ maven-repository-url=https://my.company.com/service/local/staging/deploy/maven2
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 3e750fddc..82064114b 100644
--- a/lib/java/build.gradle
+++ b/lib/java/build.gradle
@@ -37,11 +37,11 @@ buildscript {
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 @@ if (Boolean.parseBoolean(project.release)) {
// 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 201469da1..000000000
--- 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 f633413cd..b8d13f959 100644
--- a/lib/java/gradle/codeQualityChecks.gradle
+++ b/lib/java/gradle/codeQualityChecks.gradle
@@ -39,8 +39,8 @@ pmd {
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 e8a3e8955..0c27078d0 100644
--- a/lib/java/gradle/functionalTests.gradle
+++ b/lib/java/gradle/functionalTests.gradle
@@ -67,7 +67,6 @@ shadowJar {
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 7be7de40e..91f456add 100644
--- a/lib/java/gradle/publishing.gradle
+++ b/lib/java/gradle/publishing.gradle
@@ -27,7 +27,7 @@ task installDist(type: Copy, group: 'Install') {
destinationDir = file(installPath)
from jar
- from configurations.compile
+ from configurations.implementation
}
task installJavadoc(type: Copy, group: 'Install', dependsOn: javadoc) {
@@ -38,84 +38,66 @@ task installJavadoc(type: Copy, group: 'Install', dependsOn: javadoc) {
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)
- }
+// Signing configuration, optional, only when release and publish is activated
+signing {
+ required { !version.endsWith("SNAPSHOT") && gradle.taskGraph.hasTask("publish") }
+ sign publishing.publications.mavenJava
}
-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)
+javadoc {
+ if(JavaVersion.current().isJava9Compatible()) {
+ options.addBooleanOption('html5', true)
}
}
-
-// Signing configuration, optional, only when release and uploadArchives is activated
-signing {
- required { !version.endsWith("SNAPSHOT") && gradle.taskGraph.hasTask("uploadArchives") }
- sign configurations.archives
-}
diff --git a/lib/java/gradle/sourceConfiguration.gradle b/lib/java/gradle/sourceConfiguration.gradle
index 827e926d4..97ce1b9a2 100644
--- a/lib/java/gradle/sourceConfiguration.gradle
+++ b/lib/java/gradle/sourceConfiguration.gradle
@@ -70,7 +70,7 @@ jar {
"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 0f09aa9cb..db9ad8294 100644
--- a/lib/java/gradle/unitTests.gradle
+++ b/lib/java/gradle/unitTests.gradle
@@ -44,14 +44,14 @@ ext.markTaskDone = { task ->
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 5773e9c3c..5c141000a 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 @@ public abstract class TExtensibleServlet extends HttpServlet {
}
}
- /** @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 @@ public abstract class TExtensibleServlet extends HttpServlet {
}
}
- /** @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 0f233fac4..c025a498e 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 @@ public class TServlet extends HttpServlet {
private final Collection<Map.Entry<String, String>> customHeaders;
- /** @see HttpServlet#HttpServlet() */
+ /**
+ * @see HttpServlet#HttpServlet()
+ */
public TServlet(
TProcessor processor,
TProtocolFactory inProtocolFactory,
@@ -40,12 +42,16 @@ public class TServlet extends HttpServlet {
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 @@ public class TServlet extends HttpServlet {
}
}
- /** @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 741d629ae..4888481f0 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 @@ public final class AutoExpandingBufferWriteTransport extends TEndpointTransport
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 edfd1f414..af745b8b5 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 @@ public class TIOStreamTransport extends TEndpointTransport {
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 4f90faf85..b89484ab3 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 @@ public abstract class FixedSizeHeaderReader implements FrameHeaderReader {
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 d618346a4..dd79bc42a 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 @@ public interface FrameHeaderReader {
*/
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 1f5872c30..5491ed8e1 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 @@ public abstract class FrameReader<T extends FrameHeaderReader> {
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 bae6d4999..4af4aa099 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 @@ public abstract class FrameWriter {
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 2557a4285..44862d2c9 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 @@ public class NonblockingSaslHandler {
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 9a9e733da..83515b87c 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 @@ public interface SaslPeer {
*/
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 15c597e13..9018e3a7b 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 @@ public class TSaslNegotiationException extends TTransportException {
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 1f7711a5a..90b9e80d6 100644
--- a/lib/kotlin/build.gradle.kts
+++ b/lib/kotlin/build.gradle.kts
@@ -41,8 +41,10 @@ kotlin {
}
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 deda4671c..ff48eed4c 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 @@ tasks {
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 28f9ffd5e..39500dfbb 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 @@ enum class TransportType(val key: String) {
}
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 508b29d1f..eda1ebd0c 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 @@ tasks {
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 d9c0c860c..566e53dac 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 @@ enum class TransportType(val key: String) {
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 a6bdbbca6..2eff40294 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"
+ }
}
}