@@ -11,21 +11,25 @@ import org.gradle.api.artifacts.type.ArtifactTypeDefinition
11
11
import org.gradle.api.attributes.Attribute
12
12
import org.gradle.api.attributes.LibraryElements
13
13
import org.gradle.api.attributes.java.TargetJvmEnvironment
14
+ import org.gradle.api.attributes.java.TargetJvmVersion
14
15
import org.gradle.api.attributes.plugin.GradlePluginApiVersion
16
+ import org.gradle.api.component.AdhocComponentWithVariants
15
17
import org.gradle.api.plugins.JavaLibraryPlugin
18
+ import org.gradle.api.plugins.JavaPlugin
16
19
import org.gradle.api.plugins.JavaPluginExtension
17
20
import org.gradle.api.publish.PublishingExtension
18
21
import org.gradle.api.publish.maven.MavenPublication
19
22
import org.gradle.api.tasks.Copy
20
23
import org.gradle.api.tasks.SourceSet
24
+ import org.gradle.api.tasks.compile.JavaCompile
21
25
import org.gradle.jvm.tasks.Jar
22
26
import org.gradle.kotlin.dsl.*
23
27
import org.gradle.plugin.devel.plugins.JavaGradlePluginPlugin
24
28
import org.jetbrains.dokka.DokkaVersion
25
29
import org.jetbrains.dokka.gradle.DokkaTask
26
30
import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension
31
+ import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
27
32
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
28
- import org.jetbrains.kotlin.project.model.KotlinPlatformTypeAttribute
29
33
import plugins.configureDefaultPublishing
30
34
import plugins.configureKotlinPomAttributes
31
35
@@ -238,6 +242,8 @@ fun Project.wireGradleVariantToCommonGradleVariant(
238
242
}
239
243
}
240
244
245
+ private const val FIXED_CONFIGURATION_SUFFIX = " WithFixedAttribute"
246
+
241
247
/* *
242
248
* 'main' sources are used for minimal supported Gradle versions (6.7) up to Gradle 7.0.
243
249
*/
@@ -312,6 +318,67 @@ fun Project.reconfigureMainSourcesSetForGradlePlugin(
312
318
}
313
319
}
314
320
}
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
+ }
315
382
}
316
383
317
384
// Fix common sources visibility for tests
@@ -450,10 +517,6 @@ private fun Project.commonVariantAttributes(): Action<Configuration> = Action<Co
450
517
TargetJvmEnvironment .TARGET_JVM_ENVIRONMENT_ATTRIBUTE ,
451
518
objects.named(TargetJvmEnvironment .STANDARD_JVM )
452
519
)
453
- attribute(
454
- Attribute .of(KotlinPlatformTypeAttribute .uniqueName, String ::class .java),
455
- KotlinPlatformTypeAttribute .JVM
456
- )
457
520
}
458
521
}
459
522
@@ -494,16 +557,28 @@ fun Project.publishShadowedJar(
494
557
}
495
558
496
559
// 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
+ }
501
571
502
572
// Adding instead artifact from shadow jar task
503
573
configurations {
504
574
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
+ }
507
582
}
508
583
}
509
584
}
0 commit comments