Gradle, js: use js compilation only after target configuration

This commit is contained in:
Sergey Rostov
2019-05-13 14:44:44 +03:00
parent baf9ecd641
commit 77959cc0af
5 changed files with 34 additions and 22 deletions
@@ -14,17 +14,22 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
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.dsl.KotlinJsNodeDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolveTask
import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinBrowserJs import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinBrowserJs
import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinNodeJs import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinNodeJs
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
class KotlinJsTarget(project: Project, platformType: KotlinPlatformType) : class KotlinJsTarget(project: Project, platformType: KotlinPlatformType) :
KotlinOnlyTarget<KotlinJsCompilation>(project, platformType), KotlinJsTargetDsl { KotlinOnlyTarget<KotlinJsCompilation>(project, platformType), KotlinJsTargetDsl {
val npmResolveTaskHolder = project.locateOrRegisterTask<NpmResolveTask>("npmResolve") {}
val npmResolveTask
get() = npmResolveTaskHolder.getTaskOrProvider()
val testTaskName = lowerCamelCaseName(disambiguationClassifier, testTaskNameSuffix) val testTaskName get() = lowerCamelCaseName(disambiguationClassifier, testTaskNameSuffix)
val testTask get() = project.tasks.maybeCreate(testTaskName) val testTask get() = project.tasks.maybeCreate(testTaskName)
val runTaskName = lowerCamelCaseName(disambiguationClassifier, runTaskNameSuffix) val runTaskName get() = lowerCamelCaseName(disambiguationClassifier, runTaskNameSuffix)
val runTask get() = project.tasks.maybeCreate(runTaskName) val runTask get() = project.tasks.maybeCreate(runTaskName)
private var hasSubtargets = false private var hasSubtargets = false
@@ -27,19 +27,28 @@ open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) :
target.configureDefaults() target.configureDefaults()
super.configureTarget(target) super.configureTarget(target)
target.project.tasks.maybeCreate(runTaskNameSuffix).dependsOn(target.runTask) target.compilations.forEach {
it.compileKotlinTask.dependsOn(target.npmResolveTask)
}
if (target.disambiguationClassifier != null) {
target.project.tasks.maybeCreate(runTaskNameSuffix).dependsOn(target.runTask)
}
} }
override fun configureTest(target: KotlinOnlyTarget<KotlinJsCompilation>) { override fun configureTest(target: KotlinOnlyTarget<KotlinJsCompilation>) {
// tests configured in KotlinJsSubTarget.configure // tests configured in KotlinJsSubTarget.configure
target as KotlinJsTarget target as KotlinJsTarget
val tasks = target.project.tasks
val check = tasks.findByName(JavaBasePlugin.CHECK_TASK_NAME)
@Suppress("IfThenToSafeAccess") if (target.disambiguationClassifier != null) {
if (check != null) { val tasks = target.project.tasks
check.dependsOn(target.testTask) val check = tasks.findByName(JavaBasePlugin.CHECK_TASK_NAME)
@Suppress("IfThenToSafeAccess")
if (check != null) {
check.dependsOn(target.testTask)
}
} }
} }
@@ -42,10 +42,10 @@ class KotlinBrowserJs(target: KotlinJsTarget) :
override fun configureRun(compilation: KotlinJsCompilation) { override fun configureRun(compilation: KotlinJsCompilation) {
val project = compilation.target.project val project = compilation.target.project
val npmProject = project.npmProject val npmProject = project.npmProject
val compileKotlinTask = compilation.compileKotlinTask
project.createOrRegisterTask<KotlinWebpack>(disambiguateCamelCased("webpack")) { project.createOrRegisterTask<KotlinWebpack>(disambiguateCamelCased("webpack")) {
it.dependsOn(npmResolveTask, compileKotlinTask) val compileKotlinTask = compilation.compileKotlinTask
it.dependsOn(target.npmResolveTask, compileKotlinTask)
it.entry = npmProject.compileOutput(compileKotlinTask) it.entry = npmProject.compileOutput(compileKotlinTask)
@@ -53,7 +53,8 @@ class KotlinBrowserJs(target: KotlinJsTarget) :
} }
project.createOrRegisterTask<KotlinWebpack>(disambiguateCamelCased("run")) { project.createOrRegisterTask<KotlinWebpack>(disambiguateCamelCased("run")) {
it.dependsOn(npmResolveTask, compileKotlinTask) val compileKotlinTask = compilation.compileKotlinTask
it.dependsOn(target.npmResolveTask, compileKotlinTask)
it.bin = "webpack-dev-server" it.bin = "webpack-dev-server"
it.entry = npmProject.compileOutput(compileKotlinTask) it.entry = npmProject.compileOutput(compileKotlinTask)
@@ -8,11 +8,9 @@ package org.jetbrains.kotlin.gradle.targets.js.subtargets
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.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsPlugin import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsPlugin
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolveTask
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
@@ -25,8 +23,6 @@ abstract class KotlinJsSubTarget(
) : KotlinJsSubTargetDsl { ) : KotlinJsSubTargetDsl {
val project get() = target.project val project get() = target.project
val npmResolveTask = project.createOrRegisterTask<NpmResolveTask>("npmResolve") {}
val runTaskName = disambiguateCamelCased("run") val runTaskName = disambiguateCamelCased("run")
val testTaskName = disambiguateCamelCased("test") val testTaskName = disambiguateCamelCased("test")
@@ -59,17 +55,15 @@ abstract class KotlinJsSubTarget(
} }
private fun configureTests(compilation: KotlinJsCompilation) { private fun configureTests(compilation: KotlinJsCompilation) {
val compileTask = compilation.compileKotlinTask
compileTask.dependsOn(npmResolveTask)
// apply plugin (cannot be done at task instantiation time) // apply plugin (cannot be done at task instantiation time)
val nodeJs = NodeJsPlugin.apply(target.project).root val nodeJs = NodeJsPlugin.apply(target.project).root
val testJs = project.createOrRegisterTask<KotlinJsTest>(testTaskName) { testJs -> val testJs = project.createOrRegisterTask<KotlinJsTest>(testTaskName) { testJs ->
val compileTask = compilation.compileKotlinTask
testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP
testJs.dependsOn(npmResolveTask, compileTask, nodeJs.nodeJsSetupTask) testJs.dependsOn(target.npmResolveTask, compileTask, nodeJs.nodeJsSetupTask)
testJs.onlyIf { testJs.onlyIf {
compileTask.outputFile.exists() compileTask.outputFile.exists()
@@ -99,7 +93,6 @@ abstract class KotlinJsSubTarget(
fun configureRun() { fun configureRun() {
target.compilations.all { compilation -> target.compilations.all { compilation ->
if (compilation.name == KotlinCompilation.MAIN_COMPILATION_NAME) { if (compilation.name == KotlinCompilation.MAIN_COMPILATION_NAME) {
compilation.compileKotlinTask.dependsOn(npmResolveTask)
configureRun(compilation) configureRun(compilation)
} }
} }
@@ -33,9 +33,13 @@ class KotlinNodeJs(target: KotlinJsTarget) :
} }
val project = target.project val project = target.project
project.createOrRegisterTask<NodeJsExec>(disambiguateCamelCased("run")) { project.createOrRegisterTask<NodeJsExec>(disambiguateCamelCased("run")) {
val compileKotlinTask = compilation.compileKotlinTask
it.dependsOn(target.npmResolveTask, compileKotlinTask)
val npmProject = project.npmProject val npmProject = project.npmProject
it.args(npmProject.compileOutput(compilation.compileKotlinTask)) it.args(npmProject.compileOutput(compileKotlinTask))
// source maps support // source maps support
it.args("--require", npmProject.getModuleEntryPath("kotlin-test-nodejs-runner")) it.args("--require", npmProject.getModuleEntryPath("kotlin-test-nodejs-runner"))