From a0469a1d6244c3ce85c07e7b13da39e60399c2ff Mon Sep 17 00:00:00 2001 From: Vyacheslav Gerasimov Date: Fri, 4 Jun 2021 03:00:56 +0300 Subject: [PATCH] Build: Make Gradle plugin publications reuse POMs from the main one #KTI-571 --- buildSrc/src/main/kotlin/artifacts.kt | 19 ++++++++++++++++--- ...dle-plugin-common-configuration.gradle.kts | 2 +- buildSrc/src/main/kotlin/pluginMarkers.kt | 3 ++- .../plugins/KotlinBuildPublishingPlugin.kt | 16 +++++++++++++--- libraries/commonConfiguration.gradle | 4 ++++ libraries/configureGradleTools.gradle | 4 ---- libraries/tools/kotlin-allopen/build.gradle | 2 +- .../tools/kotlin-lombok/build.gradle.kts | 2 +- libraries/tools/kotlin-noarg/build.gradle | 2 +- .../tools/kotlin-serialization/build.gradle | 2 +- 10 files changed, 40 insertions(+), 16 deletions(-) diff --git a/buildSrc/src/main/kotlin/artifacts.kt b/buildSrc/src/main/kotlin/artifacts.kt index bc5116b0fbc..a9c63924e55 100644 --- a/buildSrc/src/main/kotlin/artifacts.kt +++ b/buildSrc/src/main/kotlin/artifacts.kt @@ -1,6 +1,6 @@ @file:Suppress("unused") // usages in build scripts are not tracked properly -import org.gradle.api.GradleException +import com.gradle.publish.PublishTask import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.artifacts.ConfigurablePublishArtifact @@ -22,12 +22,12 @@ import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.publish.tasks.GenerateModuleMetadata import org.gradle.api.tasks.TaskProvider -import org.gradle.api.tasks.Upload import org.gradle.api.tasks.javadoc.Javadoc import org.gradle.jvm.tasks.Jar import org.gradle.kotlin.dsl.* import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetContainer import plugins.KotlinBuildPublishingPlugin +import plugins.mainPublicationName private const val MAGIC_DO_NOT_CHANGE_TEST_JAR_TASK_NAME = "testJar" @@ -225,10 +225,23 @@ fun Project.publish(moduleMetadata: Boolean = false, configure: MavenPublication val publication = extensions.findByType() ?.publications - ?.findByName(KotlinBuildPublishingPlugin.PUBLICATION_NAME) as MavenPublication + ?.findByName(mainPublicationName) as MavenPublication publication.configure() } +fun Project.publishGradlePlugin() { + mainPublicationName = "pluginMaven" + publish() + + afterEvaluate { + tasks.withType { + // Makes plugin publication task reuse poms and metadata from publication named "pluginMaven" + useAutomatedPublishing() + useGradleModuleMetadataIfAvailable() + } + } +} + fun Project.idePluginDependency(block: () -> Unit) { val shouldActivate = rootProject.findProperty("publish.ide.plugin.dependencies")?.toString()?.toBoolean() == true if (shouldActivate) { diff --git a/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts b/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts index 10bb1d84bb2..dee541735fd 100644 --- a/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts +++ b/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts @@ -8,7 +8,7 @@ plugins { kotlin("jvm") } -publish() +publishGradlePlugin() standardPublicJars() extensions.extraProperties["kotlin.stdlib.default.dependency"] = "false" diff --git a/buildSrc/src/main/kotlin/pluginMarkers.kt b/buildSrc/src/main/kotlin/pluginMarkers.kt index 31eb727a075..ab82d4b1e9f 100644 --- a/buildSrc/src/main/kotlin/pluginMarkers.kt +++ b/buildSrc/src/main/kotlin/pluginMarkers.kt @@ -14,6 +14,7 @@ import org.gradle.api.tasks.bundling.Jar import org.gradle.kotlin.dsl.* import plugins.KotlinBuildPublishingPlugin import plugins.configureRepository +import plugins.mainPublicationName import java.util.* internal const val PLUGIN_MARKER_SUFFIX = ".gradle.plugin" @@ -26,7 +27,7 @@ fun Project.publishPluginMarkers(withEmptyJars: Boolean = true) { val pluginDevelopment = extensions.getByType() val publishingExtension = extensions.getByType() - val mainPublication = publishingExtension.publications[KotlinBuildPublishingPlugin.PUBLICATION_NAME] as MavenPublication + val mainPublication = publishingExtension.publications[mainPublicationName] as MavenPublication pluginDevelopment.plugins.forEach { declaration -> val markerPublication = createMavenMarkerPublication(declaration, mainPublication, publishingExtension.publications) diff --git a/buildSrc/src/main/kotlin/plugins/KotlinBuildPublishingPlugin.kt b/buildSrc/src/main/kotlin/plugins/KotlinBuildPublishingPlugin.kt index 3c543a2d03d..7b05e2d7377 100644 --- a/buildSrc/src/main/kotlin/plugins/KotlinBuildPublishingPlugin.kt +++ b/buildSrc/src/main/kotlin/plugins/KotlinBuildPublishingPlugin.kt @@ -68,7 +68,7 @@ class KotlinBuildPublishingPlugin @Inject constructor( configure { publications { - create(PUBLICATION_NAME) { + create(project.mainPublicationName) { from(kotlinLibraryComponent) configureKotlinPomAttributes(project) @@ -79,16 +79,26 @@ class KotlinBuildPublishingPlugin @Inject constructor( } companion object { - const val PUBLICATION_NAME = "Main" + const val DEFAULT_MAIN_PUBLICATION_NAME = "Main" + const val MAIN_PUBLICATION_NAME_PROPERTY = "MainPublicationName" const val REPOSITORY_NAME = "Maven" const val ADHOC_COMPONENT_NAME = "kotlinLibrary" const val COMPILE_CONFIGURATION = "publishedCompile" const val RUNTIME_CONFIGURATION = "publishedRuntime" - } } +var Project.mainPublicationName: String + get() { + return if (project.extra.has(KotlinBuildPublishingPlugin.MAIN_PUBLICATION_NAME_PROPERTY)) + project.extra.get(KotlinBuildPublishingPlugin.MAIN_PUBLICATION_NAME_PROPERTY) as String + else KotlinBuildPublishingPlugin.DEFAULT_MAIN_PUBLICATION_NAME + } + set(value) { + project.extra.set(KotlinBuildPublishingPlugin.MAIN_PUBLICATION_NAME_PROPERTY, value) + } + @OptIn(ExperimentalStdlibApi::class) private fun humanReadableName(name: String) = name.split("-").joinToString(separator = " ") { it.capitalize(Locale.ROOT) } diff --git a/libraries/commonConfiguration.gradle b/libraries/commonConfiguration.gradle index 0bdd1d94103..f17358a95ec 100644 --- a/libraries/commonConfiguration.gradle +++ b/libraries/commonConfiguration.gradle @@ -135,6 +135,10 @@ ext.configurePublishing = { Project project, configure = { } -> } } +ext.configureGradlePluginPublishing = { Project project -> + ArtifactsKt.publishGradlePlugin(project) +} + ext.configurePluginMarkers = { Project project, withEmptyJars = true -> PluginMarkersKt.publishPluginMarkers(project, withEmptyJars) } diff --git a/libraries/configureGradleTools.gradle b/libraries/configureGradleTools.gradle index d1ac6ed33ac..4434b0939ad 100644 --- a/libraries/configureGradleTools.gradle +++ b/libraries/configureGradleTools.gradle @@ -35,10 +35,6 @@ configure(pluginProjects) { project -> vcsUrl = 'https://github.com/JetBrains/kotlin/' description = 'Kotlin plugins for Gradle' tags = ['kotlin'] - - mavenCoordinates { - groupId = "org.jetbrains.kotlin" - } } } } diff --git a/libraries/tools/kotlin-allopen/build.gradle b/libraries/tools/kotlin-allopen/build.gradle index cc85eb13c72..4837262e8eb 100644 --- a/libraries/tools/kotlin-allopen/build.gradle +++ b/libraries/tools/kotlin-allopen/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'kotlin' apply plugin: 'jps-compatible' -configurePublishing(project) +configureGradlePluginPublishing(project) pill { variant = 'FULL' diff --git a/libraries/tools/kotlin-lombok/build.gradle.kts b/libraries/tools/kotlin-lombok/build.gradle.kts index 55880aac065..17afc442500 100644 --- a/libraries/tools/kotlin-lombok/build.gradle.kts +++ b/libraries/tools/kotlin-lombok/build.gradle.kts @@ -17,7 +17,7 @@ dependencies { projectTest(parallel = true) -publish() +publishGradlePlugin() sourcesJar() javadocJar() diff --git a/libraries/tools/kotlin-noarg/build.gradle b/libraries/tools/kotlin-noarg/build.gradle index 2cd5fb8f2d9..04ff0a7ed50 100644 --- a/libraries/tools/kotlin-noarg/build.gradle +++ b/libraries/tools/kotlin-noarg/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'kotlin' apply plugin: 'jps-compatible' -configurePublishing(project) +configureGradlePluginPublishing(project) compileJava { sourceCompatibility = 1.8 diff --git a/libraries/tools/kotlin-serialization/build.gradle b/libraries/tools/kotlin-serialization/build.gradle index 0435633cc5f..392b8d46a6f 100644 --- a/libraries/tools/kotlin-serialization/build.gradle +++ b/libraries/tools/kotlin-serialization/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'kotlin' apply plugin: 'jps-compatible' -configurePublishing(project) +configureGradlePluginPublishing(project) pill { variant = 'FULL'