From b41605931785db473d8be15ece6221f8d69039cc Mon Sep 17 00:00:00 2001 From: Pradeep Nagaraju Date: Tue, 5 Oct 2021 18:39:38 -0700 Subject: [PATCH 1/5] - Building bookkeeper with gradle on java11 - Use gradle native solution for using javac rather than specifying it via command line in gradle --- build.gradle | 1 + .../main/resources/bookkeeper/checkstyle.xml | 2 +- circe-checksum/build.gradle | 4 +-- .../com/scurrilous/circe/crc/Sse42Crc32C.java | 25 ++++++++++++++----- cpu-affinity/build.gradle | 20 +++++++++------ .../util/affinity/impl/CpuAffinityJni.java | 1 - dependencies.gradle | 2 ++ stream/distributedlog/core/build.gradle | 1 + stream/proto/build.gradle | 1 + stream/server/build.gradle | 1 + stream/tests-common/build.gradle | 1 + 11 files changed, 42 insertions(+), 17 deletions(-) diff --git a/build.gradle b/build.gradle index 6bb45a614e9..6373c77877b 100644 --- a/build.gradle +++ b/build.gradle @@ -73,6 +73,7 @@ allprojects { checkstyle { toolVersion "${checkStyleVersion}" configFile file("$rootDir/buildtools/src/main/resources/bookkeeper/checkstyle.xml") + configDirectory = file("$rootDir/buildtools/src/main/resources/bookkeeper") checkstyleMain { source ='src/main/java' } diff --git a/buildtools/src/main/resources/bookkeeper/checkstyle.xml b/buildtools/src/main/resources/bookkeeper/checkstyle.xml index b79bfdd3f24..fda4fb619d6 100644 --- a/buildtools/src/main/resources/bookkeeper/checkstyle.xml +++ b/buildtools/src/main/resources/bookkeeper/checkstyle.xml @@ -60,7 +60,7 @@ page at http://checkstyle.sourceforge.net/config.html --> - + diff --git a/circe-checksum/build.gradle b/circe-checksum/build.gradle index 17258fee0b2..f469ef299a5 100644 --- a/circe-checksum/build.gradle +++ b/circe-checksum/build.gradle @@ -34,8 +34,8 @@ task generateJniHeaders(type:Exec) { } dependsOn classes def classpath = sourceSets.main.output.classesDirs.join(":") - commandLine("javah", "-d", javahOutputDir, "-classpath", - classpath, "com.scurrilous.circe.crc.Sse42Crc32C") + commandLine("javac", "-h", javahOutputDir, "-classpath", + classpath, "./src/main/java/com/scurrilous/circe/crc/Sse42Crc32C.java") } jar { diff --git a/circe-checksum/src/main/java/com/scurrilous/circe/crc/Sse42Crc32C.java b/circe-checksum/src/main/java/com/scurrilous/circe/crc/Sse42Crc32C.java index 22379a0e32d..70b7cf6b113 100644 --- a/circe-checksum/src/main/java/com/scurrilous/circe/crc/Sse42Crc32C.java +++ b/circe-checksum/src/main/java/com/scurrilous/circe/crc/Sse42Crc32C.java @@ -18,6 +18,7 @@ import static com.scurrilous.circe.utils.NativeUtils.loadLibraryFromJar; import static com.scurrilous.circe.utils.NativeUtils.libType; +import java.lang.ref.Cleaner; import java.nio.ByteBuffer; import com.scurrilous.circe.IncrementalIntHash; import com.scurrilous.circe.impl.AbstractIncrementalIntHash; @@ -54,6 +55,23 @@ public static boolean isSupported() { config = 0; } + // A cleaner similar to a finalizer(deprecated in java11) + private static final Cleaner cleaner = Cleaner.create(); + + static class State implements Runnable { + private final long config; + State(long config) { + // initialize State needed for cleaning action + this.config = config; + } + + public void run() { + // cleanup action accessing State, executed at most once + if (this.config != 0) + freeConfig(this.config); + } + } + public Sse42Crc32C(int[] chunkWords) { if (chunkWords.length == 0) { config = 0; @@ -62,12 +80,7 @@ public Sse42Crc32C(int[] chunkWords) { if (config == 0) throw new RuntimeException("CRC32C configuration allocation failed"); } - } - - @Override - protected void finalize() { - if (config != 0) - freeConfig(config); + cleaner.register(config, new State(config)); } @Override diff --git a/cpu-affinity/build.gradle b/cpu-affinity/build.gradle index 981fd6df381..706ce21d0f7 100644 --- a/cpu-affinity/build.gradle +++ b/cpu-affinity/build.gradle @@ -16,29 +16,35 @@ * specific language governing permissions and limitations * under the License. */ + plugins { id 'java' } dependencies { - compileOnly depLibs.lombok compileOnly depLibs.spotbugsAnnotations implementation depLibs.commonsLang3 implementation depLibs.guava implementation depLibs.slf4j testImplementation depLibs.junit - + compileOnly depLibs.lombok annotationProcessor depLibs.lombok + testCompileOnly depLibs.lombok + testAnnotationProcessor depLibs.lombok } -task generateJniHeaders(type:Exec) { +task generateJniHeaders(type: JavaCompile) { ext { javahOutputDir = "$buildDir/javahGenerated" } - dependsOn classes - def classpath = sourceSets.main.output.classesDirs.join(":") - commandLine("javah", "-d", javahOutputDir, "-classpath", - classpath, "org.apache.bookkeeper.common.util.affinity.impl.CpuAffinityJni") + classpath = sourceSets.main.compileClasspath + destinationDir file("${buildDir}/javahGenerated") + source = sourceSets.main.java + options.compilerArgs += [ + '-h', file("${buildDir}/javahGenerated"), + ] + + options.annotationProcessorPath = configurations.annotationProcessor } jar { diff --git a/cpu-affinity/src/main/java/org/apache/bookkeeper/common/util/affinity/impl/CpuAffinityJni.java b/cpu-affinity/src/main/java/org/apache/bookkeeper/common/util/affinity/impl/CpuAffinityJni.java index 30ee325bca4..ff1efc521cb 100644 --- a/cpu-affinity/src/main/java/org/apache/bookkeeper/common/util/affinity/impl/CpuAffinityJni.java +++ b/cpu-affinity/src/main/java/org/apache/bookkeeper/common/util/affinity/impl/CpuAffinityJni.java @@ -21,7 +21,6 @@ package org.apache.bookkeeper.common.util.affinity.impl; import java.io.IOException; - import lombok.experimental.UtilityClass; /** diff --git a/dependencies.gradle b/dependencies.gradle index 1f34a813a74..aee92d74d72 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -48,6 +48,7 @@ depVersions = [ hdrhistogram: "2.1.4", httpclient: "4.5.13", jackson: "2.11.1", + javaAnnotations:"1.3.2", jcommander: "1.78", jctools: "2.1.2", jetty: "9.4.31.v20200723", @@ -111,6 +112,7 @@ depLibs = [ hamcrest: "org.hamcrest:hamcrest-all:${depVersions.hamcrest}", httpclient: "org.apache.httpcomponents:httpclient:${depVersions.httpclient}", jacksonAnnotations: "com.fasterxml.jackson.core:jackson-annotations:${depVersions.jackson}", + javaAnnotations: "javax.annotation:javax.annotation-api:${depVersions.javaAnnotations}", jacksonCore: "com.fasterxml.jackson.core:jackson-core:${depVersions.jackson}", jacksonDatabind: "com.fasterxml.jackson.core:jackson-databind:${depVersions.jackson}", jcommander: "com.beust:jcommander:${depVersions.jcommander}", diff --git a/stream/distributedlog/core/build.gradle b/stream/distributedlog/core/build.gradle index e4a65eacbef..ca739376dec 100644 --- a/stream/distributedlog/core/build.gradle +++ b/stream/distributedlog/core/build.gradle @@ -49,6 +49,7 @@ dependencies { testImplementation project(path: ':stream:distributedlog:common', configuration: 'testArtifacts') testImplementation depLibs.junit testImplementation depLibs.mockito + implementation depLibs.javaAnnotations annotationProcessor depLibs.lombok testAnnotationProcessor depLibs.lombok diff --git a/stream/proto/build.gradle b/stream/proto/build.gradle index cd90529e2b7..cc27288f437 100644 --- a/stream/proto/build.gradle +++ b/stream/proto/build.gradle @@ -25,6 +25,7 @@ dependencies { implementation depLibs.lombok implementation depLibs.grpc implementation depLibs.commonsLang3 + implementation depLibs.javaAnnotations annotationProcessor depLibs.lombok } diff --git a/stream/server/build.gradle b/stream/server/build.gradle index 08f2403ac4e..7eb3510848e 100644 --- a/stream/server/build.gradle +++ b/stream/server/build.gradle @@ -55,6 +55,7 @@ dependencies { runtimeOnly depLibs.vertxCore runtimeOnly depLibs.vertxWeb testImplementation depLibs.mockito + implementation depLibs.javaAnnotations annotationProcessor depLibs.lombok } diff --git a/stream/tests-common/build.gradle b/stream/tests-common/build.gradle index f3c33c78c56..5259cd6e0e9 100644 --- a/stream/tests-common/build.gradle +++ b/stream/tests-common/build.gradle @@ -26,6 +26,7 @@ dependencies { implementation depLibs.slf4j annotationProcessor depLibs.lombok + implementation depLibs.javaAnnotations } protobuf { From 22c3cfd5ababe433bbc70ab7350d0970ff162f02 Mon Sep 17 00:00:00 2001 From: Pradeep Nagaraju Date: Wed, 6 Oct 2021 16:09:30 -0700 Subject: [PATCH 2/5] remove unwanted changes --- .../bookkeeper/common/util/affinity/impl/CpuAffinityJni.java | 1 + 1 file changed, 1 insertion(+) diff --git a/cpu-affinity/src/main/java/org/apache/bookkeeper/common/util/affinity/impl/CpuAffinityJni.java b/cpu-affinity/src/main/java/org/apache/bookkeeper/common/util/affinity/impl/CpuAffinityJni.java index ff1efc521cb..30ee325bca4 100644 --- a/cpu-affinity/src/main/java/org/apache/bookkeeper/common/util/affinity/impl/CpuAffinityJni.java +++ b/cpu-affinity/src/main/java/org/apache/bookkeeper/common/util/affinity/impl/CpuAffinityJni.java @@ -21,6 +21,7 @@ package org.apache.bookkeeper.common.util.affinity.impl; import java.io.IOException; + import lombok.experimental.UtilityClass; /** From 9285c10a0d5ce7d20bff4627c84bc00bfd4897dd Mon Sep 17 00:00:00 2001 From: Pradeep Nagaraju Date: Wed, 6 Oct 2021 19:17:27 -0700 Subject: [PATCH 3/5] Revert the changes to avoid deprecation of finalize() --- .../com/scurrilous/circe/crc/Sse42Crc32C.java | 25 +++++-------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/circe-checksum/src/main/java/com/scurrilous/circe/crc/Sse42Crc32C.java b/circe-checksum/src/main/java/com/scurrilous/circe/crc/Sse42Crc32C.java index 70b7cf6b113..22379a0e32d 100644 --- a/circe-checksum/src/main/java/com/scurrilous/circe/crc/Sse42Crc32C.java +++ b/circe-checksum/src/main/java/com/scurrilous/circe/crc/Sse42Crc32C.java @@ -18,7 +18,6 @@ import static com.scurrilous.circe.utils.NativeUtils.loadLibraryFromJar; import static com.scurrilous.circe.utils.NativeUtils.libType; -import java.lang.ref.Cleaner; import java.nio.ByteBuffer; import com.scurrilous.circe.IncrementalIntHash; import com.scurrilous.circe.impl.AbstractIncrementalIntHash; @@ -55,23 +54,6 @@ public static boolean isSupported() { config = 0; } - // A cleaner similar to a finalizer(deprecated in java11) - private static final Cleaner cleaner = Cleaner.create(); - - static class State implements Runnable { - private final long config; - State(long config) { - // initialize State needed for cleaning action - this.config = config; - } - - public void run() { - // cleanup action accessing State, executed at most once - if (this.config != 0) - freeConfig(this.config); - } - } - public Sse42Crc32C(int[] chunkWords) { if (chunkWords.length == 0) { config = 0; @@ -80,7 +62,12 @@ public Sse42Crc32C(int[] chunkWords) { if (config == 0) throw new RuntimeException("CRC32C configuration allocation failed"); } - cleaner.register(config, new State(config)); + } + + @Override + protected void finalize() { + if (config != 0) + freeConfig(config); } @Override From f690e90e413b30536921edc6e69d2def94f2ca67 Mon Sep 17 00:00:00 2001 From: Pradeep Nagaraju Date: Wed, 6 Oct 2021 21:06:00 -0700 Subject: [PATCH 4/5] Replace javac to use gradle native config --- circe-checksum/build.gradle | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/circe-checksum/build.gradle b/circe-checksum/build.gradle index f469ef299a5..e581ae6c3aa 100644 --- a/circe-checksum/build.gradle +++ b/circe-checksum/build.gradle @@ -28,14 +28,18 @@ dependencies { testImplementation depLibs.mockito } -task generateJniHeaders(type:Exec) { +task generateJniHeaders(type: JavaCompile) { ext { javahOutputDir = "$buildDir/javahGenerated" } - dependsOn classes - def classpath = sourceSets.main.output.classesDirs.join(":") - commandLine("javac", "-h", javahOutputDir, "-classpath", - classpath, "./src/main/java/com/scurrilous/circe/crc/Sse42Crc32C.java") + classpath = sourceSets.main.compileClasspath + destinationDir file("${buildDir}/javahGenerated") + source = sourceSets.main.java + options.compilerArgs += [ + '-h', file("${buildDir}/javahGenerated"), + ] + + options.annotationProcessorPath = configurations.annotationProcessor } jar { From 049a510b920aab3c7d22898a18596bd68f4e78fd Mon Sep 17 00:00:00 2001 From: maurice barnum Date: Thu, 7 Oct 2021 11:25:44 -0700 Subject: [PATCH 5/5] use compileJava task to generate jni headers --- circe-checksum/build.gradle | 14 ++------------ circe-checksum/src/main/circe/build.gradle | 4 ++-- cpu-affinity/build.gradle | 14 ++------------ cpu-affinity/src/main/affinity/build.gradle | 4 ++-- 4 files changed, 8 insertions(+), 28 deletions(-) diff --git a/circe-checksum/build.gradle b/circe-checksum/build.gradle index e581ae6c3aa..5e03ec9324e 100644 --- a/circe-checksum/build.gradle +++ b/circe-checksum/build.gradle @@ -28,18 +28,8 @@ dependencies { testImplementation depLibs.mockito } -task generateJniHeaders(type: JavaCompile) { - ext { - javahOutputDir = "$buildDir/javahGenerated" - } - classpath = sourceSets.main.compileClasspath - destinationDir file("${buildDir}/javahGenerated") - source = sourceSets.main.java - options.compilerArgs += [ - '-h', file("${buildDir}/javahGenerated"), - ] - - options.annotationProcessorPath = configurations.annotationProcessor +compileJava { + options.headerOutputDirectory = file("${buildDir}/javahGenerated") } jar { diff --git a/circe-checksum/src/main/circe/build.gradle b/circe-checksum/src/main/circe/build.gradle index 5b49ba82885..0a35c874aab 100644 --- a/circe-checksum/src/main/circe/build.gradle +++ b/circe-checksum/src/main/circe/build.gradle @@ -27,9 +27,9 @@ library { binaries.configureEach { CppBinary binary -> def compileTask = binary.compileTask.get() - compileTask.dependsOn project(':circe-checksum').generateJniHeaders + compileTask.dependsOn project(':circe-checksum').compileJava compileTask.includes.from("${Jvm.current().javaHome}/include", - project(':circe-checksum').generateJniHeaders.javahOutputDir) + project(':circe-checksum').compileJava.options.headerOutputDirectory) def osFamily = binary.targetPlatform.targetMachine.operatingSystemFamily diff --git a/cpu-affinity/build.gradle b/cpu-affinity/build.gradle index 706ce21d0f7..750f7a2802d 100644 --- a/cpu-affinity/build.gradle +++ b/cpu-affinity/build.gradle @@ -33,18 +33,8 @@ dependencies { testAnnotationProcessor depLibs.lombok } -task generateJniHeaders(type: JavaCompile) { - ext { - javahOutputDir = "$buildDir/javahGenerated" - } - classpath = sourceSets.main.compileClasspath - destinationDir file("${buildDir}/javahGenerated") - source = sourceSets.main.java - options.compilerArgs += [ - '-h', file("${buildDir}/javahGenerated"), - ] - - options.annotationProcessorPath = configurations.annotationProcessor +compileJava { + options.headerOutputDirectory = file("${buildDir}/javahGenerated") } jar { diff --git a/cpu-affinity/src/main/affinity/build.gradle b/cpu-affinity/src/main/affinity/build.gradle index 2e444234fad..49868c0c515 100644 --- a/cpu-affinity/src/main/affinity/build.gradle +++ b/cpu-affinity/src/main/affinity/build.gradle @@ -25,9 +25,9 @@ plugins { library { binaries.configureEach { CppBinary binary -> def compileTask = binary.compileTask.get() - compileTask.dependsOn project(':cpu-affinity').generateJniHeaders + compileTask.dependsOn project(':cpu-affinity').compileJava compileTask.includes.from("${Jvm.current().javaHome}/include", - project(':cpu-affinity').generateJniHeaders.javahOutputDir) + project(':cpu-affinity').compileJava.options.headerOutputDirectory) def osFamily = binary.targetPlatform.targetMachine.operatingSystemFamily