gradle 解决重复依赖
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gradle 解决重复依赖相关的知识,希望对你有一定的参考价值。
参考技术A 一、查看重复依赖如果出现重复依赖一般会出现以下错误:
通过gradle命令查看重复依赖,在android studio命令窗口中输入以下命令:
稍等片刻,会出来一个树状图,其中用"->"会标示出冲突的部分
二、去除重复依赖
1.如果两个独立的重复依赖包,去除之一即可;
2.如果出现一个引用包里面引用的包出现的重复可以使用 exclude group:'***'来解决,如LeanCloud的SDK中可能包含了与你其他的库中不同版本的httpclient或者okhttp
Done!
解决gradle中的循环依赖
【中文标题】解决gradle中的循环依赖【英文标题】:Resolve circular dependency in gradle 【发布时间】:2020-01-30 08:49:11 【问题描述】:我最近开始开发一个 java 项目,其中包含一些子项目。他们都是gradle。因此,假设有两个项目 A 和 B 已经实施。还有我要介绍另外一个gradle项目C。而且依赖是这样的。
A 依赖于 B B 依赖于 C C 依赖于 A所以我需要在没有循环依赖错误的情况下实现这个项目 C,因为它是在我尝试使用 gradle 构建项目时给出的。我看到一些答案,Interface 是一个解决方案。但就我而言,项目 A 和 B 是大型项目,我想不出如何为它们引入接口。我唯一能做的就是为项目 C 引入接口。那么有没有办法解决这些案例的问题?如果没有这样的方法是什么?请注意,这些 A、B、C 项目是单独的项目,因此不能合并为一个项目。
【问题讨论】:
你可能想看看this answer。 当我使用它配置 gradle 时,我无法转到项目文件。并且源目录的内容显示为空。但它不是空的。 【参考方案1】:前言
当你的依赖图中有一个循环时,没有什么魔法可以让你编译你的项目。您需要进行一些重构以消除循环。
处理循环依赖的方式是拆分模块并重复此操作,直到循环结束(或使用下面给出的替代方案)。
算法
起点:
A --> B --> C
^ |
| |
+-----------+
首先将A
中被C
使用的部分提取到一个单独的模块中(我们称之为D
):
A --> B --> C
| |
| |
+---> D <---+
如果D
不依赖于任何其他模块,你就完成了。否则继续剪线。
假设 D 仍然有 B 依赖:
A --> B --> C
| ^ |
| | |
+---> D <---+
您需要从B
(我们称之为E
)中类推提取常用部分:
A --> B --> C
| | |
| v |
| E |
| ^ |
| | |
+---> D <---+
就像以前一样 - 如果 E
仍然存在有问题的依赖关系,请重复。
假设 E 仍然依赖于 C:
A --> B --> C --+
| | ^ |
| v | |
| E ----+ |
| ^ |
| | |
+---> D <-------+
我们做什么?明显拆分C
(通过提取F
):
A --> B --> C --+
| | | |
| v v |
| E --> F |
| ^ |
| | |
+---> D <-------+
继续循环,直到新引入的模块在模块图中不再有依赖项。
例如,在第 3 点中,如果我们假设 F
是无依赖性的,那么我们就完成了。这意味着C
使用的A
有问题的部分已经被提取到D ─► E ─► F
子图中。
另类
请注意,如果在合理的预算范围内完全可行,它可能并不那么容易。因此,在某些情况下,最好退回到不太理想的替代方案:复制C
所依赖的A
中的代码。
【讨论】:
以上是关于gradle 解决重复依赖的主要内容,如果未能解决你的问题,请参考以下文章