diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/IInitContributor.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/IInitContributor.kt index e0477254..18eb7ea0 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/IInitContributor.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/IInitContributor.kt @@ -31,6 +31,6 @@ interface IArchetype { * Generate the files for this archetype. The parameter is the arguments that were passed to the kobaltw * command. */ - fun generateArchetype(args: Args) + fun generateArchetype(args: Args, classLoader: ClassLoader) } diff --git a/src/main/kotlin/com/beust/kobalt/Main.kt b/src/main/kotlin/com/beust/kobalt/Main.kt index 764ede42..f270812c 100644 --- a/src/main/kotlin/com/beust/kobalt/Main.kt +++ b/src/main/kotlin/com/beust/kobalt/Main.kt @@ -68,10 +68,12 @@ private class Main @Inject constructor( public fun run(jc: JCommander, args: Args, argv: Array): Int { // Install plug-ins requested from the command line + var pluginClassLoader = javaClass.classLoader args.pluginIds?.let { val dependencies = it.split(",").map { depFactory.create(it) } val urls = dependencies.map { it.jarFile.get().toURI().toURL() } - plugins.installPlugins(dependencies, URLClassLoader(urls.toTypedArray())) + pluginClassLoader = URLClassLoader(urls.toTypedArray()) + plugins.installPlugins(dependencies, pluginClassLoader) } // @@ -97,7 +99,7 @@ private class Main @Inject constructor( val seconds = benchmarkSeconds { try { - result = runWithArgs(jc, args, argv) + result = runWithArgs(jc, args, argv, pluginClassLoader) } catch(ex: KobaltException) { error("", ex.cause ?: ex) result = 1 @@ -116,7 +118,7 @@ private class Main @Inject constructor( // val file = File("src\\main\\resources\\META-INF\\plugin.ml") // } - private fun runWithArgs(jc: JCommander, args: Args, argv: Array): Int { + private fun runWithArgs(jc: JCommander, args: Args, argv: Array, pluginClassLoader: ClassLoader): Int { // val file = File("/Users/beust/.kobalt/repository/com/google/guava/guava/19.0-rc2/guava-19.0-rc2.pom") // val md5 = Md5.toMd5(file) // val md52 = MessageDigest.getInstance("MD5").digest(file.readBytes()).toHexString() @@ -135,7 +137,7 @@ private class Main @Inject constructor( // Make sure the wrapper won't call us back with --noLaunch // com.beust.kobalt.wrapper.Main.main(arrayOf("--noLaunch") + argv) - projectGenerator.run(args) + projectGenerator.run(args, pluginClassLoader) } else if (args.usage) { jc.usage() } else if (args.serverMode) { diff --git a/src/main/kotlin/com/beust/kobalt/app/BuildGenerator.kt b/src/main/kotlin/com/beust/kobalt/app/BuildGenerator.kt index 3455525f..364652eb 100644 --- a/src/main/kotlin/com/beust/kobalt/app/BuildGenerator.kt +++ b/src/main/kotlin/com/beust/kobalt/app/BuildGenerator.kt @@ -33,7 +33,7 @@ abstract class BuildGenerator : IArchetype { } } - override fun generateArchetype(args: Args) { + override fun generateArchetype(args: Args, classLoader: ClassLoader) { val file = File(args.buildFile) if (! file.exists()) { PrintWriter(FileOutputStream(file)).use { diff --git a/src/main/kotlin/com/beust/kobalt/app/ProjectGenerator.kt b/src/main/kotlin/com/beust/kobalt/app/ProjectGenerator.kt index 02453286..467d7f93 100644 --- a/src/main/kotlin/com/beust/kobalt/app/ProjectGenerator.kt +++ b/src/main/kotlin/com/beust/kobalt/app/ProjectGenerator.kt @@ -13,7 +13,7 @@ import java.io.File * Invoked with --init. Generate a new project. */ class ProjectGenerator @Inject constructor(val pluginInfo: PluginInfo){ - fun run(args: Args) { + fun run(args: Args, classLoader: ClassLoader) { File(args.buildFile).parentFile.mkdirs() val map = hashMapOf() pluginInfo.initContributors.forEach { @@ -26,7 +26,7 @@ class ProjectGenerator @Inject constructor(val pluginInfo: PluginInfo){ val archetype = map[archetypeName] if (archetype != null) { log(2, "Running archetype $archetypeName") - archetype.generateArchetype(args) + archetype.generateArchetype(args, classLoader) } else { warn("Couldn't find any archetype named $archetypeName") } diff --git a/src/test/kotlin/com/beust/kobalt/maven/PomTest.kt b/src/test/kotlin/com/beust/kobalt/maven/PomTest.kt index 9e56999f..f56dab30 100644 --- a/src/test/kotlin/com/beust/kobalt/maven/PomTest.kt +++ b/src/test/kotlin/com/beust/kobalt/maven/PomTest.kt @@ -58,7 +58,7 @@ class PomTest @Inject constructor() : KobaltTest() { args.buildFile = file.absolutePath args.archetypes = "java" - ProjectGenerator(Kobalt.INJECTOR.getInstance(PluginInfo::class.java)).run(args) + ProjectGenerator(Kobalt.INJECTOR.getInstance(PluginInfo::class.java)).run(args, javaClass.classLoader) var contents = file.readText() Assert.assertTrue(contents.contains("group = \"${pom.groupId}\""), "Should find the group defined")