From 229e0b8f36b56f248cffed6478eb5a06087a7639 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Mon, 20 Mar 2017 15:05:42 -0700 Subject: [PATCH] Include global excludes. --- .../com/beust/kobalt/api/IDependencyManager.kt | 15 ++++++++++----- .../beust/kobalt/internal/JvmCompilerPlugin.kt | 2 +- .../com/beust/kobalt/maven/DependencyManager.kt | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/IDependencyManager.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/IDependencyManager.kt index a1e9f6ba..252baf08 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/IDependencyManager.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/api/IDependencyManager.kt @@ -40,7 +40,8 @@ interface IDependencyManager { * allDependencies is typically either compileDependencies or testDependencies */ fun calculateDependencies(project: Project?, context: KobaltContext, - dependencyFilter: DependencyFilter = createDependencyFilter(project?.compileDependencies ?: emptyList()), + dependencyFilter: DependencyFilter = + createDependencyFilter(project, project?.compileDependencies ?: emptyList()), scopes: List = listOf(Scope.COMPILE), vararg passedDependencies: List): List @@ -48,21 +49,25 @@ interface IDependencyManager { * Create an Aether dependency filter that uses the dependency configuration included in each * IClasspathDependency. */ - fun createDependencyFilter(dependencies: List) : DependencyFilter { + fun createDependencyFilter(project: Project?, dependencies: List) : DependencyFilter { return DependencyFilter { p0, p1 -> - fun isNodeExcluded(passedDep: IClasspathDependency, node: DependencyNode) : Boolean { + fun isNodeExcluded(node: DependencyNode, passedDep: IClasspathDependency) : Boolean { val dep = create(KobaltMavenResolver.artifactToId(node.artifact)) return passedDep.excluded.any { ex -> ex.isExcluded(dep)} } + fun isDepExcluded(node: DependencyNode, excluded: List?) : Boolean { + val dep = create(KobaltMavenResolver.artifactToId(node.artifact)) + return excluded?.map { it.id }?.contains(dep.id) ?: false + } val accept = dependencies.any { // Is this dependency excluded? - val isExcluded = isNodeExcluded(it, p0) + val isExcluded = isNodeExcluded(p0, it) || isDepExcluded(p0, project?.excludedDependencies) // Is the parent dependency excluded? val isParentExcluded = if (p1.any()) { - isNodeExcluded(it, p1[0]) + isNodeExcluded(p1[0], it) || isDepExcluded(p1[0], project?.excludedDependencies) } else { false } diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt index fa774ad3..15cd7fc3 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/JvmCompilerPlugin.kt @@ -88,7 +88,7 @@ open class JvmCompilerPlugin @Inject constructor( if (testContributor != null && testContributor.affinity(project, context) > 0) { // val td1 = dependencyManager.testDependencies(project, context) val testDependencies = dependencyManager.calculateDependencies(project, context, - dependencyFilter = dependencyManager.createDependencyFilter(project.testDependencies), + dependencyFilter = dependencyManager.createDependencyFilter(project, project.testDependencies), scopes = listOf(Scope.TEST)) val compileDependencies = dependencyManager.calculateDependencies(project, context, scopes = listOf(Scope.COMPILE)) 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 f93d92c2..14ae2c3d 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 @@ -140,7 +140,7 @@ class DependencyManager @Inject constructor(val executors: KobaltExecutors, * formally by groupId or artifactId. */ fun isDependencyExcluded(dep: IClasspathDependency, excluded: List): Boolean { - excluded.any { excluded -> dep.id.startsWith(excluded.id) }.let { result -> + excluded.any { excluded -> dep.id == excluded.id }.let { result -> if (result) { context.logger.log(project?.name ?: "", 2, " Excluding dependency $dep") }