From 871041e6553ce57373f387c88d66d8609476a01a Mon Sep 17 00:00:00 2001 From: Rushikesh <60548902+RushikeshGandhmal@users.noreply.github.com> Date: Thu, 30 Jul 2026 03:56:51 +0530 Subject: [PATCH] Avoid duplicate pkl-gradle publication (#1777) The java-gradle-plugin already creates the pluginMaven publication. Applying the library publishing convention creates another publication with the same coordinates, causing an overwrite warning during Sonatype publishing. Configure the shared POM metadata, validation, signing, and archive artifacts directly so pkl-gradle retains the convention behavior without creating the duplicate library publication. Fixes #1742 --- build-logic/src/main/kotlin/PklPublishing.kt | 25 ++++++++++++-------- pkl-gradle/pkl-gradle.gradle.kts | 12 +++++++++- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/build-logic/src/main/kotlin/PklPublishing.kt b/build-logic/src/main/kotlin/PklPublishing.kt index fe69b47c0..86a7aa726 100644 --- a/build-logic/src/main/kotlin/PklPublishing.kt +++ b/build-logic/src/main/kotlin/PklPublishing.kt @@ -61,26 +61,31 @@ fun Project.configurePklPomMetadata() { } } -/** Configures POM validation task to check for unresolved versions and snapshots in releases. */ -fun Project.configurePomValidation() { +/** + * Configures POM validation for [publicationName] to check for unresolved versions and snapshots in + * releases. + */ +fun Project.configurePomValidation(publicationName: String = "library") { + val generatePomTaskName = + "generatePomFileFor${publicationName.replaceFirstChar { it.uppercase() }}Publication" + val generatePomTasks = + tasks.withType().matching { it.name == generatePomTaskName } + val pomFiles = providers.provider { generatePomTasks.map { it.destination } } + val validatePom = tasks.register("validatePom") { - if (tasks.findByName("generatePomFileForLibraryPublication") == null) { - return@register - } - val generatePomFileForLibraryPublication = - tasks.named("generatePomFileForLibraryPublication") val outputFile = layout.buildDirectory.file("validatePom") // dummy output to satisfy up-to-date check - dependsOn(generatePomFileForLibraryPublication) - inputs.file(generatePomFileForLibraryPublication.get().destination) + dependsOn(generatePomTasks) + inputs.files(pomFiles) outputs.file(outputFile) + onlyIf { pomFiles.get().isNotEmpty() } doLast { outputFile.get().asFile.delete() - val pomFile = generatePomFileForLibraryPublication.get().destination + val pomFile = pomFiles.get().single() assert(pomFile.exists()) val text = pomFile.readText() diff --git a/pkl-gradle/pkl-gradle.gradle.kts b/pkl-gradle/pkl-gradle.gradle.kts index ac6a53b96..325ad83b1 100644 --- a/pkl-gradle/pkl-gradle.gradle.kts +++ b/pkl-gradle/pkl-gradle.gradle.kts @@ -20,10 +20,20 @@ plugins { id("pklJSpecify") `java-gradle-plugin` `maven-publish` - id("pklPublishLibrary") signing } +configurePklPomMetadata() + +configurePomValidation("pluginMaven") + +configurePklSigning() + +artifacts { + tasks.findByName("javadocJar")?.let { archives(it) } + tasks.findByName("sourcesJar")?.let { archives(it) } +} + dependencies { // Declare a `compileOnly` dependency on `projects.pklTools` // to ensure correct code navigation in IntelliJ.