From e88f3ac484fdba7e322d2b26ed7018cef3bd2eee Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Wed, 18 Nov 2015 05:16:30 -0800 Subject: [PATCH] Automatically add artifacts of dependent projects. --- kobalt/src/Build.kt | 6 +--- .../kobalt/internal/JvmCompilerPlugin.kt | 31 +++++++++++++++++ .../beust/kobalt/maven/DependencyManager.kt | 22 +++++++++++++ .../beust/kobalt/plugin/java/JavaPlugin.kt | 22 +++++-------- .../kobalt/plugin/kotlin/KotlinPlugin.kt | 33 ++++++++----------- 5 files changed, 75 insertions(+), 39 deletions(-) diff --git a/kobalt/src/Build.kt b/kobalt/src/Build.kt index 844091aa..8da5d176 100644 --- a/kobalt/src/Build.kt +++ b/kobalt/src/Build.kt @@ -65,7 +65,6 @@ val kobalt = kotlinProject(wrapper) { "org.jetbrains.dokka:dokka-fatjar:0.9.2", "org.jetbrains.kotlinx:kotlinx.dom:0.0.2", -// file(homeDir("java/jcommander/target/jcommander-1.47.jar")), "com.beust:jcommander:1.48", "com.squareup.okhttp:okhttp:2.5.0", "org.jsoup:jsoup:1.8.3", @@ -78,10 +77,7 @@ val kobalt = kotlinProject(wrapper) { "io.reactivex:rxjava:1.0.16", "com.google.code.gson:gson:2.4", "com.squareup.retrofit:retrofit:1.9.0", - "com.squareup.okio:okio:1.6.0", -// "com.squareup.retrofit:retrofit:2.0.0-beta2", -// "com.squareup.retrofit:converter-gson:2.0.0-beta2", - file("modules/wrapper/kobaltBuild/libs/kobalt-wrapper.jar") + "com.squareup.okio:okio:1.6.0" ) } diff --git a/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt b/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt index c4398b4d..513d5f3a 100644 --- a/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt @@ -4,6 +4,7 @@ import com.beust.kobalt.TaskResult import com.beust.kobalt.api.BasePlugin import com.beust.kobalt.api.KobaltContext import com.beust.kobalt.api.Project +import com.beust.kobalt.api.ProjectDescription import com.beust.kobalt.api.annotation.ExportedProjectProperty import com.beust.kobalt.api.annotation.Task import com.beust.kobalt.maven.* @@ -129,4 +130,34 @@ abstract class JvmCompilerPlugin @Inject constructor( fun addCompilerArgs(vararg args: String) { compilerArgs.addAll(args) } + + fun findSourceFiles(dir: String, sourceDirectories: Collection): List { + val projectDir = File(dir) + return files.findRecursively(projectDir, + sourceDirectories.map { File(it) }) { it: String -> it.endsWith(".java") } + .map { File(projectDir, it).absolutePath } + } + + fun baseTaskCompile(project: Project, projectDescriptions: List) : TaskResult { + copyResources(project, JvmCompilerPlugin.SOURCE_SET_MAIN) + + val projDeps = dependencyManager.dependentProjectDependencies(projectDescriptions, project, context) + + val classpath = dependencyManager.calculateDependencies(project, context, project.compileDependencies, + project.compileProvidedDependencies, projDeps) + + val projectDirectory = File(project.directory) + val buildDirectory = File(projectDirectory, project.buildDirectory + File.separator + "classes") + buildDirectory.mkdirs() + + val sourceFiles = files.findRecursively(projectDirectory, project.sourceDirectories.map { File(it) }, + { it .endsWith(project.sourceSuffix) }) + .map { File(projectDirectory, it).absolutePath } + + val result = doCompile(project, classpath, sourceFiles, buildDirectory) + return result + } + + abstract fun doCompile(project: Project, classpath: List, sourceFiles: List, + buildDirectory: File) : TaskResult } diff --git a/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt b/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt index d45dffe7..99c51b88 100644 --- a/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt +++ b/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt @@ -3,7 +3,9 @@ package com.beust.kobalt.maven import com.beust.kobalt.api.IClasspathContributor import com.beust.kobalt.api.KobaltContext import com.beust.kobalt.api.Project +import com.beust.kobalt.api.ProjectDescription import com.beust.kobalt.misc.KobaltExecutors +import com.beust.kobalt.plugin.packaging.PackagingPlugin import com.google.common.collect.ArrayListMultimap import java.util.* import javax.inject.Inject @@ -81,4 +83,24 @@ public class DependencyManager @Inject constructor(val executors: KobaltExecutor } return result } + + /** + * If this project depends on other projects, we need to include their jar file and also + * their own dependencies + */ + fun dependentProjectDependencies(projectDescriptions: List, + project: Project, context: KobaltContext) : + List { + val result = arrayListOf() + projectDescriptions.filter { + it.project.name == project.name + }.forEach { pd -> + pd.dependsOn.forEach { p -> + result.add(FileDependency(p.projectProperties.getString(PackagingPlugin.JAR_NAME))) + result.addAll(calculateDependencies(p, context)) + } + } + + return result + } } diff --git a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt index a62fa04d..69c73f7c 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/java/JavaPlugin.kt @@ -11,6 +11,7 @@ import com.beust.kobalt.internal.JvmCompiler import com.beust.kobalt.internal.JvmCompilerPlugin import com.beust.kobalt.maven.DepFactory import com.beust.kobalt.maven.DependencyManager +import com.beust.kobalt.maven.IClasspathDependency import com.beust.kobalt.maven.LocalRepo import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.KobaltExecutors @@ -73,15 +74,15 @@ public class JavaPlugin @Inject constructor( @Task(name = TASK_COMPILE, description = "Compile the project") fun taskCompile(project: Project) : TaskResult { - copyResources(project, JvmCompilerPlugin.SOURCE_SET_MAIN) - val projectDir = File(project.directory) - val sourceFiles = findSourceFiles(project.directory, project.sourceDirectories) + return baseTaskCompile(project, projects()) + } + + override fun doCompile(project: Project, classpath: List, sourceFiles: List, + buildDirectory: File) : TaskResult { val result = if (sourceFiles.size > 0) { - val buildDir = File(projectDir, project.buildDirectory + File.separator + "classes") - .apply { mkdirs() } - javaCompiler.compile(project, context, project.compileDependencies, sourceFiles, - buildDir, compilerArgs) + javaCompiler.compile(project, context, classpath, sourceFiles, + buildDirectory, compilerArgs) } else { warn("Couldn't find any source files to compile") TaskResult() @@ -105,13 +106,6 @@ public class JavaPlugin @Inject constructor( return result } - private fun findSourceFiles(dir: String, sourceDirectories: Collection): List { - val projectDir = File(dir) - return files.findRecursively(projectDir, - sourceDirectories.map { File(it) }) { it: String -> it.endsWith(".java") } - .map { File(projectDir, it).absolutePath } - } - override fun projects() = projects } diff --git a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt index 9fa87f14..294cf48c 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt @@ -36,27 +36,20 @@ class KotlinPlugin @Inject constructor( @Task(name = TASK_COMPILE, description = "Compile the project") fun taskCompile(project: Project): TaskResult { - copyResources(project, JvmCompilerPlugin.SOURCE_SET_MAIN) - val classpath = dependencyManager.calculateDependencies(project, context, project.compileDependencies, - project.compileProvidedDependencies) - - val projectDirectory = java.io.File(project.directory) - val buildDirectory = File(projectDirectory, project.buildDirectory + File.separator + "classes") - buildDirectory.mkdirs() - - val sourceFiles = files.findRecursively(projectDirectory, project.sourceDirectories.map { File(it) }, - { it .endsWith(".kt") }) - .map { File(projectDirectory, it).absolutePath } + return baseTaskCompile(project, projects()) + } + override fun doCompile(project: Project, classpath: List, sourceFiles: List, + buildDirectory: File) : TaskResult { val result = - if (sourceFiles.size > 0) { - compilePrivate(project, classpath, sourceFiles, buildDirectory) - lp(project, "Compilation succeeded") - TaskResult() - } else { - warn("Couldn't find any source files") - TaskResult() - } + if (sourceFiles.size > 0) { + compilePrivate(project, classpath, sourceFiles, buildDirectory) + lp(project, "Compilation succeeded") + TaskResult() + } else { + warn("Couldn't find any source files") + TaskResult() + } return result } @@ -66,7 +59,7 @@ class KotlinPlugin @Inject constructor( val projectDir = File(project.directory) val sourceFiles = files.findRecursively(projectDir, project.sourceDirectoriesTest.map { File(it) }) - { it: String -> it.endsWith(".kt") } + { it: String -> it.endsWith(project.sourceSuffix) } .map { File(projectDir, it).absolutePath } val result =