diff --git a/bouncy-castle/bc/build.gradle.kts b/bouncy-castle/bc/build.gradle.kts index 973167d36af49..517da4a5c54a8 100644 --- a/bouncy-castle/bc/build.gradle.kts +++ b/bouncy-castle/bc/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/bouncy-castle/bcfips/build.gradle.kts b/bouncy-castle/bcfips/build.gradle.kts index ba662f2696668..3a2566d1c8a44 100644 --- a/bouncy-castle/bcfips/build.gradle.kts +++ b/bouncy-castle/bcfips/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/build-logic/conventions/src/main/kotlin/pulsar.java-conventions.gradle.kts b/build-logic/conventions/src/main/kotlin/pulsar.java-conventions.gradle.kts index daf10c9009858..54f81a983fb25 100644 --- a/build-logic/conventions/src/main/kotlin/pulsar.java-conventions.gradle.kts +++ b/build-logic/conventions/src/main/kotlin/pulsar.java-conventions.gradle.kts @@ -24,9 +24,6 @@ plugins { val catalog = the().named("libs") -group = "org.apache.pulsar" -version = catalog.findVersion("pulsar").get().requiredVersion - tasks.withType().configureEach { options.encoding = "UTF-8" options.release.set(17) diff --git a/build-logic/conventions/src/main/kotlin/pulsar.nar-conventions.gradle.kts b/build-logic/conventions/src/main/kotlin/pulsar.nar-conventions.gradle.kts index d51ebc8ad23e6..c101449289572 100644 --- a/build-logic/conventions/src/main/kotlin/pulsar.nar-conventions.gradle.kts +++ b/build-logic/conventions/src/main/kotlin/pulsar.nar-conventions.gradle.kts @@ -19,10 +19,12 @@ // Convention plugin for NAR (Nifi Archive) modules. // Configures platform module exclusions from runtimeClasspath, forces JAR artifacts -// for bundled-dependencies, and handles archive name qualification. +// for bundled-dependencies, handles archive name qualification, and publishes the +// NAR artifact with an empty POM (no dependencies — everything is bundled). plugins { id("io.github.merlimat.nar") + id("pulsar.publish-conventions") } // NAR modules should not bundle Pulsar platform dependencies — they are provided @@ -91,3 +93,26 @@ if (parentProject != null && parentProject != rootProject && parentProject.paren val narIdProp = narExt.javaClass.getMethod("getNarId").invoke(narExt) as org.gradle.api.provider.Property narIdProp.set(qualifiedName) } + +// --- NAR publishing: publish only the .nar artifact with an empty POM --- +// NAR modules bundle all dependencies, so the POM should have no section. +publishing { + publications { + named("maven") { + // Replace component-based artifacts with just the NAR file + artifacts.clear() + artifact(tasks.named("nar")) + pom { + packaging = "nar" + // Remove all dependencies — NAR bundles everything + withXml { + val root = asNode() + root.children().removeAll { node -> + val name = (node as groovy.util.Node).name() + name.toString().contains("dependencies") + } + } + } + } + } +} diff --git a/build-logic/conventions/src/main/kotlin/pulsar.public-java-library-conventions.gradle.kts b/build-logic/conventions/src/main/kotlin/pulsar.public-java-library-conventions.gradle.kts new file mode 100644 index 0000000000000..45010ea637804 --- /dev/null +++ b/build-logic/conventions/src/main/kotlin/pulsar.public-java-library-conventions.gradle.kts @@ -0,0 +1,69 @@ +/* + * 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. + */ + +// Convention plugin for public Pulsar Java libraries that are published to Maven repositories. +// Combines java-conventions (compilation, testing) with publish-conventions (Maven publishing, +// signing, POM metadata). Internal-only modules should use pulsar.java-conventions directly. + +plugins { + id("pulsar.java-conventions") + id("pulsar.publish-conventions") +} + +// Validate that public java-library modules only depend on other published modules +// in scopes that end up in the published POM (api, implementation, runtimeOnly). +// Test/compileOnly scoped dependencies are excluded since they don't appear in the POM. +// NAR modules are not validated here — they bundle all dependencies and have empty POMs. +run { + val publishedScopes = listOf("api", "implementation", "runtimeOnly") + val configsToCheck = publishedScopes.mapNotNull { name -> + configurations.findByName(name)?.let { name to it } + } + val currentProjectPath = project.path + + val unpublishedDeps = provider { + val errors = mutableListOf() + for ((configName, config) in configsToCheck) { + for (dep in config.dependencies) { + if (dep is ProjectDependency) { + val depPath = dep.path + val depProject = project.rootProject.project(depPath) + if (!depProject.plugins.hasPlugin("maven-publish")) { + errors.add(" - $configName -> $depPath (not published)") + } + } + } + } + errors + } + + tasks.withType().configureEach { + val errorList = unpublishedDeps + doFirst { + val errors = errorList.get() + if (errors.isNotEmpty()) { + throw GradleException( + "Published module '$currentProjectPath' depends on unpublished projects:\n" + + errors.joinToString("\n") + "\n" + + "Either publish the dependency or move it to a test/compileOnly scope." + ) + } + } + } +} diff --git a/build-logic/conventions/src/main/kotlin/pulsar.publish-conventions.gradle.kts b/build-logic/conventions/src/main/kotlin/pulsar.publish-conventions.gradle.kts new file mode 100644 index 0000000000000..eae72273f310f --- /dev/null +++ b/build-logic/conventions/src/main/kotlin/pulsar.publish-conventions.gradle.kts @@ -0,0 +1,181 @@ +/* + * 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. + */ + +// Convention plugin for publishing Pulsar modules to Maven repositories. +// Configures maven-publish, GPG signing, POM metadata, sources/javadoc JARs, +// and a local deploy repository for testing. + +plugins { + `maven-publish` + signing +} + +// --- java-library projects: JAR + sources + javadoc --- +pluginManager.withPlugin("java-library") { + val sourceSets = the() + + // Match Maven's javadoc configuration: no doclint, don't fail on errors + tasks.withType().configureEach { + (options as StandardJavadocDocletOptions).apply { + addStringOption("Xdoclint:none", "-quiet") + } + isFailOnError = false + } + + val sourcesJar by tasks.registering(Jar::class) { + archiveClassifier.set("sources") + from(sourceSets["main"].allJava) + } + + val javadocJar by tasks.registering(Jar::class) { + archiveClassifier.set("javadoc") + from(tasks.named(JavaPlugin.JAVADOC_TASK_NAME)) + } + + // Standard java-library modules: publish from components["java"] + publishing { + publications { + create("maven") { + from(components["java"]) + artifact(sourcesJar) + artifact(javadocJar) + + versionMapping { + usage(Usage.JAVA_RUNTIME) { + fromResolutionResult() + } + usage(Usage.JAVA_API) { + fromResolutionOf("runtimeClasspath") + } + } + } + } + } + +} + +// --- java-platform projects (BOM, dependencies): POM-only, no JAR --- +pluginManager.withPlugin("java-platform") { + publishing { + publications { + create("maven") { + from(components["javaPlatform"]) + } + } + } +} + +// --- Common POM configuration for all publications --- +run { + // Capture values in a local scope so withXml closures don't capture the script object + // (which would break configuration cache serialization) + val projectName = project.name + val projectDescription = project.description + val archivesNameValue = the().archivesName.get() + val isPlatformProject = plugins.hasPlugin("java-platform") + val isRootProject = project == rootProject + val pulsarVersion = version.toString() + val localDeployRepoDir = rootProject.layout.buildDirectory.dir("local-deploy-repo") + + publishing { + publications { + withType().configureEach { + artifactId = archivesNameValue + + pom { + // Per-module name and description + if (!isRootProject) { + name.set("Apache Pulsar :: $projectName") + description.set(projectDescription ?: "Apache Pulsar :: $projectName") + } + + // Clean up POM XML and inject reference + withXml { + val sb = asString() + var s = sb.toString() + // compile is the Maven default — remove for cleaner POM + s = s.replace("compile", "") + // Remove dependencyManagement from non-platform POMs + // (platform POMs need it — their dependencies ARE the management section) + if (!isPlatformProject) { + s = s.replace( + Regex( + ".*?", + RegexOption.DOT_MATCHES_ALL + ), + "" + ) + } + // Inject reference for child modules (not the root/parent POM itself). + // Metadata (license, SCM, etc.) is inherited from the parent POM. + if (!isRootProject) { + s = s.replace( + "4.0.0", + "4.0.0\n \n" + + " org.apache.pulsar\n" + + " pulsar\n" + + " $pulsarVersion\n" + + " " + ) + } + sb.setLength(0) + sb.append(s) + // Re-format the XML + asNode() + } + } + } + } + + // Local Maven repository for testing/comparison + repositories { + maven { + name = "localDeploy" + url = uri(localDeployRepoDir) + } + } + } +} + +// --- GPG signing --- +signing { + isRequired = !version.toString().endsWith("-SNAPSHOT") + + val useGpgCmd = providers.gradleProperty("useGpgCmd").orNull?.toBoolean() ?: false + if (useGpgCmd) { + useGpgCmd() + } + + sign(publishing.publications) +} + +// Disable signing tasks when no key is configured (local dev without signing) +tasks.withType().configureEach { + enabled = providers.gradleProperty("signing.keyId").isPresent || + providers.gradleProperty("signing.gnupg.keyName").isPresent +} + +// Suppress enforced-platform validation: all java-library modules use +// enforcedPlatform(":pulsar-dependencies") for internal version alignment, +// but this should not leak to consumers. The dependencyManagement section +// is stripped from published POMs via withXml above. +tasks.withType().configureEach { + suppressedValidationErrors.add("enforced-platform") +} + diff --git a/build.gradle.kts b/build.gradle.kts index 8b4e2cc1f4451..7b353a69d96d0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -27,6 +27,8 @@ plugins { alias(libs.plugins.crlf) apply false alias(libs.plugins.idea.ext) alias(libs.plugins.spotless) apply false // workaround for https://github.com/diffplug/spotless/issues/2877 + `maven-publish` + signing } versionCatalogUpdate { @@ -46,8 +48,7 @@ tasks.named(" } } -val catalog = the().named("libs") -val pulsarVersion = catalog.findVersion("pulsar").get().requiredVersion +val pulsarVersion = version.toString() // ── Apache RAT (Release Audit Tool) ───────────────────────────────────────── tasks.named("rat").configure { @@ -97,4 +98,88 @@ tasks.register("docker") { description = "Build the Pulsar Docker image" group = "docker" dependsOn(":docker:pulsar-docker-image:dockerBuild") +} + +// ── Parent POM publication ────────────────────────────────────────────────── +// Publishes org.apache.pulsar:pulsar as a POM-only parent artifact. +// Child modules reference this via in their POMs, inheriting +// shared ASF metadata (license, SCM, organization, etc.). +publishing { + publications { + create("maven") { + pom { + packaging = "pom" + name.set("Apache Pulsar") + description.set( + "Pulsar is a distributed pub-sub messaging platform with a very " + + "flexible messaging model and an intuitive client API." + ) + url.set("https://pulsar.apache.org") + inceptionYear.set("2017") + + licenses { + license { + name.set("The Apache License, Version 2.0") + url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") + distribution.set("repo") + } + } + + organization { + name.set("Apache Software Foundation") + url.set("https://www.apache.org/") + } + + issueManagement { + system.set("GitHub Issues") + url.set("https://github.com/apache/pulsar/issues") + } + + scm { + connection.set("scm:git:https://github.com/apache/pulsar.git") + developerConnection.set("scm:git:https://github.com/apache/pulsar.git") + url.set("https://github.com/apache/pulsar") + tag.set("HEAD") + } + + mailingLists { + mailingList { + name.set("Apache Pulsar developers list") + subscribe.set("dev-subscribe@pulsar.apache.org") + unsubscribe.set("dev-unsubscribe@pulsar.apache.org") + post.set("dev@pulsar.apache.org") + archive.set("https://lists.apache.org/list.html?dev@pulsar.apache.org") + } + } + + developers { + developer { + organization.set("Apache Pulsar developers") + organizationUrl.set("https://pulsar.apache.org/") + } + } + } + } + } + + repositories { + maven { + name = "localDeploy" + url = uri(layout.buildDirectory.dir("local-deploy-repo")) + } + } +} + +signing { + isRequired = !pulsarVersion.endsWith("-SNAPSHOT") + val useGpgCmd = providers.gradleProperty("useGpgCmd").orNull?.toBoolean() ?: false + if (useGpgCmd) { + useGpgCmd() + } + sign(publishing.publications) +} + +tasks.withType().configureEach { + enabled = providers.gradleProperty("signing.keyId").isPresent || + providers.gradleProperty("signing.gnupg.keyName").isPresent } \ No newline at end of file diff --git a/docker/pulsar/build.gradle.kts b/docker/pulsar/build.gradle.kts index a43eea374a707..7aa16772cd59c 100644 --- a/docker/pulsar/build.gradle.kts +++ b/docker/pulsar/build.gradle.kts @@ -17,10 +17,6 @@ * under the License. */ -group = "org.apache.pulsar" -version = the().named("libs").findVersion("pulsar").get().requiredVersion - - val pulsarVersion = project.version.toString() val dockerOrganization = providers.gradleProperty("docker.organization").getOrElse("apachepulsar") val dockerImage = providers.gradleProperty("docker.image").getOrElse("pulsar") diff --git a/gradle.properties b/gradle.properties index 657c24b120dd5..e4b25fe9b5dfb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,8 +17,14 @@ # under the License. # +group=org.apache.pulsar +version=4.3.0-SNAPSHOT + org.gradle.configuration-cache=true org.gradle.configureondemand=true org.gradle.parallel=true org.gradle.caching=true org.gradle.jvmargs=-Xmx4g -Xss2m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError + +# repository.apache.org does not support SHA-256/SHA-512 checksums yet +systemProp.org.gradle.internal.publish.checksums.insecure=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d75fa3a73b76a..2244e3896bd1d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,8 +17,6 @@ # under the License. # [versions] -# Core -pulsar = "4.3.0-SNAPSHOT" # Docker docker-jdk = "21" pulsar-client-python = "3.10.0" diff --git a/gradle/setup-test-gpg.sh b/gradle/setup-test-gpg.sh new file mode 100755 index 0000000000000..239e94b296580 --- /dev/null +++ b/gradle/setup-test-gpg.sh @@ -0,0 +1,64 @@ +#!/bin/bash +# +# 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. +# + +# Creates a temporary GPG keyring for testing artifact signing. +# Does NOT touch ~/.gnupg — uses an isolated keyring in build/tmp-gpg-home. +# +# Usage: +# source gradle/setup-test-gpg.sh +# ./gradlew publishAllPublicationsToLocalDeployRepository \ +# -PuseGpgCmd=true \ +# -Psigning.gnupg.keyName=$TEST_GPG_KEY_ID \ +# -Psigning.gnupg.homeDir=$GNUPGHOME + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)" +PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" + +export GNUPGHOME="$PROJECT_DIR/build/tmp-gpg-home" +mkdir -p "$GNUPGHOME" +chmod 700 "$GNUPGHOME" + +echo "Generating temporary GPG key in $GNUPGHOME ..." +gpg --homedir "$GNUPGHOME" --batch --gen-key </dev/null \ + | grep -E '^\s+[0-9A-F]+' | head -1 | awk '{print $1}') + +export TEST_GPG_KEY_ID + +echo "" +echo "GPG key created: $TEST_GPG_KEY_ID" +echo "GNUPGHOME=$GNUPGHOME" +echo "" +echo "To publish with signing:" +echo " ./gradlew publishAllPublicationsToLocalDeployRepository \\" +echo " -PuseGpgCmd=true \\" +echo " -Psigning.gnupg.keyName=$TEST_GPG_KEY_ID \\" +echo " -Psigning.gnupg.homeDir=$GNUPGHOME" diff --git a/jetty-upgrade/bookkeeper-prometheus-metrics-provider/build.gradle.kts b/jetty-upgrade/bookkeeper-prometheus-metrics-provider/build.gradle.kts index d4cdc61638f18..14d178ae94e85 100644 --- a/jetty-upgrade/bookkeeper-prometheus-metrics-provider/build.gradle.kts +++ b/jetty-upgrade/bookkeeper-prometheus-metrics-provider/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/jetty-upgrade/zookeeper-prometheus-metrics/build.gradle.kts b/jetty-upgrade/zookeeper-prometheus-metrics/build.gradle.kts index 7a3104fd20a2e..092dd458b5553 100644 --- a/jetty-upgrade/zookeeper-prometheus-metrics/build.gradle.kts +++ b/jetty-upgrade/zookeeper-prometheus-metrics/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/jetty-upgrade/zookeeper-with-patched-admin/build.gradle.kts b/jetty-upgrade/zookeeper-with-patched-admin/build.gradle.kts index e0543e6117eae..ceed47555446d 100644 --- a/jetty-upgrade/zookeeper-with-patched-admin/build.gradle.kts +++ b/jetty-upgrade/zookeeper-with-patched-admin/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") id("pulsar.shadow-conventions") } diff --git a/managed-ledger/build.gradle.kts b/managed-ledger/build.gradle.kts index 83f7cef06f668..c959662c3fc69 100644 --- a/managed-ledger/build.gradle.kts +++ b/managed-ledger/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") alias(libs.plugins.lightproto) } diff --git a/pulsar-bom/build.gradle.kts b/pulsar-bom/build.gradle.kts index 12ee01d6b341a..317ddfa451289 100644 --- a/pulsar-bom/build.gradle.kts +++ b/pulsar-bom/build.gradle.kts @@ -23,11 +23,9 @@ plugins { `java-platform` + id("pulsar.publish-conventions") } -group = "org.apache.pulsar" -version = the().named("libs").findVersion("pulsar").get().requiredVersion - // Allow the platform to depend on other projects javaPlatform { allowDependencies() diff --git a/pulsar-broker-auth-athenz/build.gradle.kts b/pulsar-broker-auth-athenz/build.gradle.kts index 7438ce5202549..6ea851f77ff1f 100644 --- a/pulsar-broker-auth-athenz/build.gradle.kts +++ b/pulsar-broker-auth-athenz/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-broker-auth-oidc/build.gradle.kts b/pulsar-broker-auth-oidc/build.gradle.kts index 9c324d9628fef..f9db7cd2b39cd 100644 --- a/pulsar-broker-auth-oidc/build.gradle.kts +++ b/pulsar-broker-auth-oidc/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") id("pulsar.test-certs-conventions") } diff --git a/pulsar-broker-auth-sasl/build.gradle.kts b/pulsar-broker-auth-sasl/build.gradle.kts index 794851b2a97ba..74c0041303e69 100644 --- a/pulsar-broker-auth-sasl/build.gradle.kts +++ b/pulsar-broker-auth-sasl/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") id("pulsar.test-certs-conventions") } diff --git a/pulsar-broker-common/build.gradle.kts b/pulsar-broker-common/build.gradle.kts index 9fee76bc0f0d0..f86a54ccece2a 100644 --- a/pulsar-broker-common/build.gradle.kts +++ b/pulsar-broker-common/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") id("pulsar.test-certs-conventions") } diff --git a/pulsar-broker/build.gradle.kts b/pulsar-broker/build.gradle.kts index 94d0f9697f162..a72bfa27a588c 100644 --- a/pulsar-broker/build.gradle.kts +++ b/pulsar-broker/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") id("pulsar.test-certs-conventions") alias(libs.plugins.protobuf) alias(libs.plugins.lightproto) diff --git a/pulsar-cli-utils/build.gradle.kts b/pulsar-cli-utils/build.gradle.kts index 74d5aa1babb1c..5e0b01267ef2a 100644 --- a/pulsar-cli-utils/build.gradle.kts +++ b/pulsar-cli-utils/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-client-admin-api/build.gradle.kts b/pulsar-client-admin-api/build.gradle.kts index bb17ceff64086..378b05f3eb650 100644 --- a/pulsar-client-admin-api/build.gradle.kts +++ b/pulsar-client-admin-api/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-client-admin-shaded/build.gradle.kts b/pulsar-client-admin-shaded/build.gradle.kts index c4d8b9edbc8dd..df1c0d177f1ee 100644 --- a/pulsar-client-admin-shaded/build.gradle.kts +++ b/pulsar-client-admin-shaded/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") id("pulsar.client-shade-conventions") } diff --git a/pulsar-client-admin/build.gradle.kts b/pulsar-client-admin/build.gradle.kts index 89a71c9a26d68..660f6a416930d 100644 --- a/pulsar-client-admin/build.gradle.kts +++ b/pulsar-client-admin/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-client-all/build.gradle.kts b/pulsar-client-all/build.gradle.kts index f661d5f3b6ac7..f6526e423ed0b 100644 --- a/pulsar-client-all/build.gradle.kts +++ b/pulsar-client-all/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") id("pulsar.client-shade-conventions") } diff --git a/pulsar-client-api/build.gradle.kts b/pulsar-client-api/build.gradle.kts index fa77751849180..6b2323163684f 100644 --- a/pulsar-client-api/build.gradle.kts +++ b/pulsar-client-api/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-client-auth-athenz/build.gradle.kts b/pulsar-client-auth-athenz/build.gradle.kts index 7f8b24b3e2567..b4f20f8d5ff54 100644 --- a/pulsar-client-auth-athenz/build.gradle.kts +++ b/pulsar-client-auth-athenz/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-client-auth-sasl/build.gradle.kts b/pulsar-client-auth-sasl/build.gradle.kts index a70a9bec66eb0..b288496bd631c 100644 --- a/pulsar-client-auth-sasl/build.gradle.kts +++ b/pulsar-client-auth-sasl/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-client-messagecrypto-bc/build.gradle.kts b/pulsar-client-messagecrypto-bc/build.gradle.kts index 2cc7efd4005fb..413a5bc77d7f8 100644 --- a/pulsar-client-messagecrypto-bc/build.gradle.kts +++ b/pulsar-client-messagecrypto-bc/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-client-shaded/build.gradle.kts b/pulsar-client-shaded/build.gradle.kts index afb04c0aab4d4..4822c850d1082 100644 --- a/pulsar-client-shaded/build.gradle.kts +++ b/pulsar-client-shaded/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") id("pulsar.client-shade-conventions") } diff --git a/pulsar-client-tools-api/build.gradle.kts b/pulsar-client-tools-api/build.gradle.kts index acb84f991a85c..0cc1ad36a4958 100644 --- a/pulsar-client-tools-api/build.gradle.kts +++ b/pulsar-client-tools-api/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-client-tools-customcommand-example/build.gradle.kts b/pulsar-client-tools-customcommand-example/build.gradle.kts index 308ce20579570..4995c0c3ccae3 100644 --- a/pulsar-client-tools-customcommand-example/build.gradle.kts +++ b/pulsar-client-tools-customcommand-example/build.gradle.kts @@ -22,6 +22,9 @@ plugins { id("pulsar.nar-conventions") } +// This is an example module — don't publish to Maven repositories +tasks.withType().configureEach { enabled = false } + dependencies { compileOnly(project(":pulsar-client-tools-api")) compileOnly(libs.picocli) diff --git a/pulsar-client-tools/build.gradle.kts b/pulsar-client-tools/build.gradle.kts index d22156476a14d..118f85aa86644 100644 --- a/pulsar-client-tools/build.gradle.kts +++ b/pulsar-client-tools/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-client/build.gradle.kts b/pulsar-client/build.gradle.kts index 6dd1566ad8bb3..bd3a39d705615 100644 --- a/pulsar-client/build.gradle.kts +++ b/pulsar-client/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") alias(libs.plugins.protobuf) } diff --git a/pulsar-common/build.gradle.kts b/pulsar-common/build.gradle.kts index 706814968f4d4..cdfaaeb16c0a3 100644 --- a/pulsar-common/build.gradle.kts +++ b/pulsar-common/build.gradle.kts @@ -23,7 +23,7 @@ import java.time.ZonedDateTime import java.time.format.DateTimeFormatter plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") id("pulsar.test-certs-conventions") alias(libs.plugins.lightproto) } diff --git a/pulsar-config-validation/build.gradle.kts b/pulsar-config-validation/build.gradle.kts index 75c8c25913f87..f24b1804acf24 100644 --- a/pulsar-config-validation/build.gradle.kts +++ b/pulsar-config-validation/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-dependencies/build.gradle.kts b/pulsar-dependencies/build.gradle.kts index f6af10303f481..8e82c7773103a 100644 --- a/pulsar-dependencies/build.gradle.kts +++ b/pulsar-dependencies/build.gradle.kts @@ -22,11 +22,9 @@ // All subprojects consume this via: implementation(enforcedPlatform(project(":pulsar-dependencies"))) plugins { `java-platform` + id("pulsar.publish-conventions") } -group = "org.apache.pulsar" -version = the().named("libs").findVersion("pulsar").get().requiredVersion - // Allow declaring constraints on dependencies that also appear as direct dependencies javaPlatform { allowDependencies() diff --git a/pulsar-docs-tools/build.gradle.kts b/pulsar-docs-tools/build.gradle.kts index 85195ae40cf18..416cf43c56732 100644 --- a/pulsar-docs-tools/build.gradle.kts +++ b/pulsar-docs-tools/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-functions/api-java/build.gradle.kts b/pulsar-functions/api-java/build.gradle.kts index 03f70ca6749b6..99ef39e380f86 100644 --- a/pulsar-functions/api-java/build.gradle.kts +++ b/pulsar-functions/api-java/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-functions/instance/build.gradle.kts b/pulsar-functions/instance/build.gradle.kts index 18e150a702bb4..d9ef29c14fe8f 100644 --- a/pulsar-functions/instance/build.gradle.kts +++ b/pulsar-functions/instance/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-functions/java-examples-builtin/build.gradle.kts b/pulsar-functions/java-examples-builtin/build.gradle.kts index 41ddd77a347ee..b4ca1028aba6c 100644 --- a/pulsar-functions/java-examples-builtin/build.gradle.kts +++ b/pulsar-functions/java-examples-builtin/build.gradle.kts @@ -22,6 +22,9 @@ plugins { id("pulsar.nar-conventions") } +// This is an example module — don't publish to Maven repositories +tasks.withType().configureEach { enabled = false } + dependencies { implementation(project(":pulsar-functions:pulsar-functions-api-examples")) } diff --git a/pulsar-functions/localrun-shaded/build.gradle.kts b/pulsar-functions/localrun-shaded/build.gradle.kts index 963da1354566d..f69c7cba62ebe 100644 --- a/pulsar-functions/localrun-shaded/build.gradle.kts +++ b/pulsar-functions/localrun-shaded/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") id("pulsar.shadow-conventions") } diff --git a/pulsar-functions/localrun/build.gradle.kts b/pulsar-functions/localrun/build.gradle.kts index 79657ce50c1d7..c61c1ba305b3c 100644 --- a/pulsar-functions/localrun/build.gradle.kts +++ b/pulsar-functions/localrun/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-functions/proto/build.gradle.kts b/pulsar-functions/proto/build.gradle.kts index c1a8a0a5d01d4..37e101815e069 100644 --- a/pulsar-functions/proto/build.gradle.kts +++ b/pulsar-functions/proto/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") alias(libs.plugins.lightproto) } diff --git a/pulsar-functions/runtime/build.gradle.kts b/pulsar-functions/runtime/build.gradle.kts index 81d303fe3f838..279136c79e5dc 100644 --- a/pulsar-functions/runtime/build.gradle.kts +++ b/pulsar-functions/runtime/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } // Include parent module's test resources (YAML config files used by WorkerApiV2ResourceConfigTest) diff --git a/pulsar-functions/secrets/build.gradle.kts b/pulsar-functions/secrets/build.gradle.kts index 41c15e9d968de..2cc40772e0913 100644 --- a/pulsar-functions/secrets/build.gradle.kts +++ b/pulsar-functions/secrets/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-functions/utils/build.gradle.kts b/pulsar-functions/utils/build.gradle.kts index 878d474b8c8c1..37c31000a0ea5 100644 --- a/pulsar-functions/utils/build.gradle.kts +++ b/pulsar-functions/utils/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-functions/worker/build.gradle.kts b/pulsar-functions/worker/build.gradle.kts index 2a387fa3ccdb3..d2b3a614f005b 100644 --- a/pulsar-functions/worker/build.gradle.kts +++ b/pulsar-functions/worker/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } // Include parent module's test resources (YAML config files) diff --git a/pulsar-io/batch-discovery-triggerers/build.gradle.kts b/pulsar-io/batch-discovery-triggerers/build.gradle.kts index 9db6850d4109a..8b16d397c17e7 100644 --- a/pulsar-io/batch-discovery-triggerers/build.gradle.kts +++ b/pulsar-io/batch-discovery-triggerers/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-io/common/build.gradle.kts b/pulsar-io/common/build.gradle.kts index eb7d0298ae139..24ed7359cd4db 100644 --- a/pulsar-io/common/build.gradle.kts +++ b/pulsar-io/common/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-io/core/build.gradle.kts b/pulsar-io/core/build.gradle.kts index ef3d69c68c72e..1fb04bed6e89a 100644 --- a/pulsar-io/core/build.gradle.kts +++ b/pulsar-io/core/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-metadata/build.gradle.kts b/pulsar-metadata/build.gradle.kts index 5e5ec2bada4c5..13b3795cb3c3e 100644 --- a/pulsar-metadata/build.gradle.kts +++ b/pulsar-metadata/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-opentelemetry/build.gradle.kts b/pulsar-opentelemetry/build.gradle.kts index d5f1484db1bdb..8563f5d4a6d0f 100644 --- a/pulsar-opentelemetry/build.gradle.kts +++ b/pulsar-opentelemetry/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-package-management/bookkeeper-storage/build.gradle.kts b/pulsar-package-management/bookkeeper-storage/build.gradle.kts index 7259549bb66ca..11d2e19ed6dff 100644 --- a/pulsar-package-management/bookkeeper-storage/build.gradle.kts +++ b/pulsar-package-management/bookkeeper-storage/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-package-management/core/build.gradle.kts b/pulsar-package-management/core/build.gradle.kts index f6ef9d6783ceb..be0e227bcfd8a 100644 --- a/pulsar-package-management/core/build.gradle.kts +++ b/pulsar-package-management/core/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-package-management/filesystem-storage/build.gradle.kts b/pulsar-package-management/filesystem-storage/build.gradle.kts index 426b69e5cf8d6..6bd29bb9cc195 100644 --- a/pulsar-package-management/filesystem-storage/build.gradle.kts +++ b/pulsar-package-management/filesystem-storage/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/pulsar-proxy/build.gradle.kts b/pulsar-proxy/build.gradle.kts index 0d15fdff6bffe..8d0966893af5d 100644 --- a/pulsar-proxy/build.gradle.kts +++ b/pulsar-proxy/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") id("pulsar.test-certs-conventions") } diff --git a/pulsar-testclient/build.gradle.kts b/pulsar-testclient/build.gradle.kts index 4ccf89f03004f..012e348563380 100644 --- a/pulsar-testclient/build.gradle.kts +++ b/pulsar-testclient/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") id("pulsar.test-certs-conventions") } diff --git a/pulsar-transaction/common/build.gradle.kts b/pulsar-transaction/common/build.gradle.kts index 6b804f410972d..7eadba5ef7064 100644 --- a/pulsar-transaction/common/build.gradle.kts +++ b/pulsar-transaction/common/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } // pulsar-transaction-common has no internal Pulsar dependencies diff --git a/pulsar-transaction/coordinator/build.gradle.kts b/pulsar-transaction/coordinator/build.gradle.kts index 90c1e41505f6e..e33199002aa5c 100644 --- a/pulsar-transaction/coordinator/build.gradle.kts +++ b/pulsar-transaction/coordinator/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") alias(libs.plugins.lightproto) } diff --git a/pulsar-websocket/build.gradle.kts b/pulsar-websocket/build.gradle.kts index f926f6548ae7b..20351173397b6 100644 --- a/pulsar-websocket/build.gradle.kts +++ b/pulsar-websocket/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/structured-event-log/build.gradle.kts b/structured-event-log/build.gradle.kts index d5646e34e2bb5..dd811ed15f49b 100644 --- a/structured-event-log/build.gradle.kts +++ b/structured-event-log/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/testmocks/build.gradle.kts b/testmocks/build.gradle.kts index 74d8027753e40..4a3ec2524f061 100644 --- a/testmocks/build.gradle.kts +++ b/testmocks/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("pulsar.java-conventions") + id("pulsar.public-java-library-conventions") } dependencies { diff --git a/tests/docker-images/java-test-image/build.gradle.kts b/tests/docker-images/java-test-image/build.gradle.kts index 744878667ca63..5b2108a0db253 100644 --- a/tests/docker-images/java-test-image/build.gradle.kts +++ b/tests/docker-images/java-test-image/build.gradle.kts @@ -17,10 +17,6 @@ * under the License. */ -group = "org.apache.pulsar" -version = the().named("libs").findVersion("pulsar").get().requiredVersion - - val pulsarVersion = project.version.toString() val dockerOrganization = providers.gradleProperty("docker.organization").getOrElse("apachepulsar") val dockerTag = providers.gradleProperty("docker.tag").getOrElse("latest") diff --git a/tests/docker-images/latest-version-image/build.gradle.kts b/tests/docker-images/latest-version-image/build.gradle.kts index 4d7c14cc2124b..2a22bbcc47544 100644 --- a/tests/docker-images/latest-version-image/build.gradle.kts +++ b/tests/docker-images/latest-version-image/build.gradle.kts @@ -17,10 +17,6 @@ * under the License. */ -group = "org.apache.pulsar" -version = the().named("libs").findVersion("pulsar").get().requiredVersion - - val pulsarVersion = project.version.toString() val dockerOrganization = providers.gradleProperty("docker.organization").getOrElse("apachepulsar") val dockerTag = providers.gradleProperty("docker.tag").getOrElse("latest")