From 3731d4b89afad8b9df208168a7d7832388e72232 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Tue, 21 Jan 2020 19:47:18 +0300 Subject: [PATCH] [Gradle, JS] Publish with 2 variants --- .../gradle/targets/js/KotlinJsTarget.kt | 59 +++++++++++++++++-- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt index 46cbbac363f..cd22b381e46 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt @@ -7,12 +7,15 @@ package org.jetbrains.kotlin.gradle.targets.js import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project +import org.gradle.api.artifacts.ConfigurablePublishArtifact +import org.gradle.api.artifacts.Dependency +import org.gradle.api.attributes.Usage import org.gradle.api.tasks.TaskProvider +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator.Companion.runTaskNameSuffix -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType -import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl @@ -22,6 +25,7 @@ import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinNodeJs import org.jetbrains.kotlin.gradle.tasks.locateTask import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestReport import org.jetbrains.kotlin.gradle.testing.testTaskName +import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import javax.inject.Inject @@ -37,6 +41,53 @@ constructor( override lateinit var testRuns: NamedDomainObjectContainer internal set + override val kotlinComponents: Set by lazy { + if (irTarget == null) + super.kotlinComponents + else { + val usageContexts = mutableSetOf() + + // This usage value is only needed for Maven scope mapping. Don't replace it with a custom Kotlin Usage value + val javaApiUsage = project.usageByName(if (isGradleVersionAtLeast(5, 3)) "java-api-jars" else Usage.JAVA_API) + + usageContexts += run { + DefaultKotlinUsageContext( + compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME), + javaApiUsage, + apiElementsConfigurationName + ) + } + + usageContexts += run { + DefaultKotlinUsageContext( + irTarget!!.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME), + javaApiUsage, + irTarget!!.apiElementsConfigurationName + ) + } + + val componentName = + if (project.kotlinExtension is KotlinMultiplatformExtension) + targetName + else PRIMARY_SINGLE_COMPONENT_NAME + + val component = + createKotlinVariant(componentName, compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME), usageContexts) + + val sourcesJarTask = + sourcesJarTask(project, lazy { project.kotlinExtension.sourceSets.toSet() }, null, targetName.toLowerCase()) + + component.sourcesArtifacts = setOf( + project.artifacts.add(Dependency.ARCHIVES_CONFIGURATION, sourcesJarTask).apply { + this as ConfigurablePublishArtifact + classifier = "sources" + } + ) + + setOf(component) + } + } + var irTarget: KotlinJsIrTarget? = null val testTaskName get() = testRuns.getByName(KotlinTargetWithTests.DEFAULT_TEST_RUN_NAME).testTaskName