diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KpmAwareTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KpmAwareTargetConfigurator.kt index 26fadf80faa..22b4427c30b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KpmAwareTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/KpmAwareTargetConfigurator.kt @@ -6,6 +6,9 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20 import org.jetbrains.kotlin.gradle.plugin.* +import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinCompilation +import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.VariantMappedCompilationDetails import java.util.concurrent.Callable internal open class KpmAwareTargetConfigurator( @@ -13,7 +16,33 @@ internal open class KpmAwareTargetConfigurator( ) : AbstractKotlinTargetConfigurator(true, legacyModelTargetConfigurator.createDefaultSourceSets), KotlinTargetConfigurator by legacyModelTargetConfigurator { // NB: this override enforces calls to other overridden functions; without it, the delegate would call its own ones - override fun configureTarget(target: T) = super.configureTarget(target) + override fun configureTarget(target: T) { + super.configureTarget(target) + doKpmSpecificConfigurationSteps(target) + } + + protected open fun doKpmSpecificConfigurationSteps(target: T) { + setupMavenPublicationDsl(target) + } + + private fun setupMavenPublicationDsl(target: T) { + if (target is AbstractKotlinTarget) { + target.compilations.all { compilation -> + val compilationDetails = (compilation as? AbstractKotlinCompilation)?.compilationDetails as? VariantMappedCompilationDetails + if (compilationDetails is VariantMappedCompilationDetails<*> && compilationDetails.variant.containingModule.isMain) { + val variant = compilationDetails.variant + if (variant is SingleMavenPublishedModuleHolder) { + variant.whenPublicationAssigned { publication -> + target.publicationConfigureActions.all { action -> + action.execute(publication) + } + } + } + } + } + } + } + override fun defineConfigurationsForTarget(target: T) = Unit // done in KPM @@ -58,6 +87,7 @@ internal class KpmAwareTargetWithTestsConfigurator, T override fun configureTarget(target: T) { super.configureTarget(target) + doKpmSpecificConfigurationSteps(target) } override val testRunClass: Class diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/LegacyMappedVariant.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/LegacyMappedVariant.kt index ec6239b4a4c..40883ab4b86 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/LegacyMappedVariant.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/LegacyMappedVariant.kt @@ -200,11 +200,16 @@ internal fun mapTargetCompilationsToKpmVariants(target: AbstractKotlinTarget, pu else -> error("unexpected type of kotlinComponent in legacy variant mapping: ${kotlinComponent.javaClass}") } - // Include Sources moduleHolder.whenPublicationAssigned { publication -> + // Include Sources kotlinComponent.sourcesArtifacts.forEach { publication.artifact(it) } + + // Support the `mavenPublication { ... }` DSL in target: + target.publicationConfigureActions.all { action -> + action.execute(publication) + } } // FIXME: include additional variants into project structure metadata?