[Gradle, JS] Publish with 2 variants

This commit is contained in:
Ilya Goncharov
2020-01-21 19:47:18 +03:00
parent f15d1ef23e
commit 3731d4b89a
@@ -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<KotlinJsReportAggregatingTestRun>
internal set
override val kotlinComponents: Set<KotlinTargetComponent> by lazy {
if (irTarget == null)
super.kotlinComponents
else {
val usageContexts = mutableSetOf<DefaultKotlinUsageContext>()
// 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