[gradle][experimental] publish the per component pom into variant generated publications

This commit is contained in:
Vasily Levchenko
2018-07-17 17:17:17 +03:00
parent 4645f86225
commit 2a78a8dade
3 changed files with 29 additions and 0 deletions
@@ -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<Any>)
fun pom(action: Action<MavenPom>)
// endregion
}
@@ -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<Action<MavenPom>>()
override fun getDependencies() = dependencies
@@ -66,5 +69,8 @@ abstract class AbstractKotlinNativeComponent @Inject constructor(
extraOpts.addAll(values.map { it.toString() })
}
override fun pom(action: Action<MavenPom>) {
poms.add(action)
}
// endregion
}
@@ -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)
}
}
}
}
}
}
}
}