Java使用Gradle时如何排除传递依赖的所有实例?
我的gradle项目使用该application
插件构建了一个jar文件。作为运行时传递依赖项的一部分,我最后引入org.slf4j:slf4j-log4j12
。(在至少5或6个其他可传递依赖项中被称为子传递依赖项-该项目正在使用spring和hadoop,因此除了厨房水槽之外的所有东西都被拉进来了…等一下…那里也是:) )。
我想slf4j-log4j12
从我的内置jar中全局排除该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。
回答:
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", name: "slf4j-log4j12"
}
}
与
No such property: name for class: org.gradle.api.internal.artifacts.DefaultExcludeRule
因此,即使你可以指定一个依赖group:,并name:不能与指定排除name:!?!
也许一个单独的问题,但什么究竟是一个模块呢?我可以理解groupId:artifactId:version的Maven概念,在Gradle中可以理解为group:name:version。但是,然后,我如何知道特定的Maven工件属于哪个模块(以讲授方式)?
以上是 Java使用Gradle时如何排除传递依赖的所有实例? 的全部内容, 来源链接: utcz.com/qa/416643.html