1
0
Fork 0
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:
Cedric Beust 2015-11-29 09:59:05 -08:00
parent 569eaf9fa8
commit 651b9c02ba
25 changed files with 58 additions and 95 deletions

View file

@ -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

View 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

View 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

View file

@ -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

View file

@ -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.

View 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
}

View file

@ -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.

View file

@ -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 {

View file

@ -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.

View file

@ -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

View file

@ -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

View 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() {

View 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
import com.beust.kobalt.misc.KFiles
import java.io.File

View 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

View file

@ -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

View file

@ -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)
}

View file

@ -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

View file

@ -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

View 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
}
}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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() }

View file

@ -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

View file

@ -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