文章目录
-
关键字
api
:使用关键字api
声明的依赖项表示该模块将向依赖自己的模块公开自己依赖的 API。这意味着其他模块可以使用该依赖项提供的所有公共类和方法,以及该依赖项的传递依赖项提供的所有公共类和方法。当需要在本模块和依赖它的其他模块之间共享代码时,可以使用关键字api
。例如,如果模块 A 使用模块 B,并且模块 B 使用了关键字
api
声明某个依赖项,那么模块 A 也可以使用该依赖项的所有公共 API。这通常用于需要在模块之间共享代码的情况,例如库模块和应用程序模块之间的依赖关系。 -
关键字
implementation
:使用关键字implementation
声明的依赖项表示该模块将不向依赖自己的模块公开自己依赖的 API。这意味着该依赖项只对该模块本身可见,并且不会被传递到依赖该模块的其他模块。当不需要将某个依赖项的 API 公开给其他模块时,可以使用关键字implementation
。例如,如果模块 A 使用模块 B,而模块 B 使用了关键字
implementation
声明某个依赖项,那么模块 A 将无法使用该依赖项的任何公共 API。这通常用于需要在模块之间隔离依赖关系的情况,例如应用程序模块和库模块之间的依赖关系。
总之,使用关键字 api
声明依赖项时,可以将该依赖项的公共 API 与其他模块共享。而使用关键字 implementation
声明依赖项时,可以将该依赖项限制在当前模块内。
【注意】
对依赖模块使用关键字 api
,并不能使本模块能传递性地获得依赖模块依赖的所有依赖。对本模块来说,依赖时无论是使用关键字 api
还是 implementation
都没有区别。关键字 api
的作用只在其它模块依赖本模块时才会体现。换句话说,如果想令本模块能传递性地获得依赖模块的依赖,那么应该在依赖模块的相应依赖中使用关键字 api
,而不是在本模块中使用。
举个例子。如果项目中有模块 A、B、C、D,且 A 依赖 B、B 依赖 C、C 依赖 D。在不考虑各个模块其它依赖的干扰的情况下。
-
如果 A
api
B,Bimplementation
C则 A 可以直接引用 B 中的类,但不能引用 C 中的类
-
如果 A
implementation
B,Bimplementation
C则 A 可以直接引用 B 中的类,但不能引用 C 中的类
-
如果 A
api
B,Bapi
C则 A 可以直接引用 B、C 中的类
-
如果 A
implementation
B,Bapi
C则 A 可以直接引用 B、C 中的类
-
如果 A
api
B,Bimplementation
C,Capi
D则 A 可以直接引用 B 中的类,但不能引用 C、D 中的类
-
如果 A
implementation
B,Bimplementation
C,Capi
D则 A 可以直接引用 B 中的类,但不能引用 C、D 中的类
也就是说,如果 B implementation
C,则不管使用什么关键字,都无法通过 B 来依赖 C。
对 B 而言,无论是对 C 使用 implementation
还是 api
,都不会影响 B 对 C 的访问。不过,这样做虽然不会影响 B 自己,但会影响 A 通过 B 对 C 的访问。因此,这两个关键字实际上只影响别人,不影响自己。