[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
|
||||
|
||||
internal val MultiplatformPublishingSetupAction = KotlinProjectSetupCoroutine {
|
||||
if (!project.kotlinPropertiesProvider.createDefaultMultiplatformPublications) {
|
||||
kotlinMultiplatformRootPublicationImpl.complete(null)
|
||||
return@KotlinProjectSetupCoroutine
|
||||
}
|
||||
|
||||
if (isPluginApplied("maven-publish")) {
|
||||
project.extensions.configure(PublishingExtension::class.java) { publishing ->
|
||||
createRootPublication(project, publishing).also(kotlinMultiplatformRootPublicationImpl::complete)
|
||||
createTargetPublications(project, publishing)
|
||||
if (project.kotlinPropertiesProvider.createDefaultMultiplatformPublications) {
|
||||
project.extensions.configure(PublishingExtension::class.java) { publishing ->
|
||||
createRootPublication(project, publishing).also(kotlinMultiplatformRootPublicationImpl::complete)
|
||||
createTargetPublications(project, publishing)
|
||||
}
|
||||
} else {
|
||||
kotlinMultiplatformRootPublicationImpl.complete(null)
|
||||
}
|
||||
project.components.add(project.multiplatformExtension.rootSoftwareComponent)
|
||||
} else {
|
||||
|
||||
+41
@@ -19,6 +19,7 @@ import org.gradle.api.publish.maven.MavenPublication
|
||||
import org.gradle.testfixtures.ProjectBuilder
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||
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.disableLegacyWarning
|
||||
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 {
|
||||
this as SoftwareComponentInternal
|
||||
return usages.first { it.name == usageContextName }.attributes
|
||||
|
||||
Reference in New Issue
Block a user