1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 08:27:12 -07:00

Remove DependencyFactory, introduce IDependencyManager.

This commit is contained in:
Cedric Beust 2016-03-26 08:26:25 -07:00
parent 10f2344edb
commit 984c514fa4
18 changed files with 107 additions and 97 deletions

View file

@ -3,7 +3,7 @@ package com.beust.kobalt
import com.beust.kobalt.api.IClasspathDependency
import com.beust.kobalt.api.Kobalt
import com.beust.kobalt.api.annotation.Directive
import com.beust.kobalt.maven.DependencyFactory
import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.maven.dependency.FileDependency
import java.io.File
@ -24,7 +24,7 @@ fun plugins(vararg dependency : IClasspathDependency) {
@Directive
fun plugins(vararg dependencies : String) {
val factory = Kobalt.INJECTOR.getInstance(DependencyFactory::class.java)
val factory = Kobalt.INJECTOR.getInstance(DependencyManager::class.java)
dependencies.forEach {
Plugins.addDynamicPlugin(factory.create(it))
}

View file

@ -5,7 +5,7 @@ import com.beust.kobalt.api.annotation.IncrementalTask
import com.beust.kobalt.api.annotation.Task
import com.beust.kobalt.internal.PluginInfo
import com.beust.kobalt.internal.TaskManager
import com.beust.kobalt.maven.DependencyFactory
import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.maven.LocalRepo
import com.beust.kobalt.misc.JarUtils
import com.beust.kobalt.misc.KFiles
@ -20,9 +20,9 @@ import javax.inject.Inject
import javax.inject.Singleton
@Singleton
public class Plugins @Inject constructor (val taskManagerProvider : Provider<TaskManager>,
class Plugins @Inject constructor (val taskManagerProvider : Provider<TaskManager>,
val files: KFiles,
val depFactory: DependencyFactory,
val depManager: DependencyManager,
val localRepo: LocalRepo,
val executors: KobaltExecutors,
val pluginInfo: PluginInfo,
@ -152,7 +152,7 @@ public class Plugins @Inject constructor (val taskManagerProvider : Provider<Tas
//
// Load all the jar files synchronously (can't compile the build script until
// they are installed locally).
depFactory.create(it.id)
depManager.create(it.id)
//
// Open the jar, parse its kobalt-plugin.xml and add the resulting PluginInfo to pluginInfo

View file

@ -0,0 +1,39 @@
package com.beust.kobalt.api
/**
* Manage the creation of dependencies and also provide dependencies for projects.
*/
interface IDependencyManager {
/**
* Parse the id and return the correct IClasspathDependency
*/
fun create(id: String): IClasspathDependency
/**
* Create an IClasspathDependency from a Maven id.
*/
fun createMaven(id: String): IClasspathDependency
/**
* Create an IClasspathDependency from a path.
*/
fun createFile(path: String): IClasspathDependency
/**
* @return the source dependencies for this project, including the contributors.
*/
fun dependencies(project: Project, context: KobaltContext): List<IClasspathDependency>
/**
* @return the test dependencies for this project, including the contributors.
*/
fun testDependencies(project: Project, context: KobaltContext): List<IClasspathDependency>
/**
* @return the classpath for this project, including the IClasspathContributors.
* allDependencies is typically either compileDependencies or testDependencies
*/
fun calculateDependencies(project: Project?, context: KobaltContext,
dependentProjects: List<ProjectDescription> = emptyList(),
vararg allDependencies: List<IClasspathDependency>): List<IClasspathDependency>
}

View file

@ -1,6 +1,6 @@
package com.beust.kobalt.api
import com.beust.kobalt.maven.DependencyFactory
import com.beust.kobalt.maven.DependencyManager
import java.io.File
import java.util.concurrent.Future
@ -9,7 +9,7 @@ class JarFinder {
/**
* @return a Future for the jar file corresponding to this id.
*/
fun byIdFuture(id: String) : Future<File> = DependencyFactory.create(id).jarFile
fun byIdFuture(id: String) : Future<File> = DependencyManager.create(id).jarFile
/**
* @return the jar file corresponding to this id. This might cause a network call.

View file

@ -3,7 +3,7 @@ package com.beust.kobalt.api
import com.beust.kobalt.TestConfig
import com.beust.kobalt.api.annotation.Directive
import com.beust.kobalt.internal.JvmCompilerPlugin
import com.beust.kobalt.maven.DependencyFactory
import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.misc.KFiles
import java.io.File
import java.util.*
@ -151,7 +151,7 @@ class Dependencies(val project: Project,
*/
private fun addToDependencies(dependencies: ArrayList<IClasspathDependency>, dep: Array<out String>)
: List<File>
= with(dep.map { DependencyFactory.create(it)}) {
= with(dep.map { DependencyManager.create(it)}) {
dependencies.addAll(this)
this.map { it.jarFile.get() }
}

View file

@ -8,7 +8,6 @@ import com.beust.kobalt.api.*
import com.beust.kobalt.api.annotation.ExportedProjectProperty
import com.beust.kobalt.api.annotation.IncrementalTask
import com.beust.kobalt.api.annotation.Task
import com.beust.kobalt.maven.DependencyFactory
import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.maven.LocalRepo
import com.beust.kobalt.maven.Md5
@ -29,10 +28,8 @@ import javax.inject.Singleton
open class JvmCompilerPlugin @Inject constructor(
open val localRepo: LocalRepo,
open val files: KFiles,
open val depFactory: DependencyFactory,
open val dependencyManager: DependencyManager,
open val executors: KobaltExecutors,
open val jvmCompiler: JvmCompiler,
open val taskContributor : TaskContributor)
: BasePlugin(), ISourceDirectoryContributor, IProjectContributor, ITaskContributor by taskContributor {

View file

@ -1,35 +0,0 @@
package com.beust.kobalt.maven
import com.beust.kobalt.api.IClasspathDependency
import com.beust.kobalt.api.Kobalt
import com.beust.kobalt.maven.aether.KobaltAether
import com.beust.kobalt.maven.dependency.FileDependency
import com.beust.kobalt.misc.KobaltExecutors
import javax.inject.Inject
/**
* Use this class to create instances of `IClasspathDependency` from an id.
*/
class DependencyFactory @Inject constructor(val localRepo: LocalRepo,
val executors: KobaltExecutors,
val aether: KobaltAether) {
companion object {
fun create(id: String) =
Kobalt.INJECTOR.getInstance(DependencyFactory::class.java).create(id)
}
/**
* Parse the id and return the correct IClasspathDependency
*/
fun create(id: String) : IClasspathDependency {
if (id.startsWith(FileDependency.PREFIX_FILE)) {
return FileDependency(id.substring(FileDependency.PREFIX_FILE.length))
} else {
val mavenId = MavenId.create(id)
val result = if (mavenId.hasVersion) aether.create(id)
else aether.create(id + "(0,]")
return result
}
}
}

View file

@ -1,6 +1,7 @@
package com.beust.kobalt.maven
import com.beust.kobalt.api.*
import com.beust.kobalt.maven.aether.KobaltAether
import com.beust.kobalt.maven.dependency.FileDependency
import com.beust.kobalt.misc.KFiles
import com.beust.kobalt.misc.KobaltExecutors
@ -10,27 +11,47 @@ import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class DependencyManager @Inject constructor(val executors: KobaltExecutors, val depFactory: DependencyFactory) {
class DependencyManager @Inject constructor(val executors: KobaltExecutors, val aether: KobaltAether)
: IDependencyManager {
companion object {
fun create(id: String) =
Kobalt.INJECTOR.getInstance(DependencyManager::class.java).create(id)
}
/**
* Parse the id and return the correct IClasspathDependency
*/
override fun create(id: String) : IClasspathDependency {
if (id.startsWith(FileDependency.PREFIX_FILE)) {
return FileDependency(id.substring(FileDependency.PREFIX_FILE.length))
} else {
val mavenId = MavenId.create(id)
val result = if (mavenId.hasVersion) aether.create(id)
else aether.create(id + "(0,]")
return result
}
}
/**
* Create an IClasspathDependency from a Maven id.
*/
fun createMaven(id: String) : IClasspathDependency = depFactory.create(id)
override fun createMaven(id: String) : IClasspathDependency = create(id)
/**
* Create an IClasspathDependency from a path.
*/
fun createFile(path: String) : IClasspathDependency = FileDependency(path)
override fun createFile(path: String) : IClasspathDependency = FileDependency(path)
/**
* @return the source dependencies for this project, including the contributors.
*/
fun dependencies(project: Project, context: KobaltContext) = dependencies(project, context, false)
override fun dependencies(project: Project, context: KobaltContext) = dependencies(project, context, false)
/**
* @return the test dependencies for this project, including the contributors.
*/
fun testDependencies(project: Project, context: KobaltContext) = dependencies(project, context, true)
override fun testDependencies(project: Project, context: KobaltContext) = dependencies(project, context, true)
/**
* Transitive dependencies for the compilation of this project.
@ -43,8 +64,8 @@ class DependencyManager @Inject constructor(val executors: KobaltExecutors, val
* @return the classpath for this project, including the IClasspathContributors.
* allDependencies is typically either compileDependencies or testDependencies
*/
fun calculateDependencies(project: Project?, context: KobaltContext,
dependentProjects: List<ProjectDescription> = emptyList(),
override fun calculateDependencies(project: Project?, context: KobaltContext,
dependentProjects: List<ProjectDescription>,
vararg allDependencies: List<IClasspathDependency>): List<IClasspathDependency> {
var result = arrayListOf<IClasspathDependency>()
allDependencies.forEach { dependencies ->
@ -77,7 +98,7 @@ class DependencyManager @Inject constructor(val executors: KobaltExecutors, val
dependencies.forEach { projectDependency ->
result.add(projectDependency)
projectDependency.id.let {
result.add(depFactory.create(it))
result.add(create(it))
val downloaded = transitiveClosure(projectDependency.directDependencies())
result.addAll(downloaded)

View file

@ -2,7 +2,7 @@ package com.beust.kobalt.misc
import com.beust.kobalt.KobaltException
import com.beust.kobalt.api.Project
import com.beust.kobalt.maven.DependencyFactory
import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.maven.MavenId
import com.beust.kobalt.maven.aether.AetherDependency
import javax.inject.Inject
@ -10,7 +10,7 @@ import javax.inject.Inject
/**
* Find out if any newer versions of the dependencies are available.
*/
public class CheckVersions @Inject constructor(val depFactory : DependencyFactory,
public class CheckVersions @Inject constructor(val depManager: DependencyManager,
val executors : KobaltExecutors) {
fun run(projects: List<Project>) {
@ -22,7 +22,7 @@ public class CheckVersions @Inject constructor(val depFactory : DependencyFactor
cds.forEach { compileDependency ->
if (MavenId.isMavenId(compileDependency.id)) {
try {
val dep = depFactory.create(compileDependency.shortId)
val dep = depManager.create(compileDependency.shortId)
val other = compileDependency as AetherDependency
if (dep.id != compileDependency.id
&& Versions.toLongVersion(dep.version) > Versions.toLongVersion(other.version)) {