美文网首页
[gradle] api与implementation

[gradle] api与implementation

作者: 陀氏 | 来源:发表于2019-11-24 21:12 被阅读0次

简述

以往使用gradle引入依赖包时,我都用compile关键字:

    dependencies {
        compile "io.swagger:swagger-core:$swaggerVersion"
    }

这种做法会带来一些不必要的麻烦。举例说明:假如A使用compile依赖引入了B,在他人引入A依赖时,将被迫把B也导入到项目依赖中,可以直接使用其代码。
在gradle官网看文档,发现compile是已经被官方废弃,不再保证功能性的一个关键字。在gradle 3左右的版本中已支持implementationapi关键字,代替原先的compile功能:

  • 若A使用implementation依赖B,那B相关的代码只能在A包自己的代码中用到,我作为第三方引入A包后,不能使用和读到B相关的代码。
  • 若A使用api依赖B,那么和compile的场景一致,但它隐含了这样的含义:A这个包对外提供的api接口参数里,可能包含B定义的。(使用api需要在模块中apply plugin 'java-library'

展开

Gradle官方解释链接

implementation与api:

java-library与普通的plugin java的关键区别,在于java-library会提供api关键字,可以将一个依赖暴露给更上层的使用方。一个java-library就是一个被其它代码依赖的组件,在多project构建时很常用,也常见于外部依赖。
implementation用于定义组件完全在内部使用的依赖,api用于引入会通过api暴露给外部的依赖。

新关键字有哪些优势?

  • 依赖不会泄露给使用者,使用者在引入包时不会意外的新增一个子依赖;
  • 因为减少了classpath大小,有更快的编译速度;
  • 依赖项发生更改时,重新编译的东西更少了:无需重新编译它的使用者;
  • 更简洁的publish;
  • compile仍然可以使用,但是gradle官方已不再对它的功能做保证。
    ……

相关文章

网友评论

      本文标题:[gradle] api与implementation

      本文链接:https://www.haomeiwen.com/subject/ielrwctx.html