From 9f3a1f6f3bcd6cacfbcb0e8eb40dff3ddb5c8e45 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Tue, 6 Oct 2015 01:45:43 -0700 Subject: [PATCH] Add provided dependencies. --- .../kotlin/com/beust/kobalt/api/Project.kt | 18 ++++++++++++----- .../kobalt/internal/JvmCompilerPlugin.kt | 20 +++++++++++++------ .../kobalt/plugin/kotlin/KotlinPlugin.kt | 2 +- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/main/kotlin/com/beust/kobalt/api/Project.kt b/src/main/kotlin/com/beust/kobalt/api/Project.kt index caea1dfb..255a3b19 100644 --- a/src/main/kotlin/com/beust/kobalt/api/Project.kt +++ b/src/main/kotlin/com/beust/kobalt/api/Project.kt @@ -64,21 +64,23 @@ open public class Project( @Directive public fun dependencies(init: Dependencies.() -> Unit) : Dependencies { - dependencies = Dependencies(this, compileDependencies) + dependencies = Dependencies(this, compileDependencies, compileProvidedDependencies) dependencies!!.init() return dependencies!! } - public val compileDependencies : ArrayList = arrayListOf() + val compileDependencies : ArrayList = arrayListOf() + val compileProvidedDependencies : ArrayList = arrayListOf() @Directive public fun dependenciesTest(init: Dependencies.() -> Unit) : Dependencies { - dependencies = Dependencies(this, testDependencies) + dependencies = Dependencies(this, testDependencies, testProvidedDependencies) dependencies!!.init() return dependencies!! } - public val testDependencies : ArrayList = arrayListOf() + val testDependencies : ArrayList = arrayListOf() + val testProvidedDependencies : ArrayList = arrayListOf() } public class Sources(val project: Project, val sources: ArrayList) { @@ -88,10 +90,16 @@ public class Sources(val project: Project, val sources: ArrayList) { } } -public class Dependencies(val project: Project, val dependencies: ArrayList) { +public class Dependencies(val project: Project, val dependencies: ArrayList, + val providedDependencies: ArrayList) { @Directive fun compile(vararg dep: String) { dep.forEach { dependencies.add(MavenDependency.create(it)) } } + + @Directive + fun provided(vararg dep: String) { + dep.forEach { providedDependencies.add(MavenDependency.create(it))} + } } diff --git a/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt b/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt index fa50c1b3..445e8f4e 100644 --- a/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt @@ -37,16 +37,24 @@ abstract public class JvmCompilerPlugin @Inject constructor( log(1, "${project.name}: ${s}") } - fun calculateClasspath(dependencies : List): List { - return dependencyManager.transitiveClosure(dependencies) + fun calculateClasspath(vararg allDependencies : List): List { + var result = arrayListOf() + allDependencies.forEach { dependencies -> + result.addAll(dependencyManager.transitiveClosure(dependencies)) + } + return result } protected fun testDependencies(project: Project) : List { val result = arrayListOf() - result.add(FileDependency(makeOutputDir(project).getAbsolutePath())) - result.add(FileDependency(makeOutputTestDir(project).getAbsolutePath())) - result.addAll(calculateClasspath(project.compileDependencies)) - result.addAll(calculateClasspath(project.testDependencies)) + result.add(FileDependency(makeOutputDir(project).absolutePath)) + result.add(FileDependency(makeOutputTestDir(project).absolutePath)) + with(project) { + arrayListOf(compileDependencies, compileProvidedDependencies, testDependencies, + testProvidedDependencies).forEach { + result.addAll(calculateClasspath(it)) + } + } return dependencyManager.reorderDependencies(result) } 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 7584ae12..89fe542e 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt @@ -43,7 +43,7 @@ public 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 = calculateClasspath(project.compileDependencies) + val classpath = calculateClasspath(project.compileDependencies, project.compileProvidedDependencies) val projectDirectory = java.io.File(project.directory) val buildDirectory = File(projectDirectory, project.buildDirectory + File.separator + "classes")