[Gradle] Make sure that rootSoftwareComponent is always added
Even when createDefaultMultiplatformPublications=false and maven-publish is applied it is required to create all publication-specific entities such as tasks, configurations, components etc. In order to let users to compose publications on their own. ^KT-62877 Verification Pending
This commit is contained in:
committed by
Space Team
parent
d3f25d81de
commit
b154283149
+7
-8
@@ -38,15 +38,14 @@ internal val Project.kotlinMultiplatformRootPublication: Future<MavenPublication
|
|||||||
get() = kotlinMultiplatformRootPublicationImpl
|
get() = kotlinMultiplatformRootPublicationImpl
|
||||||
|
|
||||||
internal val MultiplatformPublishingSetupAction = KotlinProjectSetupCoroutine {
|
internal val MultiplatformPublishingSetupAction = KotlinProjectSetupCoroutine {
|
||||||
if (!project.kotlinPropertiesProvider.createDefaultMultiplatformPublications) {
|
|
||||||
kotlinMultiplatformRootPublicationImpl.complete(null)
|
|
||||||
return@KotlinProjectSetupCoroutine
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isPluginApplied("maven-publish")) {
|
if (isPluginApplied("maven-publish")) {
|
||||||
project.extensions.configure(PublishingExtension::class.java) { publishing ->
|
if (project.kotlinPropertiesProvider.createDefaultMultiplatformPublications) {
|
||||||
createRootPublication(project, publishing).also(kotlinMultiplatformRootPublicationImpl::complete)
|
project.extensions.configure(PublishingExtension::class.java) { publishing ->
|
||||||
createTargetPublications(project, publishing)
|
createRootPublication(project, publishing).also(kotlinMultiplatformRootPublicationImpl::complete)
|
||||||
|
createTargetPublications(project, publishing)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
kotlinMultiplatformRootPublicationImpl.complete(null)
|
||||||
}
|
}
|
||||||
project.components.add(project.multiplatformExtension.rootSoftwareComponent)
|
project.components.add(project.multiplatformExtension.rootSoftwareComponent)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+41
@@ -19,6 +19,7 @@ import org.gradle.api.publish.maven.MavenPublication
|
|||||||
import org.gradle.testfixtures.ProjectBuilder
|
import org.gradle.testfixtures.ProjectBuilder
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.internal
|
import org.jetbrains.kotlin.gradle.plugin.mpp.internal
|
||||||
|
import org.jetbrains.kotlin.gradle.util.*
|
||||||
import org.jetbrains.kotlin.gradle.util.addBuildEventsListenerRegistryMock
|
import org.jetbrains.kotlin.gradle.util.addBuildEventsListenerRegistryMock
|
||||||
import org.jetbrains.kotlin.gradle.util.disableLegacyWarning
|
import org.jetbrains.kotlin.gradle.util.disableLegacyWarning
|
||||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||||
@@ -227,6 +228,46 @@ class MppPublicationTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test creation of default publications can be disabled`() {
|
||||||
|
val project = buildProject { }
|
||||||
|
project.propertiesExtension.set("kotlin.internal.mpp.createDefaultMultiplatformPublications", "false")
|
||||||
|
project.plugins.apply("kotlin-multiplatform")
|
||||||
|
project.plugins.apply("maven-publish")
|
||||||
|
|
||||||
|
project.kotlin {
|
||||||
|
jvm()
|
||||||
|
linuxArm64()
|
||||||
|
}
|
||||||
|
|
||||||
|
project.evaluate()
|
||||||
|
|
||||||
|
val publishing = project.extensions.getByType(PublishingExtension::class.java)
|
||||||
|
val actualPublications = publishing.publications.names
|
||||||
|
if (actualPublications.isNotEmpty()) fail("Expected no default publications to be created")
|
||||||
|
|
||||||
|
// Even though creation of default publications are disabled
|
||||||
|
// it is still important that components and everything else needed for publishing are still present
|
||||||
|
val components = project.components.names
|
||||||
|
assertEquals(setOf("kotlin"), components)
|
||||||
|
|
||||||
|
val expectedSourcesJarTasks = setOf("sourcesJar", "metadataSourcesJar", "jvmSourcesJar", "linuxArm64SourcesJar")
|
||||||
|
val missingSourcesJarTasks = expectedSourcesJarTasks - project.tasks.names
|
||||||
|
if (missingSourcesJarTasks.isNotEmpty()) fail("Following sources jar tasks are not created: $missingSourcesJarTasks")
|
||||||
|
|
||||||
|
val expectedConfigurations = setOf(
|
||||||
|
"jvmApiElements",
|
||||||
|
"jvmApiElements-published",
|
||||||
|
"jvmRuntimeElements",
|
||||||
|
"jvmRuntimeElements-published",
|
||||||
|
"jvmSourcesElements",
|
||||||
|
"jvmSourcesElements-published",
|
||||||
|
"metadataApiElements",
|
||||||
|
)
|
||||||
|
val missingConfigurations = expectedConfigurations - project.configurations.names
|
||||||
|
if (missingConfigurations.isNotEmpty()) fail("Following configurations are not created: $missingConfigurations")
|
||||||
|
}
|
||||||
|
|
||||||
private fun SoftwareComponent.attributesOfUsageContext(usageContextName: String): AttributeContainer {
|
private fun SoftwareComponent.attributesOfUsageContext(usageContextName: String): AttributeContainer {
|
||||||
this as SoftwareComponentInternal
|
this as SoftwareComponentInternal
|
||||||
return usages.first { it.name == usageContextName }.attributes
|
return usages.first { it.name == usageContextName }.attributes
|
||||||
|
|||||||
Reference in New Issue
Block a user