如何在使用Gradle时排除所有传递依赖的实例?
我的gradle项目使用application
插件来构build一个jar文件。 作为运行时传递依赖的一部分,我最终得到了org.slf4j:slf4j-log4j12
。 (在至less5或6个其他传递依赖项中,它被引用为子传递依赖项 – 这个项目使用了spring和hadoop,所以除了厨房水槽以外的所有东西都被拉进了…不等待…那里也是:) )。
我想从我的内置jar中全局排除slf4j-log4j12
jar。 所以我试过这个:
configurations { runtime.exclude group: "org.slf4j", module: "slf4j-log4j12" }
但是,这似乎排除了包括slf4j-api
在内的所有 org.slf4j
构件。 在debugging模式下运行时,我看到如下行:
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
传递依赖的来源,然后在我的dependencies
块中单独compile foo { exclude slf4j... }
语句。
更新:
我也试过这个:
configurations { runtime.exclude name: "slf4j-log4j12" }
最后排除了构build的一切 ! 就像我指定的group: "*"
。
更新2:
我正在使用Gradle版本1.10。
啊,下面的工作,做我想要的:
configurations { runtime.exclude group: "org.slf4j", module: "slf4j-log4j12" }
似乎排除规则只有两个属性 – group
和module
。 但是,上面的语法不会阻止您将任何属性指定为谓词。 当试图从个体依赖中排除时,你不能指定任意属性。 例如,这失败了:
dependencies { compile ('org.springframework.data:spring-data-hadoop-core:2.0.0.M4-hadoop22') { exclude group: "org.slf4j", module: "slf4j-log4j12" } }
同
No such property: name for class: org.gradle.api.internal.artifacts.DefaultExcludeRule
所以即使你可以用一个group:
和name:
来指定一个依赖name:
你不能用一个name:
来指定一个排除name:
!?!
也许是一个单独的问题,但究竟是一个模块呢? 我可以理解groupId:artifactId:version的Maven概念,我知道它转换为Gradle中的group:name:version。 但是,那么我怎么知道一个特定的Maven神器属于哪个模块?
你的方法是正确的。 (根据具体情况,你可能需要使用configurations.all { exclude ... }
。)如果这些排除了不止一个依赖项(我从来没有注意到使用它们的时候),请提交一个bug http://forums.gradle.org ,最好有一个可重复的例子。
在下面的例子中我排除
弹簧引导起动的tomcat
compile("org.springframework.boot:spring-boot-starter-web") { //by both name and group exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }
要全局排除一个或多个库,请将以下内容添加到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是一样的, module和artifactId是一样的。 例如:要排除com.mchange:c3p0:0.9.2.1以下应该是排除块
exclude group:"com.mchange", module:"c3p0"
- 错误:没有这样的属性:GROUP for class:org.gradle.api.publication.maven.internal.ant.DefaultGroovyMavenDeployer
- 在Android Studio中重命名模块?
- 如何用gradle构build源代码jar
- buildsgradle中的buildscript和所有项目有什么区别?
- Android Studio编译错误:枚举常量INSTANT_RUN_REPLACEMENT在类中不存在
- 为什么使用Gradle而不是Ant或Maven?
- 在Mac OS X上安装gradle
- Gradle Warning:缺lessgroovy返回语句
- 意外的顶级例外:com.android.dex.DexException:多个dex文件定义