diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt index cb71c6f1cbe..3ce3517beed 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt @@ -9,10 +9,10 @@ import org.gradle.api.Named import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.attributes.HasAttributes -import org.gradle.api.component.ComponentWithCoordinates +import org.gradle.api.component.SoftwareComponent import org.gradle.api.internal.component.UsageContext -interface KotlinTargetComponent : ComponentWithCoordinates { +interface KotlinTargetComponent : SoftwareComponent { val target: KotlinTarget val publishable: Boolean } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index 704428ba331..d9a2d2ffa45 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -106,15 +106,15 @@ class KotlinMultiplatformPlugin( // Create separate publications for all publishable targets kotlinSoftwareComponent.variants.filter { it.publishable }.forEach { variant -> - val coordinates = variant.coordinates + val coordinates = (variant as? KotlinVariantWithCoordinates)?.coordinates val name = variant.target.disambiguateName("kotlin") publishing.publications.create(name, MavenPublication::class.java) { publication -> publication.from(variant) (publication as MavenPublicationInternal).publishWithOriginalFileName() - publication.artifactId = coordinates.name - publication.groupId = coordinates.group - publication.version = coordinates.version + publication.artifactId = coordinates?.name ?: "${project.name}-${variant.target.name.toLowerCase()}" + publication.groupId = coordinates?.group ?: project.group.toString() + publication.version = coordinates?.version ?: project.version.toString() } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt index 156a371c1ef..8af00837f68 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt @@ -10,8 +10,8 @@ import org.gradle.api.artifacts.* import org.gradle.api.attributes.AttributeContainer import org.gradle.api.attributes.Usage import org.gradle.api.capabilities.Capability +import org.gradle.api.component.ComponentWithCoordinates import org.gradle.api.component.ComponentWithVariants -import org.gradle.api.internal.artifacts.DefaultModuleVersionIdentifier import org.gradle.api.internal.component.SoftwareComponentInternal import org.gradle.api.internal.component.UsageContext import org.jetbrains.kotlin.gradle.plugin.KotlinTarget @@ -37,17 +37,9 @@ class KotlinSoftwareComponent( } } -class KotlinVariant( - private val project: Project, +open class KotlinVariant( override val target: KotlinTarget ) : SoftwareComponentInternal, KotlinTargetComponent { - - override fun getCoordinates() = DefaultModuleVersionIdentifier( - project.group.toString(), - "${project.name}-${target.name.toLowerCase()}", - project.version.toString() - ) - override fun getUsages(): Set = target.createUsageContexts() override fun getName(): String = target.name @@ -55,6 +47,28 @@ class KotlinVariant( get() = target.publishable } +class KotlinVariantWithCoordinates( + target: KotlinTarget +) : KotlinVariant(target), + ComponentWithCoordinates /* Gradle 4.7+ API, don't use with older versions */ +{ + override fun getCoordinates() = object : ModuleVersionIdentifier { + private val project get() = target.project + + private val moduleName: String get() = "${project.name}-${target.name.toLowerCase()}" + private val moduleGroup: String get() = project.group.toString() + + override fun getGroup() = moduleGroup + override fun getName() = moduleName + override fun getVersion() = project.version.toString() + + override fun getModule(): ModuleIdentifier = object : ModuleIdentifier { + override fun getGroup(): String = moduleGroup + override fun getName(): String = moduleName + } + } +} + // At the moment all KN artifacts have JAVA_API usage. // TODO: Replace it with a specific usage object NativeUsage { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt index 0518cb8b871..76e3ebadf3c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt @@ -12,6 +12,7 @@ import org.gradle.api.attributes.AttributeContainer import org.gradle.api.internal.component.UsageContext import org.gradle.api.plugins.JavaPlugin import org.jetbrains.kotlin.gradle.plugin.* +import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.konan.target.KonanTarget @@ -39,7 +40,12 @@ abstract class AbstractKotlinTarget ( override val publishable: Boolean get() = true - override val component: KotlinTargetComponent = KotlinVariant(project, this) + override val component: KotlinTargetComponent by lazy { + if (isGradleVersionAtLeast(4, 7)) + KotlinVariantWithCoordinates(this) + else + KotlinVariant(this) + } override fun createUsageContexts(): Set = setOf(