簡體   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