diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/TaskContributor.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/TaskContributor.kt index 6b2426f9..29e02f08 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/TaskContributor.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/TaskContributor.kt @@ -10,7 +10,8 @@ import com.google.inject.Inject * Plug-ins that are ITaskContributor can use this class to manage their collection of tasks and * implement the interface by delegating to an instance of this class (if injection permits). */ -class TaskContributor @Inject constructor(val incrementalManager: IncrementalManager) : ITaskContributor { +class TaskContributor @Inject constructor(val incrementalManagerFactory: IncrementalManager.IFactory) + : ITaskContributor { val dynamicTasks = arrayListOf() /** @@ -50,7 +51,7 @@ class TaskContributor @Inject constructor(val incrementalManager: IncrementalMan runBefore = runBefore.map { variant.toTask(it) }, runAfter = runAfter.map { variant.toTask(it) }, alwaysRunAfter = alwaysRunAfter.map { variant.toTask(it) }, - closure = incrementalManager.toIncrementalTaskClosure(taskName, runTask, variant))) + closure = incrementalManagerFactory.create().toIncrementalTaskClosure(taskName, runTask, variant))) } } diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/IncrementalManager.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/IncrementalManager.kt index 4b6e3b19..f74c9e61 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/IncrementalManager.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/IncrementalManager.kt @@ -11,7 +11,7 @@ import com.beust.kobalt.misc.log import com.google.gson.Gson import com.google.gson.GsonBuilder import com.google.inject.Inject -import com.google.inject.Singleton +import com.google.inject.assistedinject.Assisted import java.io.File import java.io.FileReader import java.nio.charset.Charset @@ -27,9 +27,11 @@ class BuildInfo(var tasks: List) * Manage the file .kobalt/buildInfo.json, which keeps track of input and output checksums to manage * incremental builds. */ -@Singleton -class IncrementalManager @Inject constructor(val args: Args) { - val fileName = IncrementalManager.BUILD_INFO_FILE +class IncrementalManager @Inject constructor(val args: Args, @Assisted val fileName : String) { + + interface IFactory { + fun create(@Assisted fileName: String = IncrementalManager.BUILD_INFO_FILE) : IncrementalManager + } companion object { val BUILD_INFO_FILE = KFiles.joinDir(KFiles.KOBALT_DOT_DIR, "buildInfo.json") diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt index 6878b988..550eb2c7 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt @@ -21,7 +21,8 @@ import javax.inject.Inject import javax.inject.Singleton @Singleton -public class TaskManager @Inject constructor(val args: Args, val incrementalManager: IncrementalManager) { +public class TaskManager @Inject constructor(val args: Args, + val incrementalManagerFactory: IncrementalManager.IFactory) { private val runBefore = TreeMultimap.create() private val alwaysRunAfter = TreeMultimap.create() @@ -280,7 +281,7 @@ public class TaskManager @Inject constructor(val args: Args, val incrementalMana */ fun toTaskAnnotation(method: Method, plugin: IPlugin, ta: IncrementalTask) = TaskAnnotation(method, plugin, ta.name, ta.description, ta.runBefore, ta.runAfter, ta.alwaysRunAfter, - incrementalManager.toIncrementalTaskClosure(ta.name, { project -> + incrementalManagerFactory.create().toIncrementalTaskClosure(ta.name, { project -> method.invoke(plugin, project) as IncrementalTaskInfo })) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt index 592bbe82..be24afbf 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/maven/DependencyManager.kt @@ -33,7 +33,9 @@ class DependencyManager @Inject constructor(val executors: KobaltExecutors, val } return createFile(path.path) } else { - return createMaven(id) + // Convert to a Kobalt id first (so that if it doesn't have a version, it gets translated to + // an Aether ranged id "[0,)") + return createMaven(MavenId.create(id).toId) } } diff --git a/src/main/kotlin/com/beust/kobalt/app/MainModule.kt b/src/main/kotlin/com/beust/kobalt/app/MainModule.kt index 814bb014..b6756d52 100644 --- a/src/main/kotlin/com/beust/kobalt/app/MainModule.kt +++ b/src/main/kotlin/com/beust/kobalt/app/MainModule.kt @@ -1,6 +1,7 @@ package com.beust.kobalt.app import com.beust.kobalt.Args +import com.beust.kobalt.internal.IncrementalManager import com.beust.kobalt.internal.KobaltSettings import com.beust.kobalt.internal.PluginInfo import com.beust.kobalt.maven.LocalRepo @@ -32,7 +33,8 @@ public open class MainModule(val args: Args, val settings: KobaltSettings) : Abs PomGenerator.IFactory::class.java, BintrayApi.IFactory::class.java, Pom.IFactory::class.java, - BuildFileCompiler.IFactory::class.java) + BuildFileCompiler.IFactory::class.java, + IncrementalManager.IFactory::class.java) .forEach { install(builder.build(it)) } 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 12e4394a..6ffc0e9e 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/packaging/PackagingPlugin.kt @@ -20,7 +20,7 @@ import javax.inject.Singleton @Singleton class PackagingPlugin @Inject constructor(val dependencyManager : DependencyManager, - val incrementalManager: IncrementalManager, + val incrementalManagerFactory: IncrementalManager.IFactory, val executors: KobaltExecutors, val jarGenerator: JarGenerator, val warGenerator: WarGenerator, val zipGenerator: ZipGenerator, val taskContributor: TaskContributor, val pomFactory: PomGenerator.IFactory, val configActor: ConfigActor) @@ -84,8 +84,8 @@ class PackagingPlugin @Inject constructor(val dependencyManager : DependencyMana // Incremental assembly contributors context.pluginInfo.incrementalAssemblyContributors.forEach { val taskInfo = it.assemble(project, context) - val closure = incrementalManager.toIncrementalTaskClosure(TASK_ASSEMBLE, { p: Project -> taskInfo }, - context.variant) + val closure = incrementalManagerFactory.create().toIncrementalTaskClosure(TASK_ASSEMBLE, { + p: Project -> taskInfo }, context.variant) val thisResult = closure.invoke(project) if (! thisResult.success) { // Abort at the first failure diff --git a/src/test/kotlin/com/beust/kobalt/internal/IncrementalManagerTest.kt b/src/test/kotlin/com/beust/kobalt/internal/IncrementalManagerTest.kt index 65a039f6..dd349340 100644 --- a/src/test/kotlin/com/beust/kobalt/internal/IncrementalManagerTest.kt +++ b/src/test/kotlin/com/beust/kobalt/internal/IncrementalManagerTest.kt @@ -13,7 +13,7 @@ class IncrementalManagerTest { fun shouldSave() { val file = File.createTempFile("kobalt-", "") println("File: $file") - val im = IncrementalManager(Args())//, file.absolutePath) + val im = IncrementalManager(Args(), file.absolutePath) val v = im.inputChecksumFor(TASK) Assert.assertNull(v) im.saveInputChecksum(TASK, "44")