今天我开始为我的公司构建一个库,这样我们就可以避免在我们的一些应用程序中出现一些重复的代码。该库使用了一些在应用程序中重复的依赖项。在这种情况下,Retrofit 和 Eventbus。无论如何,当我包含我的库时,它看起来像这样:
implementation (project(":mylib")
知道我将使用 Eventbus 以及其他一些依赖项,我想测试排除它们以避免重复的依赖项。因此,我将 Eventbus 添加到应用程序的 gradle 文件中,并从我的库中排除了 Eventbus。
implementation 'org.greenrobot:eventbus:3.0.0'
implementation (project(":mylib")){
exclude module: 'eventbus'
}
现在我完全意识到我不能通过仅 import 将 Eventbus 包含在应用程序中mylib
,当然我已经排除了依赖项以避免过去的构建冲突,所以我熟悉用法,但我只是想尝试一下,因为它我突然想到,我真的不知道这个排除在幕后发生了什么。术语排除意味着(对我而言)此依赖项在排除时不是编译期,但是,情况并非如此,因为第 3 方库(在这种情况下为 Eventbus)似乎仍然可以正常执行mylib
如果它没有编译,那么由于奇怪的库依赖问题,全球范围内的代码都会崩溃。那么这里到底发生了什么?它是否仍然为库编译,并且仍然为应用程序编译,但不知何故这些依赖关系只是分开了?如果是这样,这似乎不是那么有效,因为您仍然会复制项目中的所有方法。
显然我对此了解有限,所以如果有人能澄清这一点,我将非常感激。