From 146905da407a7dc3c33784ddd2746e266d45f35e Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Fri, 6 Nov 2015 20:07:00 -0800 Subject: [PATCH] ApplicationPlugin work. --- .../kotlin/com/beust/kobalt/api/BasePlugin.kt | 6 ++++ .../kotlin/com/beust/kobalt/api/Project.kt | 6 ++-- .../kobalt/internal/JvmCompilerPlugin.kt | 4 --- .../kobalt/plugin/android/AndroidPlugin.kt | 4 +-- .../plugin/application/ApplicationPlugin.kt | 32 ++++++++++++++++--- .../beust/kobalt/plugin/java/JavaProject.kt | 2 +- .../kobalt/plugin/kotlin/KotlinProject.kt | 4 +-- .../plugin/packaging/PackagingPlugin.kt | 6 ++++ 8 files changed, 46 insertions(+), 18 deletions(-) diff --git a/src/main/kotlin/com/beust/kobalt/api/BasePlugin.kt b/src/main/kotlin/com/beust/kobalt/api/BasePlugin.kt index 7b5b7a95..d576dbd5 100644 --- a/src/main/kotlin/com/beust/kobalt/api/BasePlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/api/BasePlugin.kt @@ -12,6 +12,12 @@ abstract public class BasePlugin : Plugin { override fun accept(project: Project) = true var plugins: Plugins by Delegates.notNull() + var context: KobaltContext by Delegates.notNull() + + override fun apply(project: Project, context: KobaltContext) { + this.context = context + } + protected val projects = arrayListOf() fun addProject(project: Project, dependsOn: Array) { diff --git a/src/main/kotlin/com/beust/kobalt/api/Project.kt b/src/main/kotlin/com/beust/kobalt/api/Project.kt index ca815e63..258e090f 100644 --- a/src/main/kotlin/com/beust/kobalt/api/Project.kt +++ b/src/main/kotlin/com/beust/kobalt/api/Project.kt @@ -8,7 +8,7 @@ import com.beust.kobalt.misc.KFiles import java.util.* open public class Project( - @Directive open var name: String? = null, + @Directive open var name: String, @Directive open var version: String? = null, @Directive open var directory: String = ".", @Directive open var buildDirectory: String? = KFiles.KOBALT_BUILD_DIR, @@ -30,7 +30,7 @@ open public class Project( } override fun hashCode(): Int { - return name!!.hashCode() + return name.hashCode() } // @@ -91,7 +91,7 @@ open public class Project( /** Used to disambiguate various name properties */ @Directive - val projectName: String get() = name!! + val projectName: String get() = name } public class Sources(val project: Project, val sources: ArrayList) { diff --git a/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt b/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt index 497c50fa..b8e579bf 100644 --- a/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt @@ -43,12 +43,8 @@ abstract class JvmCompilerPlugin @Inject constructor( log(2, "${project.name}: $s") } - var context: KobaltContext? = null - - override fun apply(project: Project, context: KobaltContext) { super.apply(project, context) - this.context = context context.pluginProperties.put(name, BUILD_DIR, project.buildDirectory + File.separator + "classes") } diff --git a/src/main/kotlin/com/beust/kobalt/plugin/android/AndroidPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/android/AndroidPlugin.kt index 34504a2e..b1ce98ec 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/android/AndroidPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/android/AndroidPlugin.kt @@ -40,11 +40,9 @@ fun Project.android(init: AndroidConfig.() -> Unit) : AndroidConfig { public class AndroidPlugin @Inject constructor(val javaCompiler: JavaCompiler) : BasePlugin(), IClasspathContributor { override val name = "android" - lateinit var context: KobaltContext - override fun apply(project: Project, context: KobaltContext) { + super.apply(project, context) log(1, "Applying plug-in Android on project $project") - this.context = context if (accept(project)) { project.compileDependencies.add(FileDependency(androidJar(project).toString())) } 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 e6fb0d3c..2ec15c27 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt @@ -1,14 +1,20 @@ package com.beust.kobalt.plugin.application +import com.beust.kobalt.JavaInfo import com.beust.kobalt.Plugins +import com.beust.kobalt.SystemProperties import com.beust.kobalt.api.BasePlugin import com.beust.kobalt.api.Project import com.beust.kobalt.api.annotation.Directive -import com.beust.kobalt.maven.DependencyManager -import com.beust.kobalt.maven.LocalRepo +import com.beust.kobalt.api.annotation.Task +import com.beust.kobalt.internal.TaskResult +import com.beust.kobalt.maven.KobaltException import com.beust.kobalt.misc.KobaltExecutors +import com.beust.kobalt.misc.RunCommand +import com.beust.kobalt.plugin.packaging.PackagingPlugin import com.google.inject.Inject import com.google.inject.Singleton +import java.io.File @Directive class ApplicationConfig { @@ -27,8 +33,7 @@ fun Project.application(init: ApplicationConfig.() -> Unit) { } @Singleton -class ApplicationPlugin @Inject constructor(val dependencyManager : DependencyManager, - val executors: KobaltExecutors, val localRepo: LocalRepo) : BasePlugin() { +class ApplicationPlugin @Inject constructor(val executors: KobaltExecutors) : BasePlugin() { companion object { const val NAME = "application" @@ -36,8 +41,25 @@ class ApplicationPlugin @Inject constructor(val dependencyManager : DependencyMa override val name = NAME + val configs = hashMapOf() + fun addConfig(project: Project, config: ApplicationConfig) { - println("Adding config $config") + configs.put(project.name, config) + } + + @Task(name = "run", description = "Run the main class", runAfter = arrayOf("assemble")) + fun taskRun(project: Project): TaskResult { + configs[project.name].let { config -> + val java = JavaInfo.create(File(SystemProperties.javaBase)).javaExecutable!! + if (config != null && config.mainClass != null) { + val jarName = context.pluginProperties.get("packaging", PackagingPlugin.JAR_NAME) as String + val args = listOf("-classpath", jarName) + config.jvmArgs + config.mainClass!! + RunCommand(java.absolutePath).run(args) + } else { + throw KobaltException("No \"mainClass\" specified in the application{} part of project ${project.name}") + } + } + return TaskResult() } } diff --git a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaProject.kt b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaProject.kt index 3f0173a8..76f36ca4 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaProject.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaProject.kt @@ -7,7 +7,7 @@ import com.beust.kobalt.misc.toString public class JavaProject( @Directive - override var name: String? = null, + override var name: String = "", @Directive override var version: String? = null, /** The absolute directory location of this project */ diff --git a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinProject.kt b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinProject.kt index 028ae693..32a06e3b 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinProject.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinProject.kt @@ -7,7 +7,7 @@ import com.beust.kobalt.misc.toString public class KotlinProject( @Directive - override var name: String? = null, + override var name: String = "", @Directive override var version: String? = null, /** The absolute directory location of this project */ @@ -27,5 +27,5 @@ public class KotlinProject( : Project(name, version, directory, buildDirectory, group, artifactId, packaging, dependencies, ".kt", projectInfo = KotlinProjectInfo()) { - override public fun toString() = toString("KotlinProject", "name", name!!) + override public fun toString() = toString("KotlinProject", "name", name) } 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 23818238..97f86468 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt @@ -44,6 +44,9 @@ class PackagingPlugin @Inject constructor(val dependencyManager : DependencyMana @ExportedProperty const val LIBS_DIR = "libsDir" + @ExportedProperty + const val JAR_NAME = "jarName" + const val TASK_ASSEMBLE : String = "assemble" } @@ -231,6 +234,9 @@ class PackagingPlugin @Inject constructor(val dependencyManager : DependencyMana outStream.flush() outStream.close() log(1, " Created $result") + + context.pluginProperties.put(name, JAR_NAME, result.absolutePath) + return result }