我的gradle项目使用application
插件来构建jar文件。作为运行时传递依赖项的一部分,我最终引入了org.slf4j:slf4j-log4j12
。 (它被引用为至少5或6个其他传递依赖的子传递依赖 - 这个项目使用spring和hadoop,所以除了厨房水槽之外的所有东西都被拉进来......没有等待......那里也是:) )。
我想从我构建的jar中全局排除slf4j-log4j12
jar。所以我试过这个:
configurations {
runtime.exclude group: "org.slf4j", name: "slf4j-log4j12"
}
但是,这似乎排除了所有 org.slf4j
工件,包括slf4j-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-log4j12
传递依赖项的来源,然后在compile foo { exclude slf4j... }
块中添加单独的dependencies
语句。
更新
我也试过这个:
configurations {
runtime.exclude name: "slf4j-log4j12"
}
最终不包括构建中的所有内容!好像我指定了group: "*"
。
更新2:
我正在使用Gradle版本1.10。
答案 0 :(得分:116)
啊,以下工作并做我想做的事:
configurations {
runtime.exclude group: "org.slf4j", module: "slf4j-log4j12"
}
Exclude Rule似乎只有两个属性 - group
和module
。但是,上述语法不会阻止您将任意属性指定为谓词。尝试从单个依赖项中排除时,您无法指定任意属性。例如,这失败了:
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
因此,即使您可以使用group:
和name:
指定依赖项,也无法使用name:
指定排除项!?
也许是一个单独的问题,但完全是模块呢?我可以理解groupId:artifactId:version的Maven概念,我理解它转换为group:name:Gradle中的版本。但是,我如何知道特定Maven工件属于哪个模块(以gradle-speak方式)?
答案 1 :(得分:29)
要全局排除一个或多个库,请将以下内容添加到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背景的人,组与 groupId 相同,模块与 artifactId 相同。 示例:要排除com.mchange:c3p0:0.9.2.1以下应该是排除块
exclude group:"com.mchange", module:"c3p0"
答案 2 :(得分:26)
你的方法是正确的。 (根据具体情况,您可能希望使用configurations.all { exclude ... }
。)如果这些排除实际上排除了多个依赖项(我在使用它时没有注意到),请在{{3}处提交错误理想情况下,有一个可重复的例子。
答案 3 :(得分:16)
在下面的示例中我排除了
弹簧引导起动的Tomcat
compile("org.springframework.boot:spring-boot-starter-web") {
//by both name and group
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
}
答案 4 :(得分:3)
我正在使用spring boot 1.5.10并尝试排除logback,上面给出的解决方案效果不好,我使用的是配置
configurations.all {
exclude group: "org.springframework.boot", module:"spring-boot-starter-logging"
}
答案 5 :(得分:1)
除了@ berguiga-mohamed-amine所说的以外,我刚刚发现通配符需要将模块参数留空字符串:
compile ("com.github.jsonld-java:jsonld-java:$jsonldJavaVersion") {
exclude group: 'org.apache.httpcomponents', module: ''
exclude group: 'org.slf4j', module: ''
}