代码之家  ›  专栏  ›  技术社区  ›  sam_c

当gradle中排除了库依赖时,后台会发生什么?

  •  1
  • sam_c  · 技术社区  · 7 年前

    今天,我开始为我的公司建立一个库,这样我们就可以避免在一些应用程序中出现重复代码。该库使用了几个在应用程序中重复的依赖项。在这种情况下,改装和事件总线。无论如何,当我把我的图书馆包括在内时,它看起来是这样的:

    implementation (project(":mylib")
    

    知道我将使用Eventbus以及其他一些依赖项,我想测试排除它们,以避免重复的依赖项。因此,我将Eventbus添加到应用程序的gradle文件中,并将Eventbus从我的库中排除。

    implementation 'org.greenrobot:eventbus:3.0.0'
    implementation (project(":mylib")){
        exclude module: 'eventbus'
    }
    

    现在我完全意识到,我不能仅仅通过导入来在应用程序中包括Eventbus mylib 当然,我在过去排除了依赖项以避免构建冲突,所以我熟悉它的用法,但我只是想尝试一下,因为我突然意识到,我真的不知道在这种排除的情况下会发生什么。术语排除(对我来说)意味着这个依赖关系在排除点不是编译期,然而,这不可能,因为第三方库(在本例中是Eventbus)在 mylib公司 如果它不编译,全世界的代码都会崩溃,因为奇怪的库依赖性问题。那么这里到底发生了什么?它是否仍为库编译,也为应用程序编译,但不知何故,这些依赖项只是分开了?如果是这样的话,那似乎效率不高,因为您仍然需要复制项目中的所有方法。

    显然,我对这方面的知识有限,因此如果有人能澄清这一点,我将不胜感激。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Amaksoft    7 年前

    AAR/JAR库在存档中不包括依赖项的类, 当您将其添加到生成中的项目时。gradle文件,它只是下载AAR/JAR,解析。pom文件并下载列出的所有依赖项(递归地重复每个库的过程,直到获得所有依赖项)。

    当您将库添加为本地模块时 implementation (project(":mylib") 它执行完全相同的操作,但针对子项目构建中列出的每个依赖项。格拉德尔

    推荐文章