Skip to content

Commit aab426c

Browse files
TapchicomaSpace
authored and
Space
committed
Remove 'org.jetbrains.kotlin.platform.type' attribute from publication
Temporary workaround for Kotlin Gradle plugin publications until https://youtrack.jetbrains.com/issue/KT-52987 will be implemented. Requested by Gradle team for Gradle 7.6 compatibility.
1 parent 7cc0002 commit aab426c

File tree

1 file changed

+86
-11
lines changed

1 file changed

+86
-11
lines changed

buildSrc/src/main/kotlin/GradleCommon.kt

Lines changed: 86 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,25 @@ import org.gradle.api.artifacts.type.ArtifactTypeDefinition
1111
import org.gradle.api.attributes.Attribute
1212
import org.gradle.api.attributes.LibraryElements
1313
import org.gradle.api.attributes.java.TargetJvmEnvironment
14+
import org.gradle.api.attributes.java.TargetJvmVersion
1415
import org.gradle.api.attributes.plugin.GradlePluginApiVersion
16+
import org.gradle.api.component.AdhocComponentWithVariants
1517
import org.gradle.api.plugins.JavaLibraryPlugin
18+
import org.gradle.api.plugins.JavaPlugin
1619
import org.gradle.api.plugins.JavaPluginExtension
1720
import org.gradle.api.publish.PublishingExtension
1821
import org.gradle.api.publish.maven.MavenPublication
1922
import org.gradle.api.tasks.Copy
2023
import org.gradle.api.tasks.SourceSet
24+
import org.gradle.api.tasks.compile.JavaCompile
2125
import org.gradle.jvm.tasks.Jar
2226
import org.gradle.kotlin.dsl.*
2327
import org.gradle.plugin.devel.plugins.JavaGradlePluginPlugin
2428
import org.jetbrains.dokka.DokkaVersion
2529
import org.jetbrains.dokka.gradle.DokkaTask
2630
import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension
31+
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
2732
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
28-
import org.jetbrains.kotlin.project.model.KotlinPlatformTypeAttribute
2933
import plugins.configureDefaultPublishing
3034
import plugins.configureKotlinPomAttributes
3135

@@ -238,6 +242,8 @@ fun Project.wireGradleVariantToCommonGradleVariant(
238242
}
239243
}
240244

245+
private const val FIXED_CONFIGURATION_SUFFIX = "WithFixedAttribute"
246+
241247
/**
242248
* 'main' sources are used for minimal supported Gradle versions (6.7) up to Gradle 7.0.
243249
*/
@@ -312,6 +318,67 @@ fun Project.reconfigureMainSourcesSetForGradlePlugin(
312318
}
313319
}
314320
}
321+
322+
val javaComponent = project.components["java"] as AdhocComponentWithVariants
323+
324+
// Workaround for https://youtrack.jetbrains.com/issue/KT-52987
325+
listOf(
326+
runtimeElementsConfigurationName,
327+
apiElementsConfigurationName
328+
)
329+
.map { configurations[it] }
330+
.forEach { originalConfiguration ->
331+
configurations.create("${originalConfiguration.name}$FIXED_CONFIGURATION_SUFFIX") {
332+
isCanBeResolved = originalConfiguration.isCanBeResolved
333+
isCanBeConsumed = originalConfiguration.isCanBeConsumed
334+
isVisible = originalConfiguration.isVisible
335+
setExtendsFrom(originalConfiguration.extendsFrom)
336+
337+
artifacts {
338+
originalConfiguration.artifacts.forEach {
339+
add(name, it)
340+
}
341+
}
342+
343+
// Removing 'org.jetbrains.kotlin.platform.type' attribute
344+
// as it brings issues with Gradle variant resolve on Gradle 7.6+ versions
345+
attributes {
346+
originalConfiguration.attributes.keySet()
347+
.filter { it.name != KotlinPlatformType.attribute.name }
348+
.forEach { originalAttribute ->
349+
@Suppress("UNCHECKED_CAST")
350+
attribute(
351+
originalAttribute as Attribute<Any>,
352+
originalConfiguration.attributes.getAttribute(originalAttribute)!!
353+
)
354+
}
355+
356+
plugins.withType<JavaPlugin> {
357+
tasks.named<JavaCompile>(compileJavaTaskName) {
358+
attribute(
359+
TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE,
360+
targetCompatibility.toInt()
361+
)
362+
}
363+
}
364+
}
365+
366+
javaComponent.addVariantsFromConfiguration(this) {
367+
if (originalConfiguration.name.startsWith("api")) {
368+
mapToMavenScope("compile")
369+
} else {
370+
mapToMavenScope("runtime")
371+
}
372+
}
373+
374+
// Make original configuration unpublishable and not visible
375+
originalConfiguration.isCanBeConsumed = false
376+
originalConfiguration.isVisible = false
377+
javaComponent.withVariantsFromConfiguration(originalConfiguration) {
378+
skip()
379+
}
380+
}
381+
}
315382
}
316383

317384
// Fix common sources visibility for tests
@@ -450,10 +517,6 @@ private fun Project.commonVariantAttributes(): Action<Configuration> = Action<Co
450517
TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE,
451518
objects.named(TargetJvmEnvironment.STANDARD_JVM)
452519
)
453-
attribute(
454-
Attribute.of(KotlinPlatformTypeAttribute.uniqueName, String::class.java),
455-
KotlinPlatformTypeAttribute.JVM
456-
)
457520
}
458521
}
459522

@@ -494,16 +557,28 @@ fun Project.publishShadowedJar(
494557
}
495558

496559
// Removing artifact produced by Jar task
497-
configurations[sourceSet.runtimeElementsConfigurationName]
498-
.artifacts.removeAll { true }
499-
configurations[sourceSet.apiElementsConfigurationName]
500-
.artifacts.removeAll { true }
560+
if (sourceSet.name == SourceSet.MAIN_SOURCE_SET_NAME) {
561+
configurations["${sourceSet.runtimeElementsConfigurationName}$FIXED_CONFIGURATION_SUFFIX"]
562+
.artifacts.removeAll { true }
563+
configurations["${sourceSet.apiElementsConfigurationName}$FIXED_CONFIGURATION_SUFFIX"]
564+
.artifacts.removeAll { true }
565+
} else {
566+
configurations[sourceSet.runtimeElementsConfigurationName]
567+
.artifacts.removeAll { true }
568+
configurations[sourceSet.apiElementsConfigurationName]
569+
.artifacts.removeAll { true }
570+
}
501571

502572
// Adding instead artifact from shadow jar task
503573
configurations {
504574
artifacts {
505-
add(sourceSet.runtimeElementsConfigurationName, shadowJarTask)
506-
add(sourceSet.apiElementsConfigurationName, shadowJarTask)
575+
if (sourceSet.name == SourceSet.MAIN_SOURCE_SET_NAME) {
576+
add("${sourceSet.runtimeElementsConfigurationName}$FIXED_CONFIGURATION_SUFFIX", shadowJarTask)
577+
add("${sourceSet.apiElementsConfigurationName}$FIXED_CONFIGURATION_SUFFIX", shadowJarTask)
578+
} else {
579+
add(sourceSet.apiElementsConfigurationName, shadowJarTask)
580+
add(sourceSet.runtimeElementsConfigurationName, shadowJarTask)
581+
}
507582
}
508583
}
509584
}

0 commit comments

Comments
 (0)