[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 package org.jetbrains.kotlin.gradle.plugin.experimental
import org.gradle.api.Action
import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Configuration
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
import org.gradle.api.provider.SetProperty import org.gradle.api.provider.SetProperty
import org.gradle.api.publish.maven.MavenPom
import org.gradle.language.BinaryCollection import org.gradle.language.BinaryCollection
import org.gradle.language.ComponentWithBinaries import org.gradle.language.ComponentWithBinaries
import org.gradle.language.ComponentWithDependencies import org.gradle.language.ComponentWithDependencies
@@ -43,6 +45,7 @@ interface KotlinNativeComponent: ComponentWithBinaries, ComponentWithDependencie
fun extraOpts(vararg values: Any) fun extraOpts(vararg values: Any)
fun extraOpts(values: List<Any>) fun extraOpts(values: List<Any>)
fun pom(action: Action<MavenPom>)
// endregion // endregion
} }
@@ -1,10 +1,12 @@
package org.jetbrains.kotlin.gradle.plugin.experimental.internal package org.jetbrains.kotlin.gradle.plugin.experimental.internal
import org.gradle.api.Action
import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Configuration
import org.gradle.api.internal.file.FileOperations import org.gradle.api.internal.file.FileOperations
import org.gradle.api.internal.provider.LockableSetProperty import org.gradle.api.internal.provider.LockableSetProperty
import org.gradle.api.model.ObjectFactory import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property import org.gradle.api.provider.Property
import org.gradle.api.publish.maven.MavenPom
import org.gradle.language.internal.DefaultBinaryCollection import org.gradle.language.internal.DefaultBinaryCollection
import org.gradle.language.internal.DefaultComponentDependencies import org.gradle.language.internal.DefaultComponentDependencies
import org.gradle.language.nativeplatform.internal.ComponentWithNames import org.gradle.language.nativeplatform.internal.ComponentWithNames
@@ -47,6 +49,7 @@ abstract class AbstractKotlinNativeComponent @Inject constructor(
private val dependencies: DefaultComponentDependencies = objectFactory.newInstance( private val dependencies: DefaultComponentDependencies = objectFactory.newInstance(
DefaultComponentDependencies::class.java, DefaultComponentDependencies::class.java,
names.withSuffix("implementation")) names.withSuffix("implementation"))
internal val poms = mutableListOf<Action<MavenPom>>()
override fun getDependencies() = dependencies override fun getDependencies() = dependencies
@@ -66,5 +69,8 @@ abstract class AbstractKotlinNativeComponent @Inject constructor(
extraOpts.addAll(values.map { it.toString() }) extraOpts.addAll(values.map { it.toString() })
} }
override fun pom(action: Action<MavenPom>) {
poms.add(action)
}
// endregion // endregion
} }
@@ -8,6 +8,8 @@ import org.gradle.api.internal.attributes.ImmutableAttributesFactory
import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.model.ObjectFactory import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Provider 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.internal.reflect.Instantiator
import org.gradle.language.cpp.CppBinary.DEBUGGABLE_ATTRIBUTE import org.gradle.language.cpp.CppBinary.DEBUGGABLE_ATTRIBUTE
import org.gradle.language.cpp.CppBinary.OPTIMIZED_ATTRIBUTE import org.gradle.language.cpp.CppBinary.OPTIMIZED_ATTRIBUTE
@@ -209,6 +211,24 @@ class KotlinNativePlugin @Inject constructor(val attributesFactory: ImmutableAtt
addBinariesForMainComponents(group, version) addBinariesForMainComponents(group, version)
addBinariesForTestComponents(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)
}
}
}
}
}
} }
} }
} }