diff --git a/src/main/kotlin/com/beust/kobalt/api/BasePlugin.kt b/src/main/kotlin/com/beust/kobalt/api/BasePlugin.kt index 14dd345b..d1b2a693 100644 --- a/src/main/kotlin/com/beust/kobalt/api/BasePlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/api/BasePlugin.kt @@ -1,7 +1,9 @@ package com.beust.kobalt.api import com.beust.kobalt.Plugins +import com.beust.kobalt.TaskResult import com.beust.kobalt.internal.TaskManager +import com.beust.kobalt.internal.Variant import java.util.* import kotlin.properties.Delegates @@ -23,4 +25,26 @@ abstract public class BasePlugin : IPlugin { fun addProject(project: Project, dependsOn: Array) { projects.add(ProjectDescription(project, dependsOn.toList())) } + + /** + * Register dynamic tasks corresponding to the variants found in the project,e.g. assembleDevDebug, + * assembleDevRelease, etc... + */ + protected fun addVariantTasks(project: Project, taskName: String, runAfter : List, + runTask: (Project) -> TaskResult) { + project.productFlavors.keys.forEach { pf -> + project.buildTypes.keys.forEach { bt -> + val variant = Variant(pf, bt) + val taskName = variant.toTask(taskName) + addTask(project, taskName, taskName, + runAfter = runAfter.map { variant.toTask(it) }, + task = { p: Project -> + context.variant = Variant(pf, bt) + runTask(project) + TaskResult() + }) + } + } + } + } diff --git a/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt b/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt index 51c33780..d939973c 100644 --- a/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt @@ -53,18 +53,7 @@ abstract class JvmCompilerPlugin @Inject constructor( super.apply(project, context) project.projectProperties.put(BUILD_DIR, project.buildDirectory + File.separator + "classes") project.projectProperties.put(DEPENDENT_PROJECTS, projects()) - - project.productFlavors.keys.forEach { pf -> - project.buildTypes.keys.forEach { bt -> - val taskName = Variant(pf, bt).toTask("compile") - addTask(project, taskName, "Compile $taskName", - task = { p: Project -> - context.variant = Variant(pf, bt) - taskCompile(project) - TaskResult() - }) - } - } + addVariantTasks(project, "compile", emptyList(), { taskCompile(project) }) } /** diff --git a/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt index d86730b4..c7b5bf70 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt @@ -2,6 +2,7 @@ package com.beust.kobalt.plugin.application import com.beust.kobalt.* import com.beust.kobalt.api.ConfigPlugin +import com.beust.kobalt.api.KobaltContext import com.beust.kobalt.api.Project import com.beust.kobalt.api.ProjectDescription import com.beust.kobalt.api.annotation.Directive @@ -42,6 +43,11 @@ class ApplicationPlugin @Inject constructor(val executors: KobaltExecutors, override val name = NAME + override fun apply(project: Project, context: KobaltContext) { + super.apply(project, context) + addVariantTasks(project, "run", listOf("assemble"), { taskRun(project) }) + } + @Task(name = "run", description = "Run the main class", runAfter = arrayOf("assemble")) fun taskRun(project: Project): TaskResult { var result = TaskResult() diff --git a/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt index d7767631..c5dffd03 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt @@ -13,7 +13,6 @@ import com.beust.kobalt.api.annotation.ExportedProjectProperty import com.beust.kobalt.api.annotation.Task import com.beust.kobalt.glob import com.beust.kobalt.internal.JvmCompilerPlugin -import com.beust.kobalt.internal.Variant import com.beust.kobalt.maven.DependencyManager import com.beust.kobalt.maven.LocalRepo import com.beust.kobalt.misc.KFiles @@ -61,21 +60,7 @@ class PackagingPlugin @Inject constructor(val dependencyManager : DependencyMana override fun apply(project: Project, context: KobaltContext) { super.apply(project, context) project.projectProperties.put(LIBS_DIR, libsDir(project)) - - - project.productFlavors.keys.forEach { pf -> - project.buildTypes.keys.forEach { bt -> - val variant = Variant(pf, bt) - val taskName = variant.toTask("assemble") - addTask(project, taskName, "Assemble $taskName", - runAfter = listOf(variant.toTask("compile")), - task = { p: Project -> - context.variant = Variant(pf, bt) - taskAssemble(project) - TaskResult() - }) - } - } + addVariantTasks(project, "assemble", listOf("compile"), { taskAssemble(project) }) } private fun libsDir(project: Project) = KFiles.makeDir(buildDir(project).path, "libs").path @@ -210,8 +195,10 @@ class PackagingPlugin @Inject constructor(val dependencyManager : DependencyMana val fromPath = directory + "/" + includedFile.from if (File(fromPath).exists()) { spec.toFiles(fromPath).forEach { file -> - if (!File(fromPath, file.path).exists()) { - throw AssertionError("File should exist: $file") + File(fromPath, file.path).let { + if (! it.exists()) { + throw AssertionError("File should exist: $it") + } } if (!isExcluded(file, excludes)) {