THRIFT-5553: use newer gradle API (#2561)

Prepare for moving to Gradle 7 by removing use of older Gradle directives
(except the use of maven; the transition to maven-publish is not included here)
diff --git a/lib/java/build.gradle b/lib/java/build.gradle
index 726d7b7..3e750fd 100644
--- a/lib/java/build.gradle
+++ b/lib/java/build.gradle
@@ -39,7 +39,7 @@
     id 'java-library'
     id 'maven'
     id 'signing'
-    id 'com.github.johnrengelman.shadow' version '4.0.4'
+    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"
 }
diff --git a/lib/java/gradle/environment.gradle b/lib/java/gradle/environment.gradle
index 2f49a0d..224f10f 100644
--- a/lib/java/gradle/environment.gradle
+++ b/lib/java/gradle/environment.gradle
@@ -64,14 +64,14 @@
 }
 
 dependencies {
-    compile "org.slf4j:slf4j-api:${slf4jVersion}"
-    compile "org.apache.httpcomponents:httpclient:${httpclientVersion}"
-    compile "org.apache.httpcomponents:httpcore:${httpcoreVersion}"
-    compile "javax.servlet:javax.servlet-api:${servletVersion}"
-    compile "javax.annotation:javax.annotation-api:${javaxAnnotationVersion}"
-    compile "org.apache.commons:commons-lang3:3.12.0"
+    implementation "org.slf4j:slf4j-api:${slf4jVersion}"
+    implementation "org.apache.httpcomponents:httpclient:${httpclientVersion}"
+    implementation "org.apache.httpcomponents:httpcore:${httpcoreVersion}"
+    implementation "javax.servlet:javax.servlet-api:${servletVersion}"
+    implementation "javax.annotation:javax.annotation-api:${javaxAnnotationVersion}"
+    implementation "org.apache.commons:commons-lang3:3.12.0"
 
     testImplementation "org.junit.jupiter:junit-jupiter:${junitVersion}"
-    testCompile "org.mockito:mockito-all:${mockitoVersion}"
-    testRuntime "org.slf4j:slf4j-log4j12:${slf4jVersion}"
+    testImplementation "org.mockito:mockito-all:${mockitoVersion}"
+    testRuntimeOnly "org.slf4j:slf4j-log4j12:${slf4jVersion}"
 }
diff --git a/lib/java/gradle/functionalTests.gradle b/lib/java/gradle/functionalTests.gradle
index 15737f5..e8a3e89 100644
--- a/lib/java/gradle/functionalTests.gradle
+++ b/lib/java/gradle/functionalTests.gradle
@@ -34,15 +34,27 @@
     }
 }
 
+// see https://docs.gradle.org/current/userguide/java_library_plugin.html
+// 1. defines cross test implementation that includes all test implementation, which in turn
+//    contains all implementation dependencies
+// 2. defines cross test runtime that further includes test runtime only dependencies
+// 3. the cross test implementation will need to depends on main and test output
+// 4. shadow jar will package both main and test source set, along with cross test runtime dependencies
 configurations {
-    crossTestCompile { extendsFrom testCompile }
-    crossTestRuntime { extendsFrom crossTestCompile, testRuntime }
+    crossTestImplementation {
+        description "implementation for cross test"
+        extendsFrom testImplementation
+    }
+    crossTestRuntime {
+        description "runtime dependencies for cross test"
+        extendsFrom crossTestImplementation, testRuntimeOnly
+    }
 }
 
 dependencies {
-    crossTestCompile "org.apache.tomcat.embed:tomcat-embed-core:${tomcatEmbedVersion}"
-    crossTestCompile sourceSets.main.output
-    crossTestCompile sourceSets.test.output
+    crossTestImplementation "org.apache.tomcat.embed:tomcat-embed-core:${tomcatEmbedVersion}"
+    crossTestImplementation sourceSets.main.output
+    crossTestImplementation sourceSets.test.output
 }
 
 // I am using shadow plugin to make a self contained functional test Uber JAR that
@@ -53,19 +65,17 @@
     description = 'Assemble a test JAR file for cross-check execution'
     // make sure the runners are created when this runs
     dependsOn 'generateRunnerScriptForClient', 'generateRunnerScriptForServer', 'generateRunnerScriptForNonblockingServer', 'generateRunnerScriptForTServletServer'
-
-    baseName = 'functionalTest'
-    destinationDir = file("$buildDir/functionalTestJar")
-    classifier = null
-
+    archiveBaseName.set('functionalTest')
+    destinationDirectory = file("$buildDir/functionalTestJar")
+    archiveClassifier.set(null)
     // We do not need a version number for this internal jar
-    version = null
-
+    archiveVersion.set(null)
     // Bundle the complete set of unit test classes including generated code
     // and the runtime dependencies in one JAR to expedite execution.
+    // see https://imperceptiblethoughts.com/shadow/custom-tasks/
     from sourceSets.test.output
     from sourceSets.crossTest.output
