Build: Make Gradle plugin publications reuse POMs from the main one
#KTI-571
This commit is contained in:
committed by
teamcityserver
parent
80677c88cb
commit
a0469a1d62
@@ -1,6 +1,6 @@
|
|||||||
@file:Suppress("unused") // usages in build scripts are not tracked properly
|
@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.Project
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.artifacts.ConfigurablePublishArtifact
|
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.maven.MavenPublication
|
||||||
import org.gradle.api.publish.tasks.GenerateModuleMetadata
|
import org.gradle.api.publish.tasks.GenerateModuleMetadata
|
||||||
import org.gradle.api.tasks.TaskProvider
|
import org.gradle.api.tasks.TaskProvider
|
||||||
import org.gradle.api.tasks.Upload
|
|
||||||
import org.gradle.api.tasks.javadoc.Javadoc
|
import org.gradle.api.tasks.javadoc.Javadoc
|
||||||
import org.gradle.jvm.tasks.Jar
|
import org.gradle.jvm.tasks.Jar
|
||||||
import org.gradle.kotlin.dsl.*
|
import org.gradle.kotlin.dsl.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetContainer
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetContainer
|
||||||
import plugins.KotlinBuildPublishingPlugin
|
import plugins.KotlinBuildPublishingPlugin
|
||||||
|
import plugins.mainPublicationName
|
||||||
|
|
||||||
|
|
||||||
private const val MAGIC_DO_NOT_CHANGE_TEST_JAR_TASK_NAME = "testJar"
|
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<PublishingExtension>()
|
val publication = extensions.findByType<PublishingExtension>()
|
||||||
?.publications
|
?.publications
|
||||||
?.findByName(KotlinBuildPublishingPlugin.PUBLICATION_NAME) as MavenPublication
|
?.findByName(mainPublicationName) as MavenPublication
|
||||||
publication.configure()
|
publication.configure()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Project.publishGradlePlugin() {
|
||||||
|
mainPublicationName = "pluginMaven"
|
||||||
|
publish()
|
||||||
|
|
||||||
|
afterEvaluate {
|
||||||
|
tasks.withType<PublishTask> {
|
||||||
|
// Makes plugin publication task reuse poms and metadata from publication named "pluginMaven"
|
||||||
|
useAutomatedPublishing()
|
||||||
|
useGradleModuleMetadataIfAvailable()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun Project.idePluginDependency(block: () -> Unit) {
|
fun Project.idePluginDependency(block: () -> Unit) {
|
||||||
val shouldActivate = rootProject.findProperty("publish.ide.plugin.dependencies")?.toString()?.toBoolean() == true
|
val shouldActivate = rootProject.findProperty("publish.ide.plugin.dependencies")?.toString()?.toBoolean() == true
|
||||||
if (shouldActivate) {
|
if (shouldActivate) {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ plugins {
|
|||||||
kotlin("jvm")
|
kotlin("jvm")
|
||||||
}
|
}
|
||||||
|
|
||||||
publish()
|
publishGradlePlugin()
|
||||||
standardPublicJars()
|
standardPublicJars()
|
||||||
|
|
||||||
extensions.extraProperties["kotlin.stdlib.default.dependency"] = "false"
|
extensions.extraProperties["kotlin.stdlib.default.dependency"] = "false"
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import org.gradle.api.tasks.bundling.Jar
|
|||||||
import org.gradle.kotlin.dsl.*
|
import org.gradle.kotlin.dsl.*
|
||||||
import plugins.KotlinBuildPublishingPlugin
|
import plugins.KotlinBuildPublishingPlugin
|
||||||
import plugins.configureRepository
|
import plugins.configureRepository
|
||||||
|
import plugins.mainPublicationName
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
internal const val PLUGIN_MARKER_SUFFIX = ".gradle.plugin"
|
internal const val PLUGIN_MARKER_SUFFIX = ".gradle.plugin"
|
||||||
@@ -26,7 +27,7 @@ fun Project.publishPluginMarkers(withEmptyJars: Boolean = true) {
|
|||||||
|
|
||||||
val pluginDevelopment = extensions.getByType<PluginBundleExtension>()
|
val pluginDevelopment = extensions.getByType<PluginBundleExtension>()
|
||||||
val publishingExtension = extensions.getByType<PublishingExtension>()
|
val publishingExtension = extensions.getByType<PublishingExtension>()
|
||||||
val mainPublication = publishingExtension.publications[KotlinBuildPublishingPlugin.PUBLICATION_NAME] as MavenPublication
|
val mainPublication = publishingExtension.publications[mainPublicationName] as MavenPublication
|
||||||
|
|
||||||
pluginDevelopment.plugins.forEach { declaration ->
|
pluginDevelopment.plugins.forEach { declaration ->
|
||||||
val markerPublication = createMavenMarkerPublication(declaration, mainPublication, publishingExtension.publications)
|
val markerPublication = createMavenMarkerPublication(declaration, mainPublication, publishingExtension.publications)
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ class KotlinBuildPublishingPlugin @Inject constructor(
|
|||||||
|
|
||||||
configure<PublishingExtension> {
|
configure<PublishingExtension> {
|
||||||
publications {
|
publications {
|
||||||
create<MavenPublication>(PUBLICATION_NAME) {
|
create<MavenPublication>(project.mainPublicationName) {
|
||||||
from(kotlinLibraryComponent)
|
from(kotlinLibraryComponent)
|
||||||
|
|
||||||
configureKotlinPomAttributes(project)
|
configureKotlinPomAttributes(project)
|
||||||
@@ -79,16 +79,26 @@ class KotlinBuildPublishingPlugin @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
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 REPOSITORY_NAME = "Maven"
|
||||||
const val ADHOC_COMPONENT_NAME = "kotlinLibrary"
|
const val ADHOC_COMPONENT_NAME = "kotlinLibrary"
|
||||||
|
|
||||||
const val COMPILE_CONFIGURATION = "publishedCompile"
|
const val COMPILE_CONFIGURATION = "publishedCompile"
|
||||||
const val RUNTIME_CONFIGURATION = "publishedRuntime"
|
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)
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
private fun humanReadableName(name: String) =
|
private fun humanReadableName(name: String) =
|
||||||
name.split("-").joinToString(separator = " ") { it.capitalize(Locale.ROOT) }
|
name.split("-").joinToString(separator = " ") { it.capitalize(Locale.ROOT) }
|
||||||
|
|||||||
@@ -135,6 +135,10 @@ ext.configurePublishing = { Project project, configure = { } ->
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ext.configureGradlePluginPublishing = { Project project ->
|
||||||
|
ArtifactsKt.publishGradlePlugin(project)
|
||||||
|
}
|
||||||
|
|
||||||
ext.configurePluginMarkers = { Project project, withEmptyJars = true ->
|
ext.configurePluginMarkers = { Project project, withEmptyJars = true ->
|
||||||
PluginMarkersKt.publishPluginMarkers(project, withEmptyJars)
|
PluginMarkersKt.publishPluginMarkers(project, withEmptyJars)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,10 +35,6 @@ configure(pluginProjects) { project ->
|
|||||||
vcsUrl = 'https://github.com/JetBrains/kotlin/'
|
vcsUrl = 'https://github.com/JetBrains/kotlin/'
|
||||||
description = 'Kotlin plugins for Gradle'
|
description = 'Kotlin plugins for Gradle'
|
||||||
tags = ['kotlin']
|
tags = ['kotlin']
|
||||||
|
|
||||||
mavenCoordinates {
|
|
||||||
groupId = "org.jetbrains.kotlin"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
apply plugin: 'kotlin'
|
apply plugin: 'kotlin'
|
||||||
apply plugin: 'jps-compatible'
|
apply plugin: 'jps-compatible'
|
||||||
|
|
||||||
configurePublishing(project)
|
configureGradlePluginPublishing(project)
|
||||||
|
|
||||||
pill {
|
pill {
|
||||||
variant = 'FULL'
|
variant = 'FULL'
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ dependencies {
|
|||||||
|
|
||||||
projectTest(parallel = true)
|
projectTest(parallel = true)
|
||||||
|
|
||||||
publish()
|
publishGradlePlugin()
|
||||||
|
|
||||||
sourcesJar()
|
sourcesJar()
|
||||||
javadocJar()
|
javadocJar()
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
apply plugin: 'kotlin'
|
apply plugin: 'kotlin'
|
||||||
apply plugin: 'jps-compatible'
|
apply plugin: 'jps-compatible'
|
||||||
|
|
||||||
configurePublishing(project)
|
configureGradlePluginPublishing(project)
|
||||||
|
|
||||||
compileJava {
|
compileJava {
|
||||||
sourceCompatibility = 1.8
|
sourceCompatibility = 1.8
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
apply plugin: 'kotlin'
|
apply plugin: 'kotlin'
|
||||||
apply plugin: 'jps-compatible'
|
apply plugin: 'jps-compatible'
|
||||||
|
|
||||||
configurePublishing(project)
|
configureGradlePluginPublishing(project)
|
||||||
|
|
||||||
pill {
|
pill {
|
||||||
variant = 'FULL'
|
variant = 'FULL'
|
||||||
|
|||||||
Reference in New Issue
Block a user