diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/Project.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/Project.kt index 0e1f3e8c..48f6e871 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/Project.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/Project.kt @@ -77,7 +77,8 @@ open class Project( @Directive fun dependencies(init: Dependencies.() -> Unit) : Dependencies { - dependencies = Dependencies(this, compileDependencies, compileProvidedDependencies, compileRuntimeDependencies) + dependencies = Dependencies(this, compileDependencies, compileProvidedDependencies, compileRuntimeDependencies, + excludedDependencies) dependencies!!.init() return dependencies!! } @@ -85,10 +86,12 @@ open class Project( val compileDependencies : ArrayList = arrayListOf() val compileProvidedDependencies : ArrayList = arrayListOf() val compileRuntimeDependencies : ArrayList = arrayListOf() + val excludedDependencies : ArrayList = arrayListOf() @Directive fun dependenciesTest(init: Dependencies.() -> Unit) : Dependencies { - dependencies = Dependencies(this, testDependencies, testProvidedDependencies, compileRuntimeDependencies) + dependencies = Dependencies(this, testDependencies, testProvidedDependencies, compileRuntimeDependencies, + excludedDependencies) dependencies!!.init() return dependencies!! } @@ -130,7 +133,8 @@ class Sources(val project: Project, val sources: HashSet) { class Dependencies(val project: Project, val dependencies: ArrayList, val providedDependencies: ArrayList, - val runtimeDependencies: ArrayList) { + val runtimeDependencies: ArrayList, + val excludedDependencies: ArrayList) { @Directive fun compile(vararg dep: String) { dep.forEach { dependencies.add(MavenDependency.create(it)) } @@ -145,6 +149,11 @@ class Dependencies(val project: Project, val dependencies: ArrayList) + = excluded.any { id.id.startsWith(it.id) } + /** * Create a CompilerActionInfo (all the information that a compiler needs to know) for the given parameters. * Runs all the contributors and interceptors relevant to that task. @@ -220,11 +228,16 @@ abstract class JvmCompilerPlugin @Inject constructor( CompilerActionInfo { copyResources(project, JvmCompilerPlugin.SOURCE_SET_MAIN) - val classpath = if (isTest) + val fullClasspath = if (isTest) dependencyManager.testDependencies(project, context, projects) else dependencyManager.dependencies(project, context, projects) + // Remove all the excluded dependencies from the classpath + val classpath = fullClasspath.filter { + ! isDependencyExcluded(it, project.excludedDependencies) + } + val projectDirectory = File(project.directory) val buildDirectory = if (isTest) KFiles.makeOutputTestDir(project) else File(project.classesDir(context))