[Gradle, JS] Add DCE task with dependsOn relationships
This commit is contained in:
+68
-12
@@ -6,26 +6,33 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.js.subtargets
|
package org.jetbrains.kotlin.gradle.targets.js.subtargets
|
||||||
|
|
||||||
import org.gradle.api.NamedDomainObjectContainer
|
import org.gradle.api.NamedDomainObjectContainer
|
||||||
|
import org.gradle.api.tasks.TaskProvider
|
||||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariant
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariant
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Devtool
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Devtool
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Mode
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Mode
|
||||||
|
import org.jetbrains.kotlin.gradle.tasks.KotlinJsDce
|
||||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
|
import java.io.File
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
|
open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
|
||||||
KotlinJsSubTarget(target, "browser"),
|
KotlinJsSubTarget(target, "browser"),
|
||||||
KotlinJsBrowserDsl {
|
KotlinJsBrowserDsl {
|
||||||
|
|
||||||
|
lateinit var dceTask: TaskProvider<KotlinJsDce>
|
||||||
|
|
||||||
lateinit var buildVariants: NamedDomainObjectContainer<BuildVariant>
|
lateinit var buildVariants: NamedDomainObjectContainer<BuildVariant>
|
||||||
|
|
||||||
override val testTaskDescription: String
|
override val testTaskDescription: String
|
||||||
@@ -52,9 +59,15 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
|
|||||||
val project = compilation.target.project
|
val project = compilation.target.project
|
||||||
val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
|
val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
|
||||||
|
|
||||||
|
val dceTask = if (::dceTask.isInitialized) {
|
||||||
|
this.dceTask
|
||||||
|
} else {
|
||||||
|
configureDce(compilation)
|
||||||
|
}
|
||||||
|
|
||||||
buildVariants.all { buildVariant ->
|
buildVariants.all { buildVariant ->
|
||||||
val kind = buildVariant.kind
|
val kind = buildVariant.kind
|
||||||
val run = project.registerTask<KotlinWebpack>(
|
project.registerTask<KotlinWebpack>(
|
||||||
disambiguateCamelCased(
|
disambiguateCamelCased(
|
||||||
lowerCamelCaseName(
|
lowerCamelCaseName(
|
||||||
buildVariant.name,
|
buildVariant.name,
|
||||||
@@ -65,7 +78,6 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
|
|||||||
val compileKotlinTask = compilation.compileKotlinTask
|
val compileKotlinTask = compilation.compileKotlinTask
|
||||||
it.dependsOn(
|
it.dependsOn(
|
||||||
nodeJs.npmInstallTask,
|
nodeJs.npmInstallTask,
|
||||||
compileKotlinTask,
|
|
||||||
target.project.tasks.getByName(compilation.processResourcesTaskName)
|
target.project.tasks.getByName(compilation.processResourcesTaskName)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -81,10 +93,16 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
|
|||||||
)
|
)
|
||||||
|
|
||||||
it.outputs.upToDateWhen { false }
|
it.outputs.upToDateWhen { false }
|
||||||
}
|
|
||||||
|
|
||||||
if (kind == BuildVariantKind.DEBUG) {
|
when (kind) {
|
||||||
target.runTask.dependsOn(run)
|
BuildVariantKind.RELEASE -> {
|
||||||
|
it.dependsOn(dceTask)
|
||||||
|
}
|
||||||
|
BuildVariantKind.DEBUG -> {
|
||||||
|
it.dependsOn(compileKotlinTask)
|
||||||
|
target.runTask.dependsOn(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -93,9 +111,15 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
|
|||||||
val project = compilation.target.project
|
val project = compilation.target.project
|
||||||
val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
|
val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
|
||||||
|
|
||||||
|
val dceTask = if (::dceTask.isInitialized) {
|
||||||
|
this.dceTask
|
||||||
|
} else {
|
||||||
|
configureDce(compilation)
|
||||||
|
}
|
||||||
|
|
||||||
buildVariants.all { buildVariant ->
|
buildVariants.all { buildVariant ->
|
||||||
val kind = buildVariant.kind
|
val kind = buildVariant.kind
|
||||||
val build = project.registerTask<KotlinWebpack>(
|
project.registerTask<KotlinWebpack>(
|
||||||
disambiguateCamelCased(
|
disambiguateCamelCased(
|
||||||
lowerCamelCaseName(
|
lowerCamelCaseName(
|
||||||
buildVariant.name,
|
buildVariant.name,
|
||||||
@@ -105,8 +129,7 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
|
|||||||
) {
|
) {
|
||||||
val compileKotlinTask = compilation.compileKotlinTask
|
val compileKotlinTask = compilation.compileKotlinTask
|
||||||
it.dependsOn(
|
it.dependsOn(
|
||||||
nodeJs.npmInstallTask,
|
nodeJs.npmInstallTask
|
||||||
compileKotlinTask
|
|
||||||
)
|
)
|
||||||
|
|
||||||
it.configureOptimization(kind)
|
it.configureOptimization(kind)
|
||||||
@@ -114,12 +137,40 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
|
|||||||
it.compilation = compilation
|
it.compilation = compilation
|
||||||
it.description = "build webpack ${kind.name.toLowerCase()} bundle"
|
it.description = "build webpack ${kind.name.toLowerCase()} bundle"
|
||||||
|
|
||||||
|
when (kind) {
|
||||||
|
BuildVariantKind.RELEASE -> {
|
||||||
|
it.dependsOn(dceTask)
|
||||||
|
project.tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).dependsOn(it)
|
||||||
|
}
|
||||||
|
BuildVariantKind.DEBUG -> {
|
||||||
|
it.dependsOn(compileKotlinTask)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (kind == BuildVariantKind.RELEASE) {
|
private fun configureDce(compilation: KotlinJsCompilation): TaskProvider<KotlinJsDce> {
|
||||||
project.tasks.getByName(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).dependsOn(build)
|
val project = compilation.target.project
|
||||||
}
|
|
||||||
|
val dceTaskName = lowerCamelCaseName(
|
||||||
|
DCE_TASK_PREFIX,
|
||||||
|
compilation.target.disambiguationClassifier,
|
||||||
|
compilation.name.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME },
|
||||||
|
DCE_TASK_SUFFIX
|
||||||
|
)
|
||||||
|
|
||||||
|
val kotlinTask = compilation.compileKotlinTask
|
||||||
|
|
||||||
|
return project.registerTask<KotlinJsDce>(dceTaskName) {
|
||||||
|
it.dependsOn(kotlinTask)
|
||||||
|
|
||||||
|
it.classpath = project.configurations.getByName(compilation.compileDependencyConfigurationName)
|
||||||
|
it.destinationDir = it.dceOptions.outputDirectory?.let { File(it) }
|
||||||
|
?: compilation.npmProject.dir.resolve(DCE_DIR)
|
||||||
|
it.source(kotlinTask.outputFile)
|
||||||
|
}.also {
|
||||||
|
dceTask = it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,6 +208,11 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
const val DCE_TASK_PREFIX = "processDce"
|
||||||
|
const val DCE_TASK_SUFFIX = "kotlinJs"
|
||||||
|
|
||||||
|
const val DCE_DIR = "kotlin-dce"
|
||||||
|
|
||||||
const val RELEASE = "release"
|
const val RELEASE = "release"
|
||||||
const val DEBUG = "debug"
|
const val DEBUG = "debug"
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-2
@@ -45,8 +45,10 @@ abstract class KotlinJsSubTarget(
|
|||||||
|
|
||||||
configureBuildVariants()
|
configureBuildVariants()
|
||||||
configureTests()
|
configureTests()
|
||||||
configure { configureRun(it) }
|
configure {
|
||||||
configure { configureBuild(it) }
|
configureRun(it)
|
||||||
|
configureBuild(it)
|
||||||
|
}
|
||||||
|
|
||||||
target.compilations.all {
|
target.compilations.all {
|
||||||
val npmProject = it.npmProject
|
val npmProject = it.npmProject
|
||||||
|
|||||||
+3
-3
@@ -25,15 +25,15 @@ import org.gradle.api.tasks.Internal
|
|||||||
import org.gradle.api.tasks.TaskAction
|
import org.gradle.api.tasks.TaskAction
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JSDceArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JSDceArguments
|
||||||
import org.jetbrains.kotlin.cli.js.dce.K2JSDce
|
import org.jetbrains.kotlin.cli.js.dce.K2JSDce
|
||||||
import org.jetbrains.kotlin.gradle.logging.GradleKotlinLogger
|
|
||||||
import org.jetbrains.kotlin.compilerRunner.runToolInSeparateProcess
|
import org.jetbrains.kotlin.compilerRunner.runToolInSeparateProcess
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDceOptions
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDceOptions
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDceOptionsImpl
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDceOptionsImpl
|
||||||
|
import org.jetbrains.kotlin.gradle.logging.GradleKotlinLogger
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@CacheableTask
|
@CacheableTask
|
||||||
open class KotlinJsDce : AbstractKotlinCompileTool<K2JSDceArguments>(), KotlinJsDce {
|
open class KotlinJsDce : AbstractKotlinCompileTool<K2JSDceArguments>(), KotlinJsDce {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
cacheOnlyIfEnabledForKotlin()
|
cacheOnlyIfEnabledForKotlin()
|
||||||
@@ -67,7 +67,7 @@ import java.io.File
|
|||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
fun performDce() {
|
fun performDce() {
|
||||||
val inputFiles = (listOf(getSource()) + classpath.map { project.fileTree(it) })
|
val inputFiles = (listOf(source) + classpath.map { project.fileTree(it) })
|
||||||
.reduce(FileTree::plus)
|
.reduce(FileTree::plus)
|
||||||
.files.map { it.path }
|
.files.map { it.path }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user