【Gradle:新一代构建工具】学习笔记
【【尚硅谷】Gradle教程入门到进阶(从gradle安装到项目实战)】
3 Gradle进阶说明
3.13 Gradle中api 与 implementation的区别
- api 是java-library 插件提供支持
- implementation 是java 插件提供支持
举个例子:
- 编译时:如果 libC 的内容发生变化,由于使用的是 api 依赖,依赖会传递,所以 libC、libA、projectX 都要发生变化,都需要重 新编译,速度慢,
- 运行时:libC、libA、projectX 中的 class 都要被加载。
- 编译时:如果 libD 的内容发生变化,由于使用的是 implemetation 依赖,依赖不会传递,只有 libD、libB 要变化并重新编译,速 度快,运行时:libC、libA、projectX 中的 class 都要被加载。
拓展 3:
api 和 implementation 案例分析 api 的适用场景是多 module 依赖,moduleA 工程依赖了 module B,同时 module B 又需要依赖了 module C,modelA 工 程也需要去依赖 module C,这个时候避免重复依赖 module,可以使用 module B api 依赖的方式去依赖 module C,modelA 工 程只需要依赖 moduleB 即可。
有ABCD四个模块:
- A implemetation B,B implemetation C,则A不能使用C。
- A implemetation B,B api C,则A可以使用C。
- A implemetation B,B implemetation C,C api D,则B可以使用D,但A不能使用D。
- A implemetation B,B api C,C api D,这样A可以使用D
- 不管ABCD在何处被添加到类路径都一样,在运行时这些模块中的class都是要被加载的。
总之,除非涉及到多模块依赖,为了避免重复依赖,咱们会使用 api,其它情况我们优先选择 implementation
,拥有大量 的 api 依赖项会显著增加构建时间