mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-26 08:27:12 -07:00
Move IClasspathDependency into the API.
This commit is contained in:
parent
569eaf9fa8
commit
651b9c02ba
25 changed files with 58 additions and 95 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
31
src/main/kotlin/com/beust/kobalt/api/IClasspathDependency.kt
Normal file
31
src/main/kotlin/com/beust/kobalt/api/IClasspathDependency.kt
Normal file
|
@ -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<File>
|
||||
|
||||
/** Convert to a Maven <dependency> model tag */
|
||||
fun toMavenDependencies() : Dependency
|
||||
|
||||
/** The list of dependencies for this element (not the transitive closure */
|
||||
fun directDependencies(): List<IClasspathDependency>
|
||||
|
||||
/** Used to only keep the most recent version for an artifact if no version was specified */
|
||||
val shortId: String
|
||||
}
|
|
@ -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.
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<File>
|
||||
|
||||
/** Convert to a Maven <dependency> model tag */
|
||||
fun toMavenDependencies() : Dependency
|
||||
|
||||
/** The list of dependencies for this element (not the transitive closure */
|
||||
fun directDependencies(): List<IClasspathDependency>
|
||||
|
||||
/** Used to only keep the most recent version for an artifact if no version was specified */
|
||||
val shortId: String
|
||||
|
||||
fun transitiveDependencies(executor: ExecutorService) : List<IClasspathDependency> {
|
||||
/**
|
||||
* All the dependencies we have already downloaded.
|
||||
*/
|
||||
val seen = ConcurrentHashMap<String, String>()
|
||||
|
||||
val thisDep = MavenDependency.create(id, executor)
|
||||
|
||||
var result = ArrayList<IClasspathDependency>(transitiveDependencies(thisDep, seen, executor))
|
||||
result.add(thisDep)
|
||||
return result
|
||||
}
|
||||
|
||||
private fun transitiveDependencies(dep: IClasspathDependency, seen: ConcurrentHashMap<String, String>,
|
||||
executor: ExecutorService) : List<IClasspathDependency> {
|
||||
val result = arrayListOf<IClasspathDependency>()
|
||||
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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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() }
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue