diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanBuildingConfig.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanBuildingConfig.kt index e4b9f33e287..07c70102cc7 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanBuildingConfig.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanBuildingConfig.kt @@ -39,6 +39,7 @@ abstract class KonanBuildingConfig(private val name_: Stri val targets: Iterable) : KonanBuildingSpec, Named, DefaultNamedDomainObjectSet(type, instantiator, { it.konanTarget.visibleName }) { + internal val mainVariant = KonanSoftwareComponent(project) override fun getName() = name_ protected val targetToTask = mutableMapOf() @@ -114,7 +115,7 @@ abstract class KonanBuildingConfig(private val name_: Stri protected fun createTask(target: KonanTarget): T = project.tasks.create(generateTaskName(target), type) { val outputDescription = determineOutputPlacement(target) - it.init(outputDescription.destinationDir, outputDescription.artifactName, target) + it.init(this, outputDescription.destinationDir, outputDescription.artifactName, target) it.group = BasePlugin.BUILD_GROUP it.description = generateTaskDescription(it) } ?: throw Exception("Cannot create task for target: ${target.visibleName}") diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt index 507b2210bd4..4452bb7dbd9 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanPlugin.kt @@ -309,7 +309,6 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR project.tasks.create(KONAN_DOWNLOAD_TASK_NAME, KonanCompilerDownloadTask::class.java) project.tasks.create(KONAN_GENERATE_CMAKE_TASK_NAME, KonanGenerateCMakeTask::class.java) project.extensions.create(KONAN_EXTENSION_NAME, KonanExtension::class.java) - val mainVariant = project.extensions.create(ComponentWithVariants::class.java, KONAN_MAIN_VARIANT, KonanSoftwareComponent::class.java, project) val container = project.extensions.create(KonanArtifactContainer::class.java, ARTIFACTS_CONTAINER_NAME, KonanArtifactContainer::class.java, project) // Set additional project properties like konan.home, konan.build.targets etc. @@ -353,11 +352,11 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR // Enable multiplatform support project.pluginManager.apply(KotlinNativePlatformPlugin::class.java) project.afterEvaluate { - val konanSoftwareComponent = mainVariant as KonanSoftwareComponent project.pluginManager.withPlugin("maven-publish") { container.all { val buildingConfig = it val artifactId = buildingConfig.name + val konanSoftwareComponent = buildingConfig.mainVariant project.extensions.configure(PublishingExtension::class.java) { val publishing = it it.publications.create(artifactId, MavenPublication::class.java) { @@ -366,11 +365,14 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR it.from(konanSoftwareComponent) (it as MavenPublicationInternal).publishWithOriginalFileName() } + } + + project.extensions.configure(PublishingExtension::class.java) { + val publishing = it for (v in konanSoftwareComponent.variants) { // TODO: with gradle 4.7 don't forget to change to SoftwareComponentsWithCoordinates - val name = "${v.name}/$artifactId" - publishing.publications.create(name, MavenPublication::class.java) { - it.artifactId = "${artifactId}-${v.name}" + publishing.publications.create(v.name, MavenPublication::class.java) { + it.artifactId = v.name it.groupId = project.group.toString() it.version = project.version.toString() it.from(v) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBaseTasks.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBaseTasks.kt index 12e4f294f83..c8070cf2b57 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBaseTasks.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBaseTasks.kt @@ -81,7 +81,7 @@ abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec { protected abstract val artifactPrefix: String @Internal get - internal open fun init(destinationDir: File, artifactName: String, target: KonanTarget) { + internal open fun init(config:KonanBuildingConfig<*>, destinationDir: File, artifactName: String, target: KonanTarget) { super.init(target) this.destinationDir = destinationDir this.artifactName = artifactName @@ -98,7 +98,7 @@ abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec { project.pluginManager.withPlugin("maven-publish") { platformConfiguration.artifacts.add(object: PublishArtifact { - override fun getName() = "${artifact.name}/${target.name}" + override fun getName() = "${artifact.name.removeSuffix("$artifactSuffix")}/${target.name}" override fun getExtension() = if (artifactSuffix.startsWith('.')) artifactSuffix.substring(1) else artifactSuffix override fun getType() = artifactSuffix override fun getClassifier():String? = target.name @@ -109,8 +109,8 @@ abstract class KonanArtifactTask: KonanTargetableTask(), KonanArtifactSpec { val objectFactory = project.objects val linkUsage = objectFactory.named(Usage::class.java, Usage.NATIVE_LINK) val runtimeUsage = objectFactory.named(Usage::class.java, Usage.NATIVE_RUNTIME) - val konanSoftwareComponent = project.extensions.getByName(KonanPlugin.KONAN_MAIN_VARIANT) as KonanSoftwareComponent - konanSoftwareComponent.addVariant(NativeVariant(Names.of(target.name), linkUsage, null, linkUsage, platformConfiguration)) + val konanSoftwareComponent = config.mainVariant + konanSoftwareComponent.addVariant(NativeVariant(Names.of("${artifact.name.removeSuffix("$artifactSuffix")}_${target.name}"), linkUsage, null, linkUsage, platformConfiguration)) } } diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBuildingTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBuildingTask.kt index 2953e00e10b..784d5f98b47 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBuildingTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanBuildingTask.kt @@ -28,9 +28,9 @@ abstract class KonanBuildingTask: KonanArtifactWithLibrariesTask(), KonanBuildin internal abstract val toolRunner: KonanToolRunner - override fun init(destinationDir: File, artifactName: String, target: KonanTarget) { + override fun init(config: KonanBuildingConfig<*>, destinationDir: File, artifactName: String, target: KonanTarget) { dependsOn(project.konanCompilerDownloadTask) - super.init(destinationDir, artifactName, target) + super.init(config, destinationDir, artifactName, target) } @Console diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanInteropTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanInteropTask.kt index b2659561ca4..92a3e48a74e 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanInteropTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanInteropTask.kt @@ -34,8 +34,8 @@ open class KonanInteropTask: KonanBuildingTask(), KonanInteropSpec { @Internal override val toolRunner: KonanToolRunner = KonanInteropRunner(project) - override fun init(destinationDir: File, artifactName: String, target: KonanTarget) { - super.init(destinationDir, artifactName, target) + override fun init(config: KonanBuildingConfig<*>, destinationDir: File, artifactName: String, target: KonanTarget) { + super.init(config, destinationDir, artifactName, target) this.defFile = project.konanDefaultDefFile(artifactName) }