diff --git a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.jpms-module-dependencies.gradle.kts b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.jpms-module-dependencies.gradle.kts index 0ed627c2d1de..78d0c1c3ebb7 100644 --- a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.jpms-module-dependencies.gradle.kts +++ b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.jpms-module-dependencies.gradle.kts @@ -34,42 +34,15 @@ javaModuleDependencies { moduleNameToGA.put("com.swirlds.config.api", "com.swirlds:swirlds-config-api") moduleNameToGA.put("com.swirlds.config.impl", "com.swirlds:swirlds-config-impl") moduleNameToGA.put("com.swirlds.merkle.test", "com.swirlds:swirlds-merkle-test") + moduleNameToGA.put("com.swirlds.merkledb", "com.swirlds:swirlds-merkledb") moduleNameToGA.put("com.swirlds.platform.core", "com.swirlds:swirlds-platform-core") moduleNameToGA.put("com.swirlds.platform.gui", "com.swirlds:swirlds-platform-gui") moduleNameToGA.put("com.swirlds.test.framework", "com.swirlds:swirlds-test-framework") - moduleNameToGA.put( - "com.hedera.hashgraph.protobuf.java.api", - "com.hedera.hashgraph:hedera-protobuf-java-api" - ) + // Other Hedera modules moduleNameToGA.put("com.hedera.pbj.runtime", "com.hedera.pbj:pbj-runtime") - moduleNameToGA.put("hamcrest.core", "org.hamcrest:hamcrest-core") - moduleNameToGA.put("io.grpc", "io.helidon.grpc:io.grpc") - moduleNameToGA.put("io.helidon.webserver.http2", "io.helidon.webserver:helidon-webserver-http2") - moduleNameToGA.put("io.netty.codec.http", "io.netty:netty-codec-http") - moduleNameToGA.put("io.netty.codec.http2", "io.netty:netty-codec-http2") - moduleNameToGA.put("io.netty.codec.socks", "io.netty:netty-codec-socks") - moduleNameToGA.put("io.netty.handler.proxy", "io.netty:netty-handler-proxy") - moduleNameToGA.put("io.perfmark", "io.perfmark:perfmark-api") - moduleNameToGA.put( - "org.apache.logging.log4j.slf4j", - "org.apache.logging.log4j:log4j-slf4j-impl" - ) - moduleNameToGA.put("org.bouncycastle.util", "org.bouncycastle:bcutil-jdk15on") - moduleNameToGA.put( - "org.eclipse.collections.api", - "org.eclipse.collections:eclipse-collections-api" - ) - moduleNameToGA.put( - "org.eclipse.collections.impl", - "org.eclipse.collections:eclipse-collections" - ) - moduleNameToGA.put("org.hamcrest", "org.hamcrest:hamcrest") - moduleNameToGA.put("org.hyperledger.besu.datatypes", "org.hyperledger.besu:besu-datatypes") - moduleNameToGA.put("org.hyperledger.besu.evm", "org.hyperledger.besu:evm") - moduleNameToGA.put("org.hyperledger.besu.internal.rlp", "org.hyperledger.besu.internal:rlp") - moduleNameToGA.put("org.hyperledger.besu.plugin.api", "org.hyperledger.besu:plugin-api") + + // Testing only moduleNameToGA.put("org.mockito.junit.jupiter", "org.mockito:mockito-junit-jupiter") moduleNameToGA.put("org.objenesis", "org.objenesis:objenesis") - moduleNameToGA.put("org.antlr.antlr4.runtime", "org.antlr:antlr4-runtime") } diff --git a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.jpms-modules.gradle.kts b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.jpms-modules.gradle.kts index 864be679b953..6ca1661b6874 100644 --- a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.jpms-modules.gradle.kts +++ b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.jpms-modules.gradle.kts @@ -14,11 +14,7 @@ * limitations under the License. */ -import com.hedera.hashgraph.gradlebuild.rules.IoGrpcDependencyMetadataRule -import com.hedera.hashgraph.gradlebuild.rules.IoGrpcMetadataRule -import com.hedera.hashgraph.gradlebuild.rules.IoNettyNativeEpollMetadataRule -import com.hedera.hashgraph.gradlebuild.rules.IoPrometheusSimpleclientMetadataRule -import com.hedera.hashgraph.gradlebuild.rules.RemoveFindbugsAnnotationsMetadataRule +import com.hedera.hashgraph.gradlebuild.rules.* plugins { id("org.gradlex.java-ecosystem-capabilities") @@ -26,8 +22,6 @@ plugins { } dependencies.components { - withModule("io.helidon.grpc:io.grpc") - withModule("io.grpc:grpc-netty") withModule("io.grpc:grpc-protobuf") withModule("io.grpc:grpc-protobuf-lite") @@ -35,17 +29,21 @@ dependencies.components { withModule("io.grpc:grpc-stub") withModule("io.grpc:grpc-testing") + withModule("com.github.ben-manes.caffeine:caffeine") + withModule("com.github.spotbugs:spotbugs-annotations") + withModule("com.google.dagger:dagger-compiler") + withModule("com.google.dagger:dagger-spi") + withModule("com.google.guava:guava") + withModule("com.google.protobuf:protobuf-java-util") + withModule("io.helidon.grpc:io.grpc") + withModule("org.apache.tuweni:tuweni-bytes") + withModule("org.apache.tuweni:tuweni-units") + withModule("io.netty:netty-transport-native-epoll") withModule("io.prometheus:simpleclient") - withModule("com.github.spotbugs:spotbugs-annotations") - withModule("com.google.dagger:dagger-compiler") - withModule("com.google.dagger:dagger-spi") - withModule("com.google.guava:guava") - withModule("com.google.protobuf:protobuf-java-util") - withModule("org.apache.tuweni:tuweni-bytes") - withModule("org.apache.tuweni:tuweni-units") + withModule("org.jetbrains.kotlin:kotlin-stdlib") } extraJavaModuleInfo { @@ -89,14 +87,6 @@ extraJavaModuleInfo { requireAllDefinedDependencies() requires("java.logging") } - module("com.google.protobuf:protobuf-java-util", "com.google.protobuf.util") { - exportAllPackages() - requireAllDefinedDependencies() - } - module("com.google.errorprone:error_prone_annotations", "com.google.errorprone.annotations") { - exportAllPackages() - // no dependencies - } module("com.google.guava:guava", "com.google.common") { exportAllPackages() requireAllDefinedDependencies() @@ -106,10 +96,6 @@ extraJavaModuleInfo { exportAllPackages() // no dependencies } - module("com.google.j2objc:j2objc-annotations", "com.google.j2objc.annotations") { - exportAllPackages() - // no dependencies - } module("com.google.api.grpc:proto-google-common-protos", "com.google.api.grpc.common") { exportAllPackages() requireAllDefinedDependencies() @@ -158,10 +144,6 @@ extraJavaModuleInfo { exportAllPackages() requires("org.connid.framework") // this is missing in POM } - module("com.offbynull.portmapper:portmapper", "portmapper") { - exportAllPackages() - requireAllDefinedDependencies() - } module("org.jetbrains:annotations", "org.jetbrains.annotations") { exportAllPackages() // no dependencies @@ -182,95 +164,191 @@ extraJavaModuleInfo { exportAllPackages() // no dependencies } + module("io.netty:netty-codec-http", "io.netty.codec.http") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("io.netty:netty-codec-http2", "io.netty.codec.http2") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("io.netty:netty-codec-socks", "io.netty.codec.socks") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("io.netty:netty-handler-proxy", "io.netty.handler.proxy") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("io.netty:netty-transport-native-unix-common", "io.netty.transport.unix.common") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("io.netty:netty-buffer", "io.netty.buffer") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("io.netty:netty-codec", "io.netty.codec") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("io.netty:netty-common", "io.netty.common") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("io.netty:netty-handler", "io.netty.handler") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("io.netty:netty-resolver", "io.netty.resolver") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("io.netty:netty-transport", "io.netty.transport") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("io.netty:netty-transport-classes-epoll", "io.netty.transport.classes.epoll") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("org.antlr:antlr4-runtime", "org.antlr.antlr4.runtime") { + exportAllPackages() + // no dependencies + } + module("org.yaml:snakeyaml", "org.yaml.snakeyaml") { + exportAllPackages() + // no dependencies + } + module("org.hyperledger.besu.internal:crypto", "org.hyperledger.besu.internal.crypto") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("org.hyperledger.besu.internal:rlp", "org.hyperledger.besu.internal.rlp") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("org.hyperledger.besu:arithmetic", "org.hyperledger.besu.arithmetic") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("org.hyperledger.besu:blake2bf", "org.hyperledger.besu.blake2bf") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("org.hyperledger.besu:bls12-381", "org.hyperledger.besu.bls12.for381") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("org.hyperledger.besu:besu-datatypes", "org.hyperledger.besu.datatypes") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("org.hyperledger.besu:evm", "org.hyperledger.besu.evm") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("org.hyperledger.besu:plugin-api", "org.hyperledger.besu.plugin.api") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("org.hyperledger.besu:secp256k1", "org.hyperledger.besu.secp256k1") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("org.hyperledger.besu:secp256r1", "org.hyperledger.besu.secp256r1") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("com.goterl:resource-loader", "resource.loader") { + exportAllPackages() + requireAllDefinedDependencies() + } + + module("org.apache.logging.log4j:log4j-core", "org.apache.logging.log4j.core") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("com.goterl:lazysodium-java", "lazysodium.java") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("tech.pegasys:jc-kzg-4844", "tech.pegasys.jckzg4844") { + exportAllPackages() + // no dependencies + } + module("net.java.dev.jna:jna", "com.sun.jna") { + exportAllPackages() + // no dependencies + } + module("org.eclipse.collections:eclipse-collections-api", "org.eclipse.collections.api") { + exportAllPackages() + // no dependencies + } + module("org.eclipse.collections:eclipse-collections", "org.eclipse.collections.impl") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("io.prometheus:simpleclient", "io.prometheus.simpleclient") { + exportAllPackages() + // no dependencies + } + module("io.prometheus:simpleclient_common", "io.prometheus.simpleclient_common") { + exportAllPackages() + requireAllDefinedDependencies() + } + module("io.prometheus:simpleclient_httpserver", "io.prometheus.simpleclient.httpserver") { + exportAllPackages() + requireAllDefinedDependencies() + requires("jdk.httpserver") + } knownModule("com.github.ben-manes.caffeine:caffeine", "com.github.benmanes.caffeine") knownModule("com.google.code.gson:gson", "com.google.gson") - knownModule("com.swirlds:swirlds-common", "com.swirlds.common") - knownModule("com.swirlds:swirlds-fchashmap", "com.swirlds.fchashmap") - knownModule("com.swirlds:swirlds-fcqueue", "com.swirlds.fcqueue") - knownModule("com.swirlds:swirlds-merkle", "com.swirlds.merkle") - knownModule("com.swirlds:swirlds-merkledb", "com.swirlds.merkledb") - knownModule("com.swirlds:swirlds-platform-core", "com.swirlds.platform.core") - knownModule("com.swirlds:swirlds-virtualmap", "com.swirlds.virtualmap") - knownModule("io.github.classgraph:classgraph", "io.github.classgraph") knownModule("io.helidon.grpc:io.grpc", "io.grpc") - knownModule("io.netty:netty-codec-http2", "io.netty.codec.http2") - knownModule("io.netty:netty-handler-proxy", "io.netty.handler.proxy") - knownModule("io.netty:netty-transport-native-unix-common", "io.netty.transport.unix.common") - knownModule("junit:junit", "junit") knownModule("org.apache.logging.log4j:log4j-api", "org.apache.logging.log4j") - knownModule("org.apache.logging.log4j:log4j-core", "org.apache.logging.log4j.core") - knownModule("org.apache.logging.log4j:log4j-slf4j", "org.apache.logging.log4j.slf4j") - knownModule("org.apache.logging.log4j:log4j-jul", "org.apache.logging.log4j.jul") + knownModule("org.bouncycastle:bcpkix-jdk15on", "org.bouncycastle.pkix") + knownModule("org.bouncycastle:bcprov-jdk15on", "org.bouncycastle.provider") + knownModule("org.bouncycastle:bcutil-jdk15on", "org.bouncycastle.util") knownModule("org.jetbrains.kotlin:kotlin-stdlib-jdk8", "kotlin.stdlib.jdk8") knownModule("org.slf4j:slf4j-api", "org.slf4j") - // Kotlin has to be automatic modules because of split package mess - automaticModule("org.jetbrains.kotlin:kotlin-stdlib-common", "kotlin.stdlib.common") - automaticModule("org.jetbrains.kotlinx:kotlinx-metadata-jvm", "kotlinx.metadata.jvm") - - // automatic modules that can not be re-jared because they contain native libraries - automaticModule("com.goterl:lazysodium-java", "lazysodium.java") - automaticModule("com.goterl:resource-loader", "resource.loader") - automaticModule("org.hyperledger.besu:secp256k1", "org.hyperledger.besu.secp256k1") - automaticModule("org.hyperledger.besu.internal:crypto", "org.hyperledger.besu.crypto") - automaticModule("tech.pegasys:jc-kzg-4844", "tech.pegasys.jckzg4844") - - automaticModule("org.hyperledger.besu.internal:util", "org.hyperledger.besu.util") - automaticModule("org.hyperledger.besu:bls12-381", "org.hyperledger.besu.bls12.for381") - automaticModule("org.hyperledger.besu:secp256r1", "org.hyperledger.besu.secp256r1") - automaticModule("org.hyperledger.besu:blake2bf", "org.hyperledger.besu.blake2bf") - automaticModule("org.hyperledger.besu:blake2bf", "org.hyperledger.besu.blake2bf") - automaticModule("net.java.dev.jna:jna", "com.sun.jna") - automaticModule("org.bouncycastle:bcprov-jdk15on", "org.bouncycastle.provider") - automaticModule("org.bouncycastle:bcpkix-jdk15on", "org.bouncycastle.pkix") - - // automatic modules to make it build, might be able to move them full modules - automaticModule("com.google.android:annotations", "com.google.android.annotations") - automaticModule( - "org.codehaus.mojo:animal-sniffer-annotations", - "org.codehaus.mojo.animalsniffer.annotations" - ) - automaticModule( - "org.eclipse.microprofile.health:microprofile-health-api", - "microprofile.health.api" - ) - automaticModule("org.openjfx:javafx-base", "javafx.base") - - // Compile Time Modules - automaticModule("net.ltgt.gradle.incap:incap", "net.ltgt.gradle.incap") + // Annotation processing only automaticModule("com.google.dagger:dagger-compiler", "dagger.compiler") - automaticModule("com.google.dagger:dagger-spi", "dagger.spi") automaticModule("com.google.dagger:dagger-producers", "dagger.producers") - automaticModule("com.google.errorprone:javac-shaded", "com.google.errorprone.javac.shaded") - automaticModule("com.google.googlejavaformat:google-java-format", "com.google.googlejavaformat") + automaticModule("com.google.dagger:dagger-spi", "dagger.spi") automaticModule( "com.google.devtools.ksp:symbol-processing-api", "com.google.devtools.ksp.symbolprocessingapi" ) - automaticModule("org.hyperledger.besu:arithmetic", "org.hyperledger.besu.arithmetic") + automaticModule("com.google.errorprone:javac-shaded", "com.google.errorprone.javac.shaded") + automaticModule("com.google.googlejavaformat:google-java-format", "com.google.googlejavaformat") automaticModule("com.squareup:javapoet", "com.squareup.javapoet") - automaticModule("org.checkerframework:checker-qual", "org.checkerframework.checker.qual") - automaticModule("org.rnorth.duct-tape:duct-tape", "org.rnorth.ducttape") - automaticModule("io.opencensus:opencensus-api", "io.opencensus.api") - automaticModule("org.hyperledger.besu.internal:util", "org.hyperledger.besu.internal.util") - automaticModule("org.testcontainers:junit-jupiter", "org.testcontainers.junit.jupiter") - automaticModule("io.perfmark:perfmark-api", "io.perfmark") + automaticModule("net.ltgt.gradle.incap:incap", "net.ltgt.gradle.incap") + automaticModule("org.jetbrains.kotlinx:kotlinx-metadata-jvm", "kotlinx.metadata.jvm") + + // Testing only + automaticModule("com.google.jimfs:jimfs", "com.google.jimfs") + automaticModule("org.awaitility:awaitility", "awaitility") + automaticModule("org.hamcrest:hamcrest", "org.hamcrest") + automaticModule("org.hamcrest:hamcrest-core", "org.hamcrest.core") + automaticModule("org.mockito:mockito-inline", "org.mockito.inline") + automaticModule("uk.org.webcompere:system-stubs-core", "uk.org.webcompere.systemstubs.core") automaticModule( - "com.google.auto.value:auto-value-annotations", - "com.google.auto.value.annotations" + "uk.org.webcompere:system-stubs-jupiter", + "uk.org.webcompere.systemstubs.jupiter" ) - automaticModule("com.google.truth:truth", "com.google.truth") + automaticModule("com.google.protobuf:protobuf-java-util", "com.google.protobuf.util") - // Automatic modules for PBJ dependencies - automaticModule("org.antlr:antlr4", "org.antlr.antlr4") - automaticModule("org.antlr:antlr-runtime", "org.antlr.antlr.runtime") - automaticModule("org.antlr:ST4", "org.antlr.ST4") - automaticModule("org.abego.treelayout:org.abego.treelayout.core", "org.abego.treelayout.core") + // JMH only + automaticModule("net.sf.jopt-simple:jopt-simple", "jopt.simple") + automaticModule("org.openjdk.jmh:jmh-core", "jmh.core") + automaticModule("org.openjdk.jmh:jmh-generator-asm", "jmh.generator.asm") + automaticModule("org.openjdk.jmh:jmh-generator-bytecode", "jmh.generator.bytecode") + automaticModule("org.openjdk.jmh:jmh-generator-reflection", "jmh.generator.reflection") - // Test Related Modules - automaticModule("org.mockito:mockito-inline", "org.mockito.inline") - automaticModule("com.google.jimfs:jimfs", "com.google.jimfs") + // Test clients only + automaticModule("com.github.docker-java:docker-java-api", "com.github.docker.java.api") automaticModule( "com.github.docker-java:docker-java-transport", "com.github.docker.java.transport" @@ -279,26 +357,7 @@ extraJavaModuleInfo { "com.github.docker-java:docker-java-transport-zerodep", "com.github.docker.transport.zerodep" ) - automaticModule("com.github.docker-java:docker-java-api", "com.github.docker.java.api") - automaticModule("hamcrest-core-1.3.jar", "hamcrest.core") - automaticModule("org.awaitility:awaitility", "awaitility") - automaticModule("org.testcontainers:testcontainers", "org.testcontainers") + automaticModule("org.rnorth.duct-tape:duct-tape", "org.rnorth.ducttape") automaticModule("org.testcontainers:junit-jupiter", "org.testcontainers.junit.jupiter") - automaticModule("io.prometheus:simpleclient", "io.prometheus.simpleclient") - automaticModule("io.prometheus:simpleclient_common", "io.prometheus.simpleclient_common") - automaticModule( - "io.prometheus:simpleclient_httpserver", - "io.prometheus.simpleclient.httpserver" - ) - automaticModule("org.openjdk.jmh:jmh-core", "jmh.core") - automaticModule("org.openjdk.jmh:jmh-generator-asm", "jmh.generator.asm") - automaticModule("org.openjdk.jmh:jmh-generator-bytecode", "jmh.generator.bytecode") - automaticModule("org.openjdk.jmh:jmh-generator-reflection", "jmh.generator.reflection") - automaticModule("net.sf.jopt-simple:jopt-simple", "jopt.simple") - - automaticModule( - "uk.org.webcompere:system-stubs-jupiter", - "uk.org.webcompere.systemstubs.jupiter" - ) - automaticModule("uk.org.webcompere:system-stubs-core", "uk.org.webcompere.systemstubs.core") + automaticModule("org.testcontainers:testcontainers", "org.testcontainers") } diff --git a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.shadow-jar.gradle.kts b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.shadow-jar.gradle.kts index 32ec9e1d1c6a..4e619781e758 100644 --- a/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.shadow-jar.gradle.kts +++ b/build-logic/project-plugins/src/main/kotlin/com.hedera.hashgraph.shadow-jar.gradle.kts @@ -29,6 +29,7 @@ tasks.withType().configureEach { // Defer the resolution of 'runtimeClasspath'. This is an issue in the shadow // plugin that it automatically accesses the files in 'runtimeClasspath' while // Gradle is building the task graph. The three lines below work around that. + // See: https://github.com/johnrengelman/shadow/issues/882 inputs.files(project.configurations.runtimeClasspath) configurations = emptyList() doFirst { configurations = listOf(project.configurations.runtimeClasspath.get()) } diff --git a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoGrpcDependencyMetadataRule.kt b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoGrpcDependencyMetadataRule.kt index e8bdecadead6..74b0aa24c79e 100644 --- a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoGrpcDependencyMetadataRule.kt +++ b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoGrpcDependencyMetadataRule.kt @@ -16,9 +16,16 @@ package com.hedera.hashgraph.gradlebuild.rules +import org.gradle.api.artifacts.CacheableRule import org.gradle.api.artifacts.ComponentMetadataContext import org.gradle.api.artifacts.ComponentMetadataRule +/** + * Replace all 'grpc' dependencies with a singe dependency to + * 'io.helidon.grpc:io.grpc' which is a re-packaged Modular Jar + * of all the 'grpc' libraries. + */ +@CacheableRule abstract class IoGrpcDependencyMetadataRule : ComponentMetadataRule { override fun execute(context: ComponentMetadataContext) { @@ -27,6 +34,7 @@ abstract class IoGrpcDependencyMetadataRule : ComponentMetadataRule { removeAll { it.name == "grpc-api" } removeAll { it.name == "grpc-context" } removeAll { it.name == "grpc-core" } + removeAll { it.name == "error_prone_annotations" } removeAll { it.group == "com.google.code.findbugs" } add("io.helidon.grpc:io.grpc") } diff --git a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoNettyNativeEpollMetadataRule.kt b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoNettyNativeEpollMetadataRule.kt index ea8f16c521af..0667b2f71097 100644 --- a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoNettyNativeEpollMetadataRule.kt +++ b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoNettyNativeEpollMetadataRule.kt @@ -16,9 +16,14 @@ package com.hedera.hashgraph.gradlebuild.rules +import org.gradle.api.artifacts.CacheableRule import org.gradle.api.artifacts.ComponentMetadataContext import org.gradle.api.artifacts.ComponentMetadataRule +/** + * Configures which native Jars of 'io.netty.native.epoll' to pick. + */ +@CacheableRule abstract class IoNettyNativeEpollMetadataRule : ComponentMetadataRule { override fun execute(context: ComponentMetadataContext) { diff --git a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoPrometheusSimpleclientMetadataRule.kt b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoPrometheusSimpleclientMetadataRule.kt index 2decde8c155d..1dae45916db7 100644 --- a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoPrometheusSimpleclientMetadataRule.kt +++ b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoPrometheusSimpleclientMetadataRule.kt @@ -16,9 +16,14 @@ package com.hedera.hashgraph.gradlebuild.rules +import org.gradle.api.artifacts.CacheableRule import org.gradle.api.artifacts.ComponentMetadataContext import org.gradle.api.artifacts.ComponentMetadataRule +/** + * Removes unused transitive dependencies of 'io.prometheus:simpleclient'. + */ +@CacheableRule abstract class IoPrometheusSimpleclientMetadataRule : ComponentMetadataRule { override fun execute(context: ComponentMetadataContext) { diff --git a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveFindbugsAnnotationsMetadataRule.kt b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveAnnotationLibrariesMetadataRule.kt similarity index 57% rename from build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveFindbugsAnnotationsMetadataRule.kt rename to build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveAnnotationLibrariesMetadataRule.kt index 14898665d252..b55be773ed85 100644 --- a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveFindbugsAnnotationsMetadataRule.kt +++ b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveAnnotationLibrariesMetadataRule.kt @@ -16,14 +16,28 @@ package com.hedera.hashgraph.gradlebuild.rules +import org.gradle.api.artifacts.CacheableRule import org.gradle.api.artifacts.ComponentMetadataContext import org.gradle.api.artifacts.ComponentMetadataRule -abstract class RemoveFindbugsAnnotationsMetadataRule : ComponentMetadataRule { +/** + * Removes annotation libraries for annotations that this project does not require + * at runtime or compile time. These are typically annotations used by additional + * code analysis tools that are not used by this project. + */ +@CacheableRule +abstract class RemoveAnnotationLibrariesMetadataRule : ComponentMetadataRule { override fun execute(context: ComponentMetadataContext) { context.details.allVariants { withDependencies { + removeAll { it.name == "animal-sniffer-annotations" } + removeAll { it.name == "checker-qual" } + removeAll { it.name == "error_prone_annotations" } + removeAll { it.name == "failureaccess" } + removeAll { it.name == "j2objc-annotations" } + removeAll { it.name == "listenablefuture" } + removeAll { it.group == "com.google.android" && it.name == "annotations"} // 'findbugs' annotations are not used and cause split package with 'javax.annotation-api' removeAll { it.group == "com.google.code.findbugs" } } diff --git a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoGrpcMetadataRule.kt b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveKotlinStdlibCommonMetadataRule.kt similarity index 70% rename from build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoGrpcMetadataRule.kt rename to build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveKotlinStdlibCommonMetadataRule.kt index b9701a0e7c15..60c75ee85143 100644 --- a/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/IoGrpcMetadataRule.kt +++ b/build-logic/project-plugins/src/main/kotlin/com/hedera/hashgraph/gradlebuild/rules/RemoveKotlinStdlibCommonMetadataRule.kt @@ -16,17 +16,21 @@ package com.hedera.hashgraph.gradlebuild.rules +import org.gradle.api.artifacts.CacheableRule import org.gradle.api.artifacts.ComponentMetadataContext import org.gradle.api.artifacts.ComponentMetadataRule -abstract class IoGrpcMetadataRule : ComponentMetadataRule { +/** + * Kotlin 'kotlin-stdlib-common' (which is not a JPMS module) is not required at runtime, if the + * runtime is a JVM. It exists for Kotlins multi-platform aspect (which we do not care for). + */ +@CacheableRule +abstract class RemoveKotlinStdlibCommonMetadataRule : ComponentMetadataRule { override fun execute(context: ComponentMetadataContext) { context.details.allVariants { withDependencies { - removeAll { it.name == "checker-qual" } - removeAll { it.name == "failureaccess" } - removeAll { it.name == "listenablefuture" } + removeAll { it.name == "kotlin-stdlib-common" } } } } diff --git a/hedera-dependency-versions/build.gradle.kts b/hedera-dependency-versions/build.gradle.kts index 6cfd0e28de49..7218d8419541 100644 --- a/hedera-dependency-versions/build.gradle.kts +++ b/hedera-dependency-versions/build.gradle.kts @@ -50,7 +50,6 @@ moduleInfo { version("com.google.jimfs", "1.2") version("com.google.protobuf", protobufVersion) version("com.google.protobuf.util", protobufVersion) - version("com.google.truth", "1.1.3") version("com.hedera.pbj.runtime", "0.7.4") version("com.sun.jna", "5.12.1") version("dagger", daggerVersion) @@ -70,7 +69,6 @@ moduleInfo { version("io.prometheus.simpleclient", prometheusVersion) version("io.prometheus.simpleclient.httpserver", prometheusVersion) version("java.annotation", "1.3.2") - version("javafx.base", "17") version("javax.inject", "1") version("lazysodium.java", "5.1.1") version("net.i2p.crypto.eddsa", "0.3.0") @@ -89,7 +87,7 @@ moduleInfo { version("org.eclipse.collections.api", eclipseCollectionsVersion) version("org.eclipse.collections.impl", eclipseCollectionsVersion) version("org.hamcrest", "2.2") - version("org.hyperledger.besu.crypto", besuVersion) + version("org.hyperledger.besu.internal.crypto", besuVersion) version("org.hyperledger.besu.datatypes", besuVersion) version("org.hyperledger.besu.evm", besuVersion) version("org.hyperledger.besu.secp256k1", besuNativeVersion) @@ -105,7 +103,6 @@ moduleInfo { version("org.testcontainers", testContainersVersion) version("org.testcontainers.junit.jupiter", testContainersVersion) version("org.yaml.snakeyaml", "1.33") - version("portmapper", "2.0.4") version("tuweni.bytes", tuweniVersion) version("tuweni.units", tuweniVersion) version("uk.org.webcompere.systemstubs.core", systemStubsVersion) diff --git a/hedera-node/hedera-app/build.gradle.kts b/hedera-node/hedera-app/build.gradle.kts index 3c3cf48efced..7f00ad0c5039 100644 --- a/hedera-node/hedera-app/build.gradle.kts +++ b/hedera-node/hedera-app/build.gradle.kts @@ -135,14 +135,33 @@ tasks.jar { // Copy dependencies into `data/lib` val copyLib = - tasks.register("copyLib") { + tasks.register("copyLib") { from(project.configurations.getByName("runtimeClasspath")) into(layout.projectDirectory.dir("../data/lib")) + + doLast { + val nonModulalJars = + destinationDir + .listFiles()!! + .mapNotNull { jar -> + if (zipTree(jar).none { it.name == "module-info.class" }) { + jar.name + } else { + null + } + } + .sorted() + if (nonModulalJars.isNotEmpty()) { + throw RuntimeException( + "Jars without 'module-info.class' in 'data/lib'\n${nonModulalJars.joinToString("\n")}" + ) + } + } } // Copy built jar into `data/apps` and rename HederaNode.jar val copyApp = - tasks.register("copyApp") { + tasks.register("copyApp") { from(tasks.jar) into(layout.projectDirectory.dir("../data/apps")) rename { "HederaNode.jar" } diff --git a/hedera-node/test-clients/src/main/java/module-info.java b/hedera-node/test-clients/src/main/java/module-info.java index c8aa81546b77..2330adb400b1 100644 --- a/hedera-node/test-clients/src/main/java/module-info.java +++ b/hedera-node/test-clients/src/main/java/module-info.java @@ -36,9 +36,9 @@ requires org.apache.commons.lang3; requires org.apache.logging.log4j.core; requires org.bouncycastle.provider; - requires org.hyperledger.besu.crypto; requires org.hyperledger.besu.datatypes; requires org.hyperledger.besu.evm; + requires org.hyperledger.besu.internal.crypto; requires org.json; requires org.opentest4j; requires tuweni.units; diff --git a/platform-sdk/swirlds-platform-core/src/main/java/module-info.java b/platform-sdk/swirlds-platform-core/src/main/java/module-info.java index 2a8ae8d4bbaa..7e6da9a2ac4b 100644 --- a/platform-sdk/swirlds-platform-core/src/main/java/module-info.java +++ b/platform-sdk/swirlds-platform-core/src/main/java/module-info.java @@ -152,7 +152,6 @@ requires java.management; requires java.scripting; requires java.sql; - requires javafx.base; requires jdk.management; requires jdk.net; requires org.bouncycastle.pkix; diff --git a/platform-sdk/swirlds-unit-tests/common/swirlds-common-test/build.gradle.kts b/platform-sdk/swirlds-unit-tests/common/swirlds-common-test/build.gradle.kts index 2e1e88bf6356..f925a8785965 100644 --- a/platform-sdk/swirlds-unit-tests/common/swirlds-common-test/build.gradle.kts +++ b/platform-sdk/swirlds-unit-tests/common/swirlds-common-test/build.gradle.kts @@ -25,7 +25,6 @@ testModuleInfo { requires("com.swirlds.common.test.fixtures") requires("com.swirlds.config.api") requires("com.swirlds.test.framework") - requires("com.google.truth") requires("org.assertj.core") requires("org.junit.jupiter.params") requires("org.mockito") diff --git a/platform-sdk/swirlds-unit-tests/common/swirlds-common-test/src/test/java/com/swirlds/common/test/threading/CachedPoolParallelExecutorTest.java b/platform-sdk/swirlds-unit-tests/common/swirlds-common-test/src/test/java/com/swirlds/common/test/threading/CachedPoolParallelExecutorTest.java index 691291d6c06e..883985e342d1 100644 --- a/platform-sdk/swirlds-unit-tests/common/swirlds-common-test/src/test/java/com/swirlds/common/test/threading/CachedPoolParallelExecutorTest.java +++ b/platform-sdk/swirlds-unit-tests/common/swirlds-common-test/src/test/java/com/swirlds/common/test/threading/CachedPoolParallelExecutorTest.java @@ -16,8 +16,8 @@ package com.swirlds.common.test.threading; -import static com.google.common.truth.Truth.assertThat; import static com.swirlds.common.threading.manager.AdHocThreadManager.getStaticThreadManager; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -92,24 +92,24 @@ void testException() { ParallelExecutionException ex; ex = assertThrows(ParallelExecutionException.class, () -> executor.doParallel(task1, task2)); - assertThat(ex).hasCauseThat().isSameInstanceAs(exception1); - assertThat(ex.getSuppressed()).hasLength(1); - assertThat(ex.getSuppressed()[0]).hasCauseThat().isSameInstanceAs(exception2); + assertThat(ex).hasCause(exception1); + assertThat(ex.getSuppressed()).hasSize(1); + assertThat(ex.getSuppressed()[0]).hasCause(exception2); ex = assertThrows(ParallelExecutionException.class, () -> executor.doParallel(task1, noEx)); - assertThat(ex).hasCauseThat().isSameInstanceAs(exception1); + assertThat(ex).hasCause(exception1); assertThat(ex.getSuppressed()).isEmpty(); ex = assertThrows(ParallelExecutionException.class, () -> executor.doParallel(noEx, task2)); - assertThat(ex).hasCauseThat().hasCauseThat().isSameInstanceAs(exception2); + assertThat(ex.getCause()).hasCause(exception2); assertThat(ex.getSuppressed()).isEmpty(); ex = assertThrows(ParallelExecutionException.class, () -> executor.doParallel(task3, noEx)); - assertThat(ex).hasCauseThat().isSameInstanceAs(error1); + assertThat(ex).hasCause(error1); assertThat(ex.getSuppressed()).isEmpty(); ex = assertThrows(ParallelExecutionException.class, () -> executor.doParallel(noEx, task3)); - assertThat(ex).hasCauseThat().hasCauseThat().isSameInstanceAs(error1); + assertThat(ex.getCause()).hasCause(error1); assertThat(ex.getSuppressed()).isEmpty(); } }