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 解决重复依赖的主要内容,如果未能解决你的问题,请参考以下文章

Gradle复合构建无法解决传递依赖项[重复]

gradle重复依赖终极方案解决办法

Android Studio的Gradle添加重复依赖的问题

如何解决gradle build中的重复类错误?

gradle - 依赖项中的库重复

Android gradle依赖冲突和资源重复值