diff --git a/src/main/kotlin/com/beust/kobalt/BuildScript.kt b/src/main/kotlin/com/beust/kobalt/BuildScript.kt index eddcc32c..53e4158e 100644 --- a/src/main/kotlin/com/beust/kobalt/BuildScript.kt +++ b/src/main/kotlin/com/beust/kobalt/BuildScript.kt @@ -4,7 +4,7 @@ import com.beust.kobalt.api.Kobalt import com.beust.kobalt.api.Project import com.beust.kobalt.api.annotation.Directive import com.beust.kobalt.maven.DepFactory -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.misc.KobaltExecutors import com.beust.kobalt.SystemProperties import java.io.File diff --git a/src/main/kotlin/com/beust/kobalt/Main.kt b/src/main/kotlin/com/beust/kobalt/Main.kt index 465bf5d6..8b5183aa 100644 --- a/src/main/kotlin/com/beust/kobalt/Main.kt +++ b/src/main/kotlin/com/beust/kobalt/Main.kt @@ -12,7 +12,7 @@ import com.beust.kobalt.internal.remote.KobaltServer import com.beust.kobalt.maven.DepFactory import com.beust.kobalt.maven.Http import com.beust.kobalt.maven.LocalRepo -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.misc.* import com.google.inject.Guice import java.io.File diff --git a/src/main/kotlin/com/beust/kobalt/Plugins.kt b/src/main/kotlin/com/beust/kobalt/Plugins.kt index aa7bd3c0..22c6689b 100644 --- a/src/main/kotlin/com/beust/kobalt/Plugins.kt +++ b/src/main/kotlin/com/beust/kobalt/Plugins.kt @@ -5,7 +5,7 @@ import com.beust.kobalt.api.annotation.Task import com.beust.kobalt.internal.PluginInfo import com.beust.kobalt.internal.TaskManager import com.beust.kobalt.maven.DepFactory -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.maven.LocalRepo import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.KobaltExecutors diff --git a/src/main/kotlin/com/beust/kobalt/ResolveDependency.kt b/src/main/kotlin/com/beust/kobalt/ResolveDependency.kt index 379ed2c7..ad06d139 100644 --- a/src/main/kotlin/com/beust/kobalt/ResolveDependency.kt +++ b/src/main/kotlin/com/beust/kobalt/ResolveDependency.kt @@ -1,7 +1,7 @@ package com.beust.kobalt import com.beust.kobalt.maven.* -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.maven.dependency.MavenDependency import com.beust.kobalt.misc.Node import com.beust.kobalt.misc.log diff --git a/src/main/kotlin/com/beust/kobalt/api/IClasspathContributor.kt b/src/main/kotlin/com/beust/kobalt/api/IClasspathContributor.kt index 01632a32..1474d342 100644 --- a/src/main/kotlin/com/beust/kobalt/api/IClasspathContributor.kt +++ b/src/main/kotlin/com/beust/kobalt/api/IClasspathContributor.kt @@ -1,6 +1,6 @@ package com.beust.kobalt.api -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency /** * Plugins that export classpath entries need to implement this interface. diff --git a/src/main/kotlin/com/beust/kobalt/api/IClasspathDependency.kt b/src/main/kotlin/com/beust/kobalt/api/IClasspathDependency.kt new file mode 100644 index 00000000..36db63b5 --- /dev/null +++ b/src/main/kotlin/com/beust/kobalt/api/IClasspathDependency.kt @@ -0,0 +1,31 @@ +package com.beust.kobalt.api + +import org.apache.maven.model.Dependency +import java.io.File +import java.util.concurrent.Future + +/** + * Encapsulate a dependency that can be put on the classpath. This interface + * has two subclasses: FileDependency, a physical file, and MavenDependency, + * which represents a dependency living in a Maven repo. + */ +interface IClasspathDependency { + companion object { + val PREFIX_FILE: String = "file://" + } + + /** Identifier for this dependency */ + val id: String + + /** Absolute path to the jar file on the local file system */ + val jarFile: Future + + /** Convert to a Maven model tag */ + fun toMavenDependencies() : Dependency + + /** The list of dependencies for this element (not the transitive closure */ + fun directDependencies(): List + + /** Used to only keep the most recent version for an artifact if no version was specified */ + val shortId: String +} \ No newline at end of file diff --git a/src/main/kotlin/com/beust/kobalt/api/IClasspathInterceptor.kt b/src/main/kotlin/com/beust/kobalt/api/IClasspathInterceptor.kt index 7a949959..b105928b 100644 --- a/src/main/kotlin/com/beust/kobalt/api/IClasspathInterceptor.kt +++ b/src/main/kotlin/com/beust/kobalt/api/IClasspathInterceptor.kt @@ -1,6 +1,6 @@ package com.beust.kobalt.api -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency /** * Modify a list of dependencies before Kobalt starts using them. diff --git a/src/main/kotlin/com/beust/kobalt/api/ICompilerContributor.kt b/src/main/kotlin/com/beust/kobalt/api/ICompilerContributor.kt index a6e3b714..42047ad4 100644 --- a/src/main/kotlin/com/beust/kobalt/api/ICompilerContributor.kt +++ b/src/main/kotlin/com/beust/kobalt/api/ICompilerContributor.kt @@ -1,7 +1,7 @@ package com.beust.kobalt.api import com.beust.kobalt.TaskResult -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency import java.io.File interface ICompilerContributor : IAffinity { diff --git a/src/main/kotlin/com/beust/kobalt/api/IRunnerContributor.kt b/src/main/kotlin/com/beust/kobalt/api/IRunnerContributor.kt index 39276deb..5f094758 100644 --- a/src/main/kotlin/com/beust/kobalt/api/IRunnerContributor.kt +++ b/src/main/kotlin/com/beust/kobalt/api/IRunnerContributor.kt @@ -1,7 +1,7 @@ package com.beust.kobalt.api import com.beust.kobalt.TaskResult -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency /** * Plugins that can run a project (task "run" or "test") should implement this interface. diff --git a/src/main/kotlin/com/beust/kobalt/api/Project.kt b/src/main/kotlin/com/beust/kobalt/api/Project.kt index 62f01897..cd0e2cc2 100644 --- a/src/main/kotlin/com/beust/kobalt/api/Project.kt +++ b/src/main/kotlin/com/beust/kobalt/api/Project.kt @@ -3,7 +3,7 @@ package com.beust.kobalt.api import com.beust.kobalt.Plugins import com.beust.kobalt.api.annotation.Directive import com.beust.kobalt.internal.IProjectInfo -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.maven.dependency.MavenDependency import com.beust.kobalt.misc.KFiles import com.beust.kobalt.plugin.android.AndroidPlugin diff --git a/src/main/kotlin/com/beust/kobalt/internal/GenericRunner.kt b/src/main/kotlin/com/beust/kobalt/internal/GenericRunner.kt index 30bcd33a..ad834516 100644 --- a/src/main/kotlin/com/beust/kobalt/internal/GenericRunner.kt +++ b/src/main/kotlin/com/beust/kobalt/internal/GenericRunner.kt @@ -6,7 +6,7 @@ import com.beust.kobalt.TaskResult import com.beust.kobalt.api.IRunnerContributor import com.beust.kobalt.api.KobaltContext import com.beust.kobalt.api.Project -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.log import java.io.File diff --git a/src/main/kotlin/com/beust/kobalt/internal/JUnitRunner.kt b/src/main/kotlin/com/beust/kobalt/internal/JUnitRunner.kt index b56df7e7..71abffbe 100644 --- a/src/main/kotlin/com/beust/kobalt/internal/JUnitRunner.kt +++ b/src/main/kotlin/com/beust/kobalt/internal/JUnitRunner.kt @@ -3,7 +3,7 @@ package com.beust.kobalt.internal import com.beust.kobalt.api.IAffinity import com.beust.kobalt.api.KobaltContext import com.beust.kobalt.api.Project -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency public class JUnitRunner() : GenericTestRunner() { diff --git a/src/main/kotlin/com/beust/kobalt/internal/TestNgRunner.kt b/src/main/kotlin/com/beust/kobalt/internal/TestNgRunner.kt index d6a25f2e..7b8bf9ec 100644 --- a/src/main/kotlin/com/beust/kobalt/internal/TestNgRunner.kt +++ b/src/main/kotlin/com/beust/kobalt/internal/TestNgRunner.kt @@ -3,7 +3,7 @@ package com.beust.kobalt.internal import com.beust.kobalt.api.IAffinity import com.beust.kobalt.api.KobaltContext import com.beust.kobalt.api.Project -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.misc.KFiles import java.io.File diff --git a/src/main/kotlin/com/beust/kobalt/internal/remote/GetDependenciesCommand.kt b/src/main/kotlin/com/beust/kobalt/internal/remote/GetDependenciesCommand.kt index 1d074a98..9c42eefc 100644 --- a/src/main/kotlin/com/beust/kobalt/internal/remote/GetDependenciesCommand.kt +++ b/src/main/kotlin/com/beust/kobalt/internal/remote/GetDependenciesCommand.kt @@ -6,7 +6,7 @@ import com.beust.kobalt.internal.PluginInfo import com.beust.kobalt.internal.build.BuildFile import com.beust.kobalt.internal.build.BuildFileCompiler import com.beust.kobalt.maven.DependencyManager -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.maven.dependency.MavenDependency import com.beust.kobalt.misc.KobaltExecutors import com.beust.kobalt.misc.log diff --git a/src/main/kotlin/com/beust/kobalt/maven/DepFactory.kt b/src/main/kotlin/com/beust/kobalt/maven/DepFactory.kt index 5ba9a8d7..17230e8c 100644 --- a/src/main/kotlin/com/beust/kobalt/maven/DepFactory.kt +++ b/src/main/kotlin/com/beust/kobalt/maven/DepFactory.kt @@ -2,7 +2,7 @@ package com.beust.kobalt.maven import com.beust.kobalt.KobaltException import com.beust.kobalt.maven.dependency.FileDependency -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.maven.dependency.MavenDependency import com.beust.kobalt.misc.KobaltExecutors import java.util.concurrent.ExecutorService diff --git a/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt b/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt index 4235ead4..f71359d6 100644 --- a/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt +++ b/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt @@ -1,11 +1,7 @@ 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.api.* import com.beust.kobalt.maven.dependency.FileDependency -import com.beust.kobalt.maven.dependency.IClasspathDependency import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.KobaltExecutors import com.beust.kobalt.misc.warn @@ -53,7 +49,7 @@ public class DependencyManager @Inject constructor(val executors: KobaltExecutor result.add(projectDependency) projectDependency.id.let { result.add(depFactory.create(it, executor)) - val downloaded = projectDependency.transitiveDependencies(executor) + val downloaded = transitiveClosure(projectDependency.directDependencies()) result.addAll(downloaded) } diff --git a/src/main/kotlin/com/beust/kobalt/maven/Kurl.kt b/src/main/kotlin/com/beust/kobalt/maven/Kurl.kt index 656d25a8..17c06817 100644 --- a/src/main/kotlin/com/beust/kobalt/maven/Kurl.kt +++ b/src/main/kotlin/com/beust/kobalt/maven/Kurl.kt @@ -1,6 +1,6 @@ package com.beust.kobalt.maven -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency import com.google.inject.assistedinject.Assisted import java.io.* import java.net.HttpURLConnection diff --git a/src/main/kotlin/com/beust/kobalt/maven/dependency/FileDependency.kt b/src/main/kotlin/com/beust/kobalt/maven/dependency/FileDependency.kt index a37c4f02..9bb0e077 100644 --- a/src/main/kotlin/com/beust/kobalt/maven/dependency/FileDependency.kt +++ b/src/main/kotlin/com/beust/kobalt/maven/dependency/FileDependency.kt @@ -1,5 +1,6 @@ package com.beust.kobalt.maven.dependency +import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.maven.CompletedFuture import org.apache.maven.model.Dependency import java.io.File diff --git a/src/main/kotlin/com/beust/kobalt/maven/dependency/IClasspathDependency.kt b/src/main/kotlin/com/beust/kobalt/maven/dependency/IClasspathDependency.kt deleted file mode 100644 index b0795871..00000000 --- a/src/main/kotlin/com/beust/kobalt/maven/dependency/IClasspathDependency.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.beust.kobalt.maven.dependency - -import org.apache.maven.model.Dependency -import java.io.File -import java.util.* -import java.util.concurrent.ConcurrentHashMap -import java.util.concurrent.ExecutorService -import java.util.concurrent.Future - -/** - * Encapsulate a dependency that can be put on the classpath. This interface - * has two subclasses: FileDependency (a physical file) and MavenDependency, - * which represents a dependency living in a Maven repo. - */ -interface IClasspathDependency { - companion object { - val PREFIX_FILE: String = "file://" - } - - /** Identifier for this dependency */ - val id: String - - /** Absolute path to the jar file on the local file system */ - val jarFile: Future - - /** Convert to a Maven model tag */ - fun toMavenDependencies() : Dependency - - /** The list of dependencies for this element (not the transitive closure */ - fun directDependencies(): List - - /** Used to only keep the most recent version for an artifact if no version was specified */ - val shortId: String - - fun transitiveDependencies(executor: ExecutorService) : List { - /** - * All the dependencies we have already downloaded. - */ - val seen = ConcurrentHashMap() - - val thisDep = MavenDependency.create(id, executor) - - var result = ArrayList(transitiveDependencies(thisDep, seen, executor)) - result.add(thisDep) - return result - } - - private fun transitiveDependencies(dep: IClasspathDependency, seen: ConcurrentHashMap, - executor: ExecutorService) : List { - val result = arrayListOf() - seen.put(dep.id, dep.id) - dep.directDependencies().filter { - ! seen.containsKey(it.id) - }.forEach { - seen.put(it.id, it.id) - val thisDep = MavenDependency.create(it.id, executor) - result.add(thisDep) - result.addAll(transitiveDependencies(thisDep, seen, executor)) - } - return result - } -} \ No newline at end of file diff --git a/src/main/kotlin/com/beust/kobalt/maven/dependency/MavenDependency.kt b/src/main/kotlin/com/beust/kobalt/maven/dependency/MavenDependency.kt index a2a133b0..62c778e4 100644 --- a/src/main/kotlin/com/beust/kobalt/maven/dependency/MavenDependency.kt +++ b/src/main/kotlin/com/beust/kobalt/maven/dependency/MavenDependency.kt @@ -1,6 +1,7 @@ package com.beust.kobalt.maven.dependency import com.beust.kobalt.KobaltException +import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.api.Kobalt import com.beust.kobalt.maven.* import com.beust.kobalt.misc.DependencyExecutor 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 269c5691..e38c0f49 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/android/AndroidPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/android/AndroidPlugin.kt @@ -6,7 +6,7 @@ import com.beust.kobalt.api.annotation.Directive import com.beust.kobalt.api.annotation.Task import com.beust.kobalt.maven.MavenId import com.beust.kobalt.maven.dependency.FileDependency -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.maven.dependency.MavenDependency import com.beust.kobalt.misc.* import com.beust.kobalt.plugin.java.JavaCompiler 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 b337ff0a..bc67a249 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/application/ApplicationPlugin.kt @@ -7,7 +7,6 @@ import com.beust.kobalt.api.annotation.Task import com.beust.kobalt.internal.ActorUtils import com.beust.kobalt.internal.JvmCompilerPlugin import com.beust.kobalt.maven.DependencyManager -import com.beust.kobalt.maven.dependency.IClasspathDependency import com.beust.kobalt.misc.KobaltExecutors import com.beust.kobalt.misc.RunCommand import com.beust.kobalt.misc.warn diff --git a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinCompiler.kt b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinCompiler.kt index 36f2dac0..7ce66f54 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinCompiler.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinCompiler.kt @@ -1,16 +1,13 @@ package com.beust.kobalt.plugin.kotlin; import com.beust.kobalt.TaskResult -import com.beust.kobalt.api.CompilerActionInfo -import com.beust.kobalt.api.Kobalt -import com.beust.kobalt.api.KobaltContext -import com.beust.kobalt.api.Project +import com.beust.kobalt.api.* import com.beust.kobalt.internal.ICompilerAction import com.beust.kobalt.internal.JvmCompiler import com.beust.kobalt.maven.DepFactory -import com.beust.kobalt.maven.dependency.FileDependency -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.maven.DependencyManager import com.beust.kobalt.maven.LocalRepo +import com.beust.kobalt.maven.dependency.FileDependency import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.KobaltExecutors import com.beust.kobalt.misc.log @@ -29,7 +26,8 @@ import kotlin.properties.Delegates */ @Singleton class KotlinCompiler @Inject constructor(val localRepo : LocalRepo, - val files: com.beust.kobalt.misc.KFiles, + val files: KFiles, + val dependencyManager: DependencyManager, val depFactory: DepFactory, val executors: KobaltExecutors, val jvmCompiler: JvmCompiler) { @@ -115,7 +113,7 @@ class KotlinCompiler @Inject constructor(val localRepo : LocalRepo, val executor = executors.newExecutor("KotlinCompiler", 10) val compilerDep = depFactory.create("org.jetbrains.kotlin:kotlin-compiler-embeddable:$KOTLIN_VERSION", executor) - val deps = compilerDep.transitiveDependencies(executor) + val deps = dependencyManager.transitiveClosure(listOf(compilerDep)) // Force a download of the compiler dependencies deps.forEach { it.jarFile.get() } 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 6b86eb70..521d63d7 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/kotlin/KotlinPlugin.kt @@ -10,7 +10,6 @@ import com.beust.kobalt.maven.DepFactory import com.beust.kobalt.maven.DependencyManager import com.beust.kobalt.maven.LocalRepo import com.beust.kobalt.maven.dependency.FileDependency -import com.beust.kobalt.maven.dependency.IClasspathDependency import com.beust.kobalt.maven.dependency.MavenDependency import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.KobaltExecutors 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 e554eb44..99662089 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt @@ -11,7 +11,7 @@ import com.beust.kobalt.api.annotation.Task import com.beust.kobalt.glob import com.beust.kobalt.internal.JvmCompilerPlugin import com.beust.kobalt.maven.DependencyManager -import com.beust.kobalt.maven.dependency.IClasspathDependency +import com.beust.kobalt.api.IClasspathDependency import com.beust.kobalt.maven.LocalRepo import com.beust.kobalt.misc.KFiles import com.beust.kobalt.misc.KobaltExecutors