Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

THRIFT-5553: java library to use newer gradle API #2561

Merged
merged 4 commits into from
May 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/java/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ plugins {
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"
}
Expand Down
16 changes: 8 additions & 8 deletions lib/java/gradle/environment.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,14 @@ repositories {
}

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}"
}
36 changes: 23 additions & 13 deletions lib/java/gradle/functionalTests.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,27 @@ sourceSets {
}
}

// 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
Expand All @@ -53,19 +65,17 @@ shadowJar {
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
Expand Down
4 changes: 1 addition & 3 deletions lib/js/test/build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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>

Expand Down
15 changes: 13 additions & 2 deletions lib/kotlin/cross-test-client/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,26 @@ repositories {
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 {
Expand Down
13 changes: 11 additions & 2 deletions lib/kotlin/cross-test-server/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,24 @@ repositories {
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 {
Expand Down
23 changes: 23 additions & 0 deletions lib/kotlin/gradle.properties
Original file line number Diff line number Diff line change
@@ -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
5 changes: 5 additions & 0 deletions tutorial/java/build.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Maven Ant tasks Jar details
mvn.ant.task.version=2.1.3
mvn.repo=https://repo1.maven.org/maven2
mvn.ant.task.url=${mvn.repo}/org/apache/maven/maven-ant-tasks/${mvn.ant.task.version}
mvn.ant.task.jar=maven-ant-tasks-${mvn.ant.task.version}.jar
47 changes: 43 additions & 4 deletions tutorial/java/build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,29 @@
specific language governing permissions and limitations
under the License.
-->
<project name="tutorial" default="tutorial" basedir=".">
<project name="tutorial" default="tutorial" basedir="."
xmlns:artifact="antlib:org.apache.maven.artifact.ant">

<description>Thrift Java Tutorial</description>

<property name="src" location="src" />
<property name="gen" location="gen-java" />
<property name="build" location="build" />
<property file="${basedir}/build.properties"/>

<!-- the root directory, where you unpack thrift distibution (e.g.: thrift-0.x.x.tar.gz) -->
<property name="thrift.dir" location="../.." />
<property name="thrift.java.dir" location="${thrift.dir}/lib/java" />
<property name="build.tools.dir" location="${thrift.java.dir}/build/tools/"/>

<path id="libs.classpath">
<fileset dir="../../lib/java/build/libs">
<fileset dir="${thrift.java.dir}/build/libs">
<include name="libthrift*.jar" />
<exclude name="libthrift*test.jar" />
<exclude name="libthrift*javadoc.jar" />
<exclude name="libthrift*sources.jar" />
</fileset>
<fileset dir="../../lib/java/build/deps">
<fileset dir="${build}/lib">
<include name="*.jar" />
</fileset>
</path>
Expand All @@ -47,11 +54,13 @@

<target name="init">
<tstamp />
<mkdir dir="${build.tools.dir}"/>
<mkdir dir="${build}"/>
<mkdir dir="${build}/log"/>
<mkdir dir="${build}/lib"/>
</target>

<target name="compile" depends="init, generate">
<target name="compile" depends="init, generate, resolve">
<javac compiler="modern" includeantruntime="false" srcdir="${gen}" destdir="${build}" classpathref="libs.classpath" />
<javac compiler="modern" includeantruntime="false" srcdir="${src}" destdir="${build}" classpathref="build.classpath" />
</target>
Expand Down Expand Up @@ -112,4 +121,34 @@
<delete file="tutorial.jar" />
</target>

<target name="mvn.ant.tasks.download" depends="init, mvn.ant.tasks.check" unless="mvn.ant.tasks.found">
<get src="${mvn.ant.task.url}/${mvn.ant.task.jar}" dest="${build.tools.dir}/${mvn.ant.task.jar}" usetimestamp="true"/>
</target>

<target name="mvn.ant.tasks.check">
<condition property="mvn.ant.tasks.found">
<typefound uri="antlib:org.apache.maven.artifact.ant" name="artifact"/>
</condition>
</target>

<target name="resolve" depends="mvn.ant.tasks.download" unless="mvn.finished">
<typedef uri="antlib:org.apache.maven.artifact.ant" classpath="${thrift.java.dir}/build/tools/${mvn.ant.task.jar}"/>

<artifact:dependencies filesetId="tutorial.dependency.jars">
<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>

<!-- Copy the dependencies to the build/lib dir -->
<copy todir="${build}/lib">
<fileset refid="tutorial.dependency.jars"/>
<mapper type="flatten"/>
</copy>

<property name="mvn.finished" value="true"/>
</target>

</project>
8 changes: 4 additions & 4 deletions tutorial/java/src/JavaClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ public static void main(String [] args) {
/*
* Similar to the server, you can use the parameters to setup client parameters or
* use the default settings. On the client side, you will need a TrustStore which
* contains the trusted certificate along with the public key.
* For this example it's a self-signed cert.
* contains the trusted certificate along with the public key.
* For this example it's a self-signed cert.
*/
TSSLTransportParameters params = new TSSLTransportParameters();
params.setTrustStore("../../lib/java/test/.truststore", "thrift", "SunX509", "JKS");
params.setTrustStore("../../lib/java/test/resources/.truststore", "thrift", "SunX509", "JKS");
/*
* Get a client transport instead of a server transport. The connection is opened on
* invocation of the factory method, no need to specifically call open()
Expand All @@ -67,7 +67,7 @@ public static void main(String [] args) {
transport.close();
} catch (TException x) {
x.printStackTrace();
}
}
}

private static void perform(Calculator.Client client) throws TException
Expand Down
10 changes: 5 additions & 5 deletions tutorial/java/src/JavaServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public static void main(String [] args) {
public void run() {
simple(processor);
}
};
};
Runnable secure = new Runnable() {
public void run() {
secure(processor);
Expand Down Expand Up @@ -81,19 +81,19 @@ public static void secure(Calculator.Processor processor) {
/*
* Use TSSLTransportParameters to setup the required SSL parameters. In this example
* we are setting the keystore and the keystore password. Other things like algorithms,
* cipher suites, client auth etc can be set.
* cipher suites, client auth etc can be set.
*/
TSSLTransportParameters params = new TSSLTransportParameters();
// The Keystore contains the private key
params.setKeyStore("../../lib/java/test/.keystore", "thrift", null, null);
params.setKeyStore("../../lib/java/test/resources/.keystore", "thrift", null, null);

/*
* Use any of the TSSLTransportFactory to get a server transport with the appropriate
* SSL configuration. You can use the default settings if properties are set in the command line.
* Ex: -Djavax.net.ssl.keyStore=.keystore and -Djavax.net.ssl.keyStorePassword=thrift
*
*
* Note: You need not explicitly call open(). The underlying server socket is bound on return
* from the factory class.
* from the factory class.
*/
TServerTransport serverTransport = TSSLTransportFactory.getServerSocket(9091, 0, null, params);
TServer server = new TSimpleServer(new Args(serverTransport).processor(processor));
Expand Down
5 changes: 5 additions & 0 deletions tutorial/js/build.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Maven Ant tasks Jar details
mvn.ant.task.version=2.1.3
mvn.repo=https://repo1.maven.org/maven2
mvn.ant.task.url=${mvn.repo}/org/apache/maven/maven-ant-tasks/${mvn.ant.task.version}
mvn.ant.task.jar=maven-ant-tasks-${mvn.ant.task.version}.jar
Loading