-    configurations = [project.configurations.testRuntime]
+    configurations = [project.configurations.crossTestRuntime]
 }
 
 // Common script runner configuration elements
diff --git a/lib/js/test/build.xml b/lib/js/test/build.xml
index 833e5bd..db85012 100755
--- a/lib/js/test/build.xml
+++ b/lib/js/test/build.xml
@@ -45,9 +45,6 @@
       <exclude name="libthrift*javadoc.jar" />
       <exclude name="libthrift*sources.jar" />
     </fileset>
-    <fileset dir="${thrift.java.dir}/build/deps">
-      <include name="*.jar" />
-    </fileset>
     <fileset dir="${build}/lib">
       <include name="*.jar" />
     </fileset>
@@ -235,6 +232,7 @@
       <dependency groupId="org.apache.httpcomponents" artifactId="httpclient" version="4.0.1"/>
       <dependency groupId="com.googlecode.jslint4java" artifactId="jslint4java-ant" version="1.4.6"/>
       <dependency groupId="eu.medsea.mimeutil" artifactId="mime-util" version="2.1.3"/>
+      <dependency groupId="javax.annotation" artifactId="javax.annotation-api" version="1.3.2"/>
       <remoteRepository url="${mvn.repo}"/>
     </artifact:dependencies>
 
diff --git a/lib/kotlin/cross-test-client/build.gradle.kts b/lib/kotlin/cross-test-client/build.gradle.kts
index e5f87dd..5090de9 100644
--- a/lib/kotlin/cross-test-client/build.gradle.kts
+++ b/lib/kotlin/cross-test-client/build.gradle.kts
@@ -28,15 +28,26 @@
     mavenCentral()
 }
 
+val slf4jVersion: String by project
+val httpclientVersion: String by project
+val httpcoreVersion: String by project
+val logbackVersion: String by project
+val kotlinxCoroutinesJdk8Version: String by project
+
 dependencies {
     implementation(platform("org.jetbrains.kotlin:kotlin-bom"))
     implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
     // https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-jdk8
-    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.1")
+    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:$kotlinxCoroutinesJdk8Version")
     // https://mvnrepository.com/artifact/org.apache.thrift/libthrift
     implementation("org.apache.thrift:libthrift:INCLUDED")
+    implementation("org.slf4j:slf4j-api:$slf4jVersion")
+    implementation("org.apache.httpcomponents:httpclient:$httpclientVersion")
+    implementation("org.apache.httpcomponents:httpcore:$httpcoreVersion")
     // https://mvnrepository.com/artifact/ch.qos.logback/logback-classic
-    implementation("ch.qos.logback:logback-classic:1.3.0-alpha14")
+    implementation("ch.qos.logback:logback-classic:$logbackVersion")
+    testImplementation("org.jetbrains.kotlin:kotlin-test")
+    testImplementation("org.jetbrains.kotlin:kotlin-test-junit")
 }
 
 tasks {
diff --git a/lib/kotlin/cross-test-server/build.gradle.kts b/lib/kotlin/cross-test-server/build.gradle.kts
index 8a654d9..2246fae 100644
--- a/lib/kotlin/cross-test-server/build.gradle.kts
+++ b/lib/kotlin/cross-test-server/build.gradle.kts
@@ -28,15 +28,24 @@
     mavenCentral()
 }
 
+val slf4jVersion: String by project
+val httpcoreVersion: String by project
+val logbackVersion: String by project
+val kotlinxCoroutinesJdk8Version: String by project
+
 dependencies {
     implementation(platform("org.jetbrains.kotlin:kotlin-bom"))
     implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
     // https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-jdk8
-    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.1")
+    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:$kotlinxCoroutinesJdk8Version")
     // https://mvnrepository.com/artifact/org.apache.thrift/libthrift
     implementation("org.apache.thrift:libthrift:INCLUDED")
+    implementation("org.slf4j:slf4j-api:$slf4jVersion")
+    implementation("org.apache.httpcomponents:httpcore:$httpcoreVersion")
     // https://mvnrepository.com/artifact/ch.qos.logback/logback-classic
-    implementation("ch.qos.logback:logback-classic:1.3.0-alpha14")
+    implementation("ch.qos.logback:logback-classic:$logbackVersion")
+    testImplementation("org.jetbrains.kotlin:kotlin-test")
+    testImplementation("org.jetbrains.kotlin:kotlin-test-junit")
 }
 
 tasks {
diff --git a/lib/kotlin/gradle.properties b/lib/kotlin/gradle.properties
new file mode 100644
index 0000000..0cba9be
--- /dev/null
+++ b/lib/kotlin/gradle.properties
@@ -0,0 +1,23 @@
+#
+# 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.
+#
+slf4jVersion=1.7.35
+httpcoreVersion=4.4.15
+httpclientVersion=4.5.13
+logbackVersion=1.3.0-alpha14
+kotlinxCoroutinesJdk8Version=1.6.1