From 6614714c9465ed122ad8f36b6e8149dbcfcd41bb Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Mon, 5 Dec 2022 14:23:16 +0100 Subject: [PATCH] [Gradle] Register sourcesJar during KotlinSoftwareComponent init sourcesJar task should be available as soon as kotlin multiplatform plugin is applied before actual evaluation. Although copySpec of sourcesJar task will be updated in afterEvaluate block since user should define themselves targets and intermediate source sets between them. ^KT-55230 --- .../plugin/mpp/KotlinSoftwareComponent.kt | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt index a4e556bb80b..28c33719e2b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt @@ -16,6 +16,8 @@ import org.gradle.api.internal.component.SoftwareComponentInternal import org.gradle.api.internal.component.UsageContext import org.gradle.api.provider.SetProperty import org.gradle.api.publish.maven.MavenPublication +import org.gradle.api.tasks.TaskProvider +import org.gradle.jvm.tasks.Jar import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME @@ -79,10 +81,11 @@ abstract class KotlinSoftwareComponent( } } - configureSourcesJarArtifact() + val sourcesElements = metadataTarget.sourcesElementsConfigurationName + addSourcesJarArtifactToConfiguration(sourcesElements) this += DefaultKotlinUsageContext( compilation = metadataTarget.compilations.getByName(MAIN_COMPILATION_NAME), - dependencyConfigurationName = metadataTarget.sourcesElementsConfigurationName, + dependencyConfigurationName = sourcesElements, includeIntoProjectStructureMetadata = false, ) } @@ -92,11 +95,14 @@ abstract class KotlinSoftwareComponent( return _usages } - private fun configureSourcesJarArtifact(): PublishArtifact { - fun allPublishableCommonSourceSets() = getCommonSourceSetsForMetadataCompilation(project) + - getHostSpecificMainSharedSourceSets(project) + private fun allPublishableCommonSourceSets() = getCommonSourceSetsForMetadataCompilation(project) + + getHostSpecificMainSharedSourceSets(project) - val sourcesJarTask = sourcesJarTaskNamed( + /** + * Registration (during object init) of [sourcesJarTask] is required for cases when + * user build scripts want to have access to sourcesJar task to configure it + */ + private val sourcesJarTask: TaskProvider = sourcesJarTaskNamed( "sourcesJar", name, project, @@ -104,7 +110,8 @@ abstract class KotlinSoftwareComponent( name.toLowerCase() ) - return project.artifacts.add(metadataTarget.sourcesElementsConfigurationName, sourcesJarTask) { sourcesJarArtifact -> + private fun addSourcesJarArtifactToConfiguration(configurationName: String): PublishArtifact { + return project.artifacts.add(configurationName, sourcesJarTask) { sourcesJarArtifact -> sourcesJarArtifact.classifier = "sources" } }