如何排除从其他子项目引入的依赖项?

Posted

技术标签:

【中文标题】如何排除从其他子项目引入的依赖项?【英文标题】:How can I exclude dependencies brought in from other sub-projects? 【发布时间】:2016-02-28 20:24:48 【问题描述】:

这不是重复的,因为其他解决方案不起作用。

我有一个子项目:

:commons:widget

gradle.build(子项目)类似于:

configurations providedCompile

dependencies 
  compile project(":commons:other-widget")
...other dependencies...

如果显示依赖项:

+--- project :commons:some-other-project
    +--- project :commons:exclude-me-project (*)
    \--- org.apache.cxf:cxf-rt-frontend-jaxrs: -> 3.0.3 (*)

什么不起作用:

任何常用语法。我已经尝试了所有我能想到的变化。甚至去寻找 API 但无法在那里找到我需要的东西。

在此项目的依赖项部分: ...

compile project(":commons:some-other-project") 
 exclude (":commons:exclude-me-project")

结果:

Could not find method exclude() for arguments [:commons:some-other-project] on project 

我也试过了:

compile ( project (':commons:some-other-project') ) 
  transitive = false

结果:它没有删除“:commons:some-other-project”的依赖项,而是删除了“:commons:some-other-project”。

我有一个大而复杂的项目要转换。我有很多这样的工作摆在我面前。给定一个项目作为依赖项,我如何从中排除一些东西?

【问题讨论】:

你试过exclude("groupID:ModuleID")吗? transitive=false Re: transitive=false 如果您要随意排除所有内容,那么拥有子项目并尝试重用东西是没有意义的。我需要一些具体的东西。 @RaGe 我注意到 Maven 会执行 groupId:projectId 之类的操作,但如果您的子组件是 :something:somethingelse:yetevensomethingelse,那么您的 groupId:projectId 是什么? 【参考方案1】:

exclude for dependencies 有一点不同的语法,所以尝试提供模块名称,它等于 exclude-me-project 名称,例如:

compile(project(":commons:some-other-project")) 
    exclude module: "exclude-me-project"

或者,您可以排除 commons 项目的所有传递依赖项,但它会删除 some-other-project 项目的所有部门,包括 exclude-me-project

compile(project(":commons:some-other-project")) 
    transitive = false

【讨论】:

已经尝试排除模块,但会仔细检查以确定。它可能不是在正确的情况下。 transitive=false 不是很具体。这就像用核武器打蚊子一样。 @user447607 只是不要忘记将project 放入(),因为它已在答案中完成。不是compile project(":commons:some-other-project"),而是compile(project(":commons:some-other-project"))。我已经测试过了,但项目结构有点不同【参考方案2】:

对于新的 gradle 语法,您可以执行以下操作:

implementation (project(path: ':my_library_v1.0.0')) 
    exclude (group: 'com.google.code.gson', module: 'gson')

【讨论】:

【参考方案3】:

Kotlin DSL 答案

这将从另一个子项目中排除一个子项目:

implementation(project(":nice-subproject")) 
    exclude(module = "annoying-transitive-subproject")

另请注意,在测试夹具依赖项上使用 exclude 需要强制转换

implementation(testFixtures(project(":nice-subproject")) as ModuleDependency) 
    exclude(module = "annoying-transitive-subproject")

【讨论】:

以上是关于如何排除从其他子项目引入的依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

如何排除从项目依赖项中扫描的 Spring bean?

在 Android Gradle 构建中,如何从包含的 jar 文件中排除依赖项?

Android:排除应用程序的依赖项,仅由内部使用它的其他依赖项使用

如何在gradle中排除来自spring boot的依赖项

Android apk - 如何使用 gradle 从 3rd 方依赖项中排除 .so 文件

如何在安装项目中排除依赖项?