簡體   English   中英

當gradle中排除庫依賴項時,幕后發生了什么?

[英]What's happening under the hood when a library dependency is excluded in gradle?

今天,我開始為我的公司建立一個庫,這樣我們就可以避免在我們的一些應用程序中出現重復的代碼。 該庫使用了一些在應用程序中重復的依賴項。 在這種情況下,為Retrofit和Eventbus。 無論如何,當我包括我的圖書館時,它看起來像這樣:

implementation (project(":mylib")

知道我將使用Eventbus以及其他一些依賴項之后,我想測試將它們排除在外,以避免重復的依賴項。 因此,我將Eventbus添加到應用程序的gradle文件中,並從庫中排除了Eventbus。

implementation 'org.greenrobot:eventbus:3.0.0'
implementation (project(":mylib")){
    exclude module: 'eventbus'
}

現在我完全意識到,僅導入mylib不能將Eventbus包含在應用程序中,並且當然我已經排除了依賴項以避免過去的構建沖突,所以我很熟悉用法,但是我只是想嘗試一下,因為在我看來,我真的不知道這種排除在幕后發生了什么。 術語“排除”(對我而言)意味着在排除時此依賴性不是編譯期,但是,由於第3方庫(在這種情況下為Eventbus)在mylib似乎仍然可以正常執行,因此情況並非如此如果不編譯的話,由於怪異的庫依賴問題,全世界的代碼都會崩潰。 那么,這里到底發生了什么? 是否仍然為庫編譯,還是仍然為應用程序編譯,是否以某種方式將這些依賴項分開? 如果是這樣,那似乎還不夠高效,因為您仍將復制項目中的所有方法。

顯然,我對此知之甚少,因此,如果有人可以澄清這一點,我將非常感激。

AAR / JAR庫在存檔中不包括依賴項的類,而僅包含您的代碼。 通常,它們使用.pom文件存儲在類似Maven的存儲庫中,該文件包含其依賴項列表。 當您將其添加到build.gradle文件中的項目中時,它僅下載AAR / JAR,解析.pom文件並下載列出的所有依賴項(遞歸地重復每個庫的過程,直到獲得所有依賴項)。 這意味着如果模塊也依賴於應用程序使用的相同庫,則不必排除模塊。

將庫添加為本地模塊implementation (project(":mylib")它的作用完全相同,但是對於子項目的build.gradle中列出的每個依賴項

如果排除傳遞依賴,則在解析.pom文件時只會忽略具有指定名稱的工件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM