[Gradle] Include kotlin-tooling-metadata in KPM module publication

KT-49704
This commit is contained in:
Anton Lakotka
2022-02-28 09:53:13 +01:00
parent ac8e7606a2
commit a2a414ace4
2 changed files with 13 additions and 1 deletions
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.gradle.tooling.BuildKotlinToolingMetadataTask
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.tooling.KotlinToolingMetadata
import org.jetbrains.kotlin.tooling.parseJsonOrThrow
import org.junit.Assume.assumeFalse
import org.junit.Test
import kotlin.test.assertEquals
@@ -91,6 +92,7 @@ class KotlinToolingMetadataMppIT : BaseGradleIT() {
@Test
fun `kotlin-js-browser-project`() = with(transformProjectWithPluginsDsl("kotlin-js-browser-project")) {
assumeFalse("KPM model mapping is not yet supported in single-platform projects", isKpmModelMappingEnabled)
projectDir.resolve("gradle.properties").appendText("\nkotlin.mpp.enableKotlinToolingMetadataArtifact=true")
build(BuildKotlinToolingMetadataTask.defaultTaskName) {
assertSuccessful()
@@ -9,7 +9,7 @@ import org.gradle.api.Project
import org.gradle.api.component.SoftwareComponentFactory
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
import org.jetbrains.kotlin.gradle.dsl.pm20Extension
import org.jetbrains.kotlin.gradle.tooling.buildKotlinToolingMetadataTask
import javax.inject.Inject
internal fun setupKpmModulesPublication(project: Project) {
@@ -44,11 +44,21 @@ internal fun setupPublicationForModule(module: KotlinGradleModule) {
it.fromResolutionOf(metadataDependencyConfiguration)
}
}
publication.setupKotlinToolingMetadataIfNeeded(project)
}
}
}
}
private fun MavenPublication.setupKotlinToolingMetadataIfNeeded(project: Project) {
val buildKotlinToolingMetadataTask = project.buildKotlinToolingMetadataTask ?: return
artifact(buildKotlinToolingMetadataTask.map { it.outputFile }) { artifact ->
artifact.classifier = "kotlin-tooling-metadata"
artifact.builtBy(buildKotlinToolingMetadataTask)
}
}
private open class SoftwareComponentFactoryHolder @Inject constructor(
@Inject val softwareComponentFactory: SoftwareComponentFactory
) {