使用 Gradle 时,如何排除可传递依赖项的所有实例?

我的 gradle 项目使用该插件来构建 jar 文件。作为运行时传递依赖项的一部分,我最终拉入了 .(它在至少5或6个其他传递依赖项中被引用为子传递依赖项 - 该项目使用spring和hadoop,因此除了厨房水槽之外的所有内容都被拉入......不等...那太:)了)。applicationorg.slf4j:slf4j-log4j12

我想从我构建的 jar 中全局排除该 jar。所以我试过了这个:slf4j-log4j12

configurations {
  runtime.exclude group: "org.slf4j", name: "slf4j-log4j12"
}

但是,这似乎排除了所有工件,包括.在调试模式下运行时,我看到如下行:org.slf4jslf4j-api

org.slf4j#slf4j-api is excluded from com.pivotal.gfxd:gfxd-demo-mapreduce:1.0(runtime).
org.slf4j#slf4j-simple is excluded from com.pivotal.gfxd:gfxd-demo-mapreduce:1.0(runtime).
org.slf4j#slf4j-log4j12 is excluded from org.apache.hadoop:hadoop-common:2.2.0(runtime).

我不想查找每个可传递依赖项的源,然后在我的块中有单独的语句。slf4j-log4j12compile foo { exclude slf4j... }dependencies

更新:

我也尝试过这个:

configurations {
  runtime.exclude name: "slf4j-log4j12"
}

这最终会从构建中排除所有内容!好像我指定了.group: "*"

更新 2:

为此,我使用的是Gradle版本1.10。


答案 1

啊,以下工作,做我想做的事:

configurations {
  runtime.exclude group: "org.slf4j", module: "slf4j-log4j12"
}

排除规则似乎只有两个属性 - 和 。
因此,为了仅从单个依赖项中排除,我们可以执行如下操作:groupmodule

dependencies {
  compile ('org.springframework.data:spring-data-hadoop-core:2.0.0.M4-hadoop22') {
    exclude group: "org.slf4j", module: "slf4j-log4j12"
  }
}

但是,上述语法并不妨碍您将任何任意属性指定为谓词。尝试从单个依赖项中排除时,不能指定任意属性。例如,此操作将失败:

dependencies {
  compile ('org.springframework.data:spring-data-hadoop-core:2.0.0.M4-hadoop22') {
    exclude group: "org.slf4j", name: "slf4j-log4j12"
  }
}

No such property: name for class: org.gradle.api.internal.artifacts.DefaultExcludeRule

因此,即使您可以使用 a 指定依赖项,而不能使用 !?!group:name:name:

也许是一个单独的问题,但模块到底是什么?我可以理解Maven对groupId:artifactId:version的概念,我理解它在Gradle中转换为group:name:version。但是,我怎么知道一个特定的Maven工件属于哪个模块(用gradle来说)呢?


答案 2

要全局排除一个或多个库,请将以下内容添加到 build.gradle 中

configurations.all {
   exclude group:"org.apache.geronimo.specs", module: "geronimo-servlet_2.5_spec"
   exclude group:"ch.qos.logback", module:"logback-core"
}

现在,排除块有两个属性模块。对于那些来自maven背景的人来说,group与groupId相同,moduleartifactId相同。示例:要排除 com.mchange:c3p0:0.9.2.1,应排除以下块

exclude group:"com.mchange", module:"c3p0"

推荐