From 2a78a8dade45bbbff962dad5ae32ab20e6100fcc Mon Sep 17 00:00:00 2001 From: Vasily Levchenko Date: Tue, 17 Jul 2018 17:17:17 +0300 Subject: [PATCH] [gradle][experimental] publish the per component pom into variant generated publications --- .../experimental/KotlinNativeComponent.kt | 3 +++ .../internal/AbstractKotlinNativeComponent.kt | 6 ++++++ .../plugins/KotlinNativePlugin.kt | 20 +++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeComponent.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeComponent.kt index f7c04a1b494..d805706f1df 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeComponent.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/KotlinNativeComponent.kt @@ -1,8 +1,10 @@ package org.jetbrains.kotlin.gradle.plugin.experimental +import org.gradle.api.Action import org.gradle.api.artifacts.Configuration import org.gradle.api.provider.Provider import org.gradle.api.provider.SetProperty +import org.gradle.api.publish.maven.MavenPom import org.gradle.language.BinaryCollection import org.gradle.language.ComponentWithBinaries import org.gradle.language.ComponentWithDependencies @@ -43,6 +45,7 @@ interface KotlinNativeComponent: ComponentWithBinaries, ComponentWithDependencie fun extraOpts(vararg values: Any) fun extraOpts(values: List) + fun pom(action: Action) // endregion } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeComponent.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeComponent.kt index 5ec3c805eee..143c338407e 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeComponent.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/AbstractKotlinNativeComponent.kt @@ -1,10 +1,12 @@ package org.jetbrains.kotlin.gradle.plugin.experimental.internal +import org.gradle.api.Action import org.gradle.api.artifacts.Configuration import org.gradle.api.internal.file.FileOperations import org.gradle.api.internal.provider.LockableSetProperty import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Property +import org.gradle.api.publish.maven.MavenPom import org.gradle.language.internal.DefaultBinaryCollection import org.gradle.language.internal.DefaultComponentDependencies import org.gradle.language.nativeplatform.internal.ComponentWithNames @@ -47,6 +49,7 @@ abstract class AbstractKotlinNativeComponent @Inject constructor( private val dependencies: DefaultComponentDependencies = objectFactory.newInstance( DefaultComponentDependencies::class.java, names.withSuffix("implementation")) + internal val poms = mutableListOf>() override fun getDependencies() = dependencies @@ -66,5 +69,8 @@ abstract class AbstractKotlinNativeComponent @Inject constructor( extraOpts.addAll(values.map { it.toString() }) } + override fun pom(action: Action) { + poms.add(action) + } // endregion } \ No newline at end of file diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/plugins/KotlinNativePlugin.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/plugins/KotlinNativePlugin.kt index 697e978d1a9..899cc9e2309 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/plugins/KotlinNativePlugin.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/plugins/KotlinNativePlugin.kt @@ -8,6 +8,8 @@ import org.gradle.api.internal.attributes.ImmutableAttributesFactory import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.Provider +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.publish.maven.MavenPublication import org.gradle.internal.reflect.Instantiator import org.gradle.language.cpp.CppBinary.DEBUGGABLE_ATTRIBUTE import org.gradle.language.cpp.CppBinary.OPTIMIZED_ATTRIBUTE @@ -209,6 +211,24 @@ class KotlinNativePlugin @Inject constructor(val attributesFactory: ImmutableAtt addBinariesForMainComponents(group, version) addBinariesForTestComponents(group, version) + pluginManager.withPlugin("maven-publish") { + val publishingExtension = project.extensions.getByType(PublishingExtension::class.java) + val components = project.components.withType(KotlinNativeMainComponent::class.java) + publishingExtension.publications.forEach { publication -> + (publication as? MavenPublication)?.apply { + val component = components.find { + it.name == publication.name + || publication.name.startsWith("${it.name}Release") + || publication.name.startsWith("${it.name}Debug") + } + component?.let { + it.poms.forEach { + publication.pom(it) + } + } + } + } + } } } }