繁体   English   中英

当使用“api”添加库依赖项时,不提供对在 Gradle 中使用“实现”声明的库的访问权限?

[英]When library dependency is added using 'api' does not provide access to their library which is declared using 'implementation' in Gradle?

LibA 使用“api”添加到 App 模块中,LibB 使用“implementation”添加到 LibA 中。

我无法在 App 内访问 LibB,它会出现编译错误。

任何人都可以解释这里发生的事情吗?我是否遗漏了什么或误解了“api”、“实现”的概念?

依赖

解释可以在Java库插件的官方文档中找到,特别是API和实现分离一章:

该插件公开了两个可用于声明依赖项的配置:api 和 implementation。 api 配置应该用于声明由库 API 导出的依赖项,而 implementation 配置应该用于声明组件内部的依赖项。

API 配置的主要思想是避免库模块的内部依赖项泄漏到库消费者类路径中。

在您的情况下, LibB被视为对LibA内部依赖,因为它是在implementation配置中定义的,因此您LibB直接在App模块中访问LibB

如果您需要从App使用库LibB ,那么只需使用apiimplementation配置声明从AppLibB的直接依赖项。

api依赖项本质上仅可传递到其上游项目。 因此,在您的情况下,如果您希望LibB暴露给App ,那么您可以拥有这样的依赖项 -

应用implementation依赖于力霸力霸api的依赖于LibB

这将允许LibB传递给App

但是,应该谨慎使用api依赖项,并且仅在需要时使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM