[Gradle, JS] Create not Jar tasks, but Zip tasks, because we can create klibs

This commit is contained in:
Ilya Goncharov
2020-01-21 18:00:09 +03:00
parent 3467230242
commit f15d1ef23e
5 changed files with 33 additions and 27 deletions
@@ -22,6 +22,7 @@ import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.tasks.Delete
import org.gradle.api.tasks.bundling.Jar
import org.gradle.api.tasks.bundling.Zip
import org.gradle.language.base.plugins.LifecycleBasePlugin
import org.gradle.language.jvm.tasks.ProcessResources
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
@@ -350,12 +351,14 @@ abstract class KotlinOnlyTargetConfigurator<KotlinCompilationType : KotlinCompil
}
}
/** The implementations are expected to create a [Jar] task under the name [KotlinTarget.artifactsTaskName] of the [target]. */
protected open fun createJarTasks(target: KotlinTargetType) {
/** The implementations are expected to create a [Zip] task under the name [KotlinTarget.artifactsTaskName] of the [target]. */
protected open fun createJarTasks(target: KotlinTargetType): Pair<String, Zip> {
val result = target.project.tasks.create(target.artifactsTaskName, Jar::class.java)
result.description = "Assembles a jar archive containing the main classes."
result.group = BasePlugin.BUILD_GROUP
result.from(target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME).output.allOutputs)
return ArtifactTypeDefinition.JAR_TYPE to result
}
override fun configureArchivesAndComponent(target: KotlinTargetType) {
@@ -363,17 +366,16 @@ abstract class KotlinOnlyTargetConfigurator<KotlinCompilationType : KotlinCompil
val mainCompilation = target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME)
createJarTasks(target)
val jar = project.tasks.getByName(target.artifactsTaskName) as Jar
val (type, task) = createJarTasks(target)
target.disambiguationClassifier?.let { jar.appendix = it.toLowerCase() }
target.disambiguationClassifier?.let { task.appendix = it.toLowerCase() }
// Workaround: adding the artifact during configuration seems to interfere with the Java plugin, which results into missing
// task dependency 'assemble -> jar' if the Java plugin is applied after this steps
project.afterEvaluate {
project.artifacts.add(Dependency.ARCHIVES_CONFIGURATION, jar) { jarArtifact ->
jarArtifact.builtBy(jar)
jarArtifact.type = ArtifactTypeDefinition.JAR_TYPE
project.artifacts.add(Dependency.ARCHIVES_CONFIGURATION, task) { jarArtifact ->
jarArtifact.builtBy(task)
jarArtifact.type = type
val apiElementsConfiguration = project.configurations.getByName(target.apiElementsConfigurationName)
addJar(apiElementsConfiguration, jarArtifact)
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.gradle.targets.js
import org.gradle.api.tasks.bundling.Jar
import org.gradle.language.base.plugins.LifecycleBasePlugin
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.Kotlin2JsSourceSetProcessor
@@ -13,7 +12,6 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinOnlyTargetConfigurator
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTestsConfigurator
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.defaultSourceSetName
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetConfigurator
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
@@ -92,15 +90,6 @@ open class KotlinJsTargetConfigurator(kotlinPluginVersion: String, val irConfigu
}
}
override fun createJarTasks(target: KotlinOnlyTarget<KotlinJsCompilation>) {
super.createJarTasks(target)
val jar = target.project.tasks.getByName(target.artifactsTaskName) as Jar
if (irConfigurator != null) {
jar.archiveAppendix.set("legacyJs")
}
}
override fun configureCompilations(target: KotlinJsTarget) {
super.configureCompilations(target)
@@ -0,0 +1,8 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle.targets.js.ir
const val KLIB_TYPE = "klib"
@@ -5,11 +5,13 @@
package org.jetbrains.kotlin.gradle.targets.js.ir
import org.gradle.api.tasks.bundling.Zip
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions
import org.jetbrains.kotlin.gradle.plugin.KotlinJsIrSourceSetProcessor
import org.jetbrains.kotlin.gradle.plugin.KotlinOnlyTargetConfigurator
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTestsConfigurator
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsIrReportAggregatingTestRun
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
@@ -21,11 +23,6 @@ open class KotlinJsIrTargetConfigurator(kotlinPluginVersion: String) :
override val testRunClass: Class<KotlinJsIrReportAggregatingTestRun> get() = KotlinJsIrReportAggregatingTestRun::class.java
@Deprecated("Remove when legacy js plugin will be removed")
fun configureTarget(target: KotlinJsIrTarget, mixedMode: Boolean) {
super<KotlinOnlyTargetConfigurator>.configureTarget(target) // TODO Add tests support
}
override fun createTestRun(
name: String,
target: KotlinJsIrTarget
@@ -54,6 +51,13 @@ open class KotlinJsIrTargetConfigurator(kotlinPluginVersion: String) :
return KotlinJsIrSourceSetProcessor(compilation.target.project, tasksProvider, compilation, kotlinPluginVersion)
}
override fun createJarTasks(target: KotlinOnlyTarget<KotlinJsIrCompilation>): Pair<String, Zip> {
val (_, task) = super.createJarTasks(target)
task.archiveExtension.set(KLIB_TYPE)
return KLIB_TYPE to task
}
override fun configureCompilations(target: KotlinJsIrTarget) {
super.configureCompilations(target)
@@ -14,6 +14,7 @@ import org.gradle.api.plugins.BasePlugin
import org.gradle.api.tasks.AbstractCopyTask
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.bundling.Jar
import org.gradle.api.tasks.bundling.Zip
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
@@ -23,8 +24,8 @@ import org.jetbrains.kotlin.gradle.plugin.sources.*
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.tasks.locateTask
import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.gradle.utils.setArchiveAppendixCompatible
@@ -131,8 +132,8 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) :
override fun run() = Unit
}
override fun createJarTasks(target: KotlinMetadataTarget) {
super.createJarTasks(target)
override fun createJarTasks(target: KotlinMetadataTarget): Pair<String, Zip> {
val result = super.createJarTasks(target)
if (target.project.isKotlinGranularMetadataEnabled) {
target.project.locateTask<Jar>(target.artifactsTaskName)!!.configure {
@@ -157,6 +158,8 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) :
}
}
}
return result
}
private fun setupDependencyTransformationForCommonSourceSets(target: KotlinMetadataTarget) {