@@ -11,21 +11,25 @@ import org.gradle.api.artifacts.type.ArtifactTypeDefinition
1111import org.gradle.api.attributes.Attribute
1212import org.gradle.api.attributes.LibraryElements
1313import org.gradle.api.attributes.java.TargetJvmEnvironment
14+ import org.gradle.api.attributes.java.TargetJvmVersion
1415import org.gradle.api.attributes.plugin.GradlePluginApiVersion
16+ import org.gradle.api.component.AdhocComponentWithVariants
1517import org.gradle.api.plugins.JavaLibraryPlugin
18+ import org.gradle.api.plugins.JavaPlugin
1619import org.gradle.api.plugins.JavaPluginExtension
1720import org.gradle.api.publish.PublishingExtension
1821import org.gradle.api.publish.maven.MavenPublication
1922import org.gradle.api.tasks.Copy
2023import org.gradle.api.tasks.SourceSet
24+ import org.gradle.api.tasks.compile.JavaCompile
2125import org.gradle.jvm.tasks.Jar
2226import org.gradle.kotlin.dsl.*
2327import org.gradle.plugin.devel.plugins.JavaGradlePluginPlugin
2428import org.jetbrains.dokka.DokkaVersion
2529import org.jetbrains.dokka.gradle.DokkaTask
2630import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension
31+ import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
2732import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
28- import org.jetbrains.kotlin.project.model.KotlinPlatformTypeAttribute
2933import plugins.configureDefaultPublishing
3034import 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