Skip to content

Commit eacfddb

Browse files
timofey-soloninSpace Team
authored andcommitted
Replace JVM variant in root publication with "available-at"
Leave the JVM jar artifact in the root publication for Maven consumers. The separate variant is ruining interproject publication because Gradle doesn't understand which publication coordinates to use. ^KT-77531
1 parent a2c18ce commit eacfddb

File tree

5 files changed

+17
-69
lines changed

5 files changed

+17
-69
lines changed

libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/uklibs/KmpGradlePublicationMetadataIT.kt

Lines changed: 1 addition & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -587,61 +587,7 @@ private val uklibJvmStubVariants = mutableSetOf(
587587
),
588588
)
589589

590-
private val uklibJvmVariants = mutableSetOf(
591-
Variant(
592-
attributes = mutableMapOf(
593-
"org.gradle.category" to "library",
594-
"org.gradle.jvm.environment" to "standard-jvm",
595-
"org.gradle.libraryelements" to "jar",
596-
"org.gradle.usage" to "java-api",
597-
"org.jetbrains.kotlin.platform.type" to "jvm",
598-
),
599-
availableAt = null,
600-
files = mutableListOf(
601-
VariantFile(
602-
name = "empty-jvm-1.0.jar",
603-
url = "empty-1.0.jar",
604-
),
605-
),
606-
name = "jvmApiElements",
607-
),
608-
Variant(
609-
attributes = mutableMapOf(
610-
"org.gradle.category" to "library",
611-
"org.gradle.jvm.environment" to "standard-jvm",
612-
"org.gradle.libraryelements" to "jar",
613-
"org.gradle.usage" to "java-runtime",
614-
"org.jetbrains.kotlin.platform.type" to "jvm",
615-
),
616-
availableAt = null,
617-
files = mutableListOf(
618-
VariantFile(
619-
name = "empty-jvm-1.0.jar",
620-
url = "empty-1.0.jar",
621-
),
622-
),
623-
name = "jvmRuntimeElements",
624-
),
625-
Variant(
626-
attributes = mutableMapOf(
627-
"org.gradle.category" to "documentation",
628-
"org.gradle.dependency.bundling" to "external",
629-
"org.gradle.docstype" to "sources",
630-
"org.gradle.jvm.environment" to "standard-jvm",
631-
"org.gradle.libraryelements" to "jar",
632-
"org.gradle.usage" to "java-runtime",
633-
"org.jetbrains.kotlin.platform.type" to "jvm",
634-
),
635-
availableAt = null,
636-
files = mutableListOf(
637-
VariantFile(
638-
name = "empty-jvm-1.0-sources.jar",
639-
url = "empty-1.0-sources.jar",
640-
),
641-
),
642-
name = "jvmSourcesElements",
643-
),
644-
)
590+
private val uklibJvmVariants = jvmSubcomponentVariants
645591

646592
private val uklibCompatibilityMetadataVariants = mutableSetOf(
647593
Variant(

libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/uklibs/UklibPublicationIT.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,21 +371,27 @@ class UklibPublicationIT : KGPBaseTest() {
371371
addKgpToBuildScriptCompilationClasspath()
372372
val dependency = project("empty", gradleVersion) {
373373
buildScriptInjection {
374+
project.setUklibPublicationStrategy()
375+
project.setUklibResolutionStrategy()
376+
project.plugins.apply("maven-publish")
374377
project.group = "dependencyGroup"
375378
project.version = "2.0"
376379
project.applyMultiplatform {
377380
linuxArm64()
378381
linuxX64()
379-
sourceSets.linuxMain.get().compileStubSourceWithSourceSetName()
382+
jvm()
383+
sourceSets.commonMain.get().compileStubSourceWithSourceSetName()
380384
}
381385
}
382386
}
383387
val publisher = project("empty", gradleVersion) {
384388
buildScriptInjection {
385389
project.setUklibPublicationStrategy()
390+
project.setUklibResolutionStrategy()
386391
project.applyMultiplatform {
387392
linuxArm64()
388393
linuxX64()
394+
jvm()
389395
sourceSets.commonMain.get().compileStubSourceWithSourceSetName()
390396
sourceSets.commonMain.dependencies {
391397
implementation(project(":dependency"))

libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/artifacts/KotlinJvmJarArtifact.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import org.gradle.api.artifacts.Dependency.ARCHIVES_CONFIGURATION
99
import org.gradle.api.artifacts.type.ArtifactTypeDefinition.JAR_TYPE
1010
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME
1111
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
12+
import org.jetbrains.kotlin.gradle.plugin.mpp.publishing.kotlinMultiplatformRootPublication
1213
import org.jetbrains.kotlin.gradle.plugin.mpp.uklibs.consumption.uklibStateAttribute
1314
import org.jetbrains.kotlin.gradle.plugin.mpp.uklibs.consumption.uklibStateDecompressed
1415
import org.jetbrains.kotlin.gradle.plugin.mpp.uklibs.consumption.uklibViewAttribute
@@ -17,6 +18,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.uklibs.publication.maybeCreateUkli
1718
import org.jetbrains.kotlin.gradle.plugin.mpp.uklibs.publication.maybeCreateUklibRuntimeElements
1819
import org.jetbrains.kotlin.gradle.plugin.mpp.uklibs.uklibFragmentPlatformAttribute
1920
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
21+
import org.jetbrains.kotlin.gradle.plugin.launch
2022
import org.jetbrains.kotlin.gradle.utils.registerArtifact
2123
import org.jetbrains.kotlin.gradle.utils.registerKlibArtifact
2224

@@ -47,6 +49,11 @@ internal val KotlinJvmJarArtifact = KotlinTargetArtifact { target, apiElements,
4749
}
4850
}
4951
}
52+
53+
target.project.launch {
54+
val rootPublication = target.project.kotlinMultiplatformRootPublication.await()
55+
rootPublication?.artifact(artifact)
56+
}
5057
}
5158
KmpPublicationStrategy.StandardKMPPublication -> {}
5259
}

libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,7 @@ abstract class KotlinSoftwareComponent(
5555
return kotlinTargets
5656
.filter { target ->
5757
if (target is KotlinMetadataTarget) return@filter false
58-
when (project.kotlinPropertiesProvider.kmpPublicationStrategy) {
59-
KmpPublicationStrategy.UklibPublicationInASingleComponentWithKMPPublication ->
60-
// Exclude subcomponent pointer from the root component
61-
target !is KotlinJvmTarget
62-
KmpPublicationStrategy.StandardKMPPublication ->
63-
true
64-
}
58+
true
6559
}
6660
}
6761

libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/uklibs/publication/locateOrRegisterArchiveUklibTask.kt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,12 +161,7 @@ private suspend fun Project.createOutgoingUklibConfigurationsAndUsages(
161161
* usages here or create them using a shared execution path without the copypasted code below when jvm target is not present
162162
*/
163163
val jvmTarget = project.multiplatformExtension.awaitTargets().singleOrNull { it is KotlinJvmTarget }
164-
if (jvmTarget != null) {
165-
val kotlinTargetComponent = jvmTarget.components.single() as KotlinTargetSoftwareComponentImpl
166-
// FIXME: KT-76687
167-
@Suppress("UNCHECKED_CAST")
168-
variants += kotlinTargetComponent.kotlinComponent.internal.usages as Set<DefaultKotlinUsageContext>
169-
} else {
164+
if (jvmTarget == null) {
170165
// FIXME: Test that stubJvmVariant inherits dependencies from relevant configurations
171166
val jar = stubJvmJarTask()
172167
configurations.createConsumable(UKLIB_JAVA_API_ELEMENTS_STUB_NAME) {

0 commit comments

Comments
 (0)