From b9a520b593ccc14c6cbf8cf74dc2e2673f76e4f2 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Thu, 3 Aug 2023 12:23:39 +0200 Subject: [PATCH] [Gradle] createMavenPublications: Defensively defer adding gradleComponents to 'AfterFinaliseCompilations' ... as the code previously states that this code might race with actually adding variants from configurations ^KT-60159 Verification Pending --- .../kotlin/gradle/plugin/mpp/Publishing.kt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/Publishing.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/Publishing.kt index 21612f8ecb1..1d190f5586e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/Publishing.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/Publishing.kt @@ -24,7 +24,6 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope -import org.jetbrains.kotlin.gradle.plugin.whenEvaluated import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled import org.jetbrains.kotlin.gradle.tooling.buildKotlinToolingMetadataTask @@ -79,13 +78,14 @@ private fun createTargetPublications(project: Project, publishing: PublishingExt } private fun InternalKotlinTarget.createMavenPublications(publications: PublicationContainer) { - components - .map { gradleComponent -> gradleComponent to kotlinComponents.single { it.name == gradleComponent.name } } - .filter { (_, kotlinComponent) -> kotlinComponent.publishableOnCurrentHost } - .forEach { (gradleComponent, kotlinComponent) -> + kotlinComponents + .filter { kotlinComponent -> kotlinComponent.publishableOnCurrentHost } + .forEach { kotlinComponent -> val componentPublication = publications.create(kotlinComponent.name, MavenPublication::class.java).apply { - // do this in whenEvaluated since older Gradle versions seem to check the files in the variant eagerly: - project.whenEvaluated { + // do await for usages since older Gradle versions seem to check the files in the variant eagerly: + // We are deferring this to 'AfterFinaliseCompilations' as safety measure for now. + project.launchInStage(KotlinPluginLifecycle.Stage.AfterFinaliseCompilations) { + val gradleComponent = components.find { kotlinComponent.name == it.name } ?: return@launchInStage from(gradleComponent) } (this as MavenPublicationInternal).publishWithOriginalFileName()