91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java用Gradle配置compile及implementation和api的區別是什么

發布時間:2022-06-08 10:37:24 來源:億速云 閱讀:392 作者:zzz 欄目:開發技術

今天小編給大家分享一下Java用Gradle配置compile及implementation和api的區別是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

前言:

這個主要看Java項目所使用的Gradle的版本。

Gradle 3.4 新增了Java-library插件,java-library插件使用了新的依賴配置implementation和api。舊的依賴配置compile被廢棄。

Gradle 3.4 之前的版本

java插件:

apply plugin: 'java'

添加依賴:

dependencies {
compile 'commons-httpclient:commons-httpclient:3.1'
compile 'org.apache.commons:commons-lang3:3.5'
}

Gradle 3.4+

使用java-library插件替換java插件

apply plugin: 'java-library'

新的依賴配置:implementation和api

dependencies {
api 'commons-httpclient:commons-httpclient:3.1'
implementation 'org.apache.commons:commons-lang3:3.5'
}

api和implementation兩種依賴的不同點在于:它們聲明的依賴其他模塊是否能使用。

api:當其他模塊依賴于此模塊時,此模塊使用api聲明的依賴包是可以被其他模塊使用。

implementation:當其他模塊依賴此模塊時,此模塊使用implementation聲明的依賴包只限于模塊內部使用,不允許其他模塊使用。

api: 跟 2.x 版本的 compile完全相同

implementation:使用了該命令編譯的依賴,它僅僅對當前的Module提供接口。例如我們當前項目結構如下

Java用Gradle配置compile及implementation和api的區別是什么

LibraryA 中引用了 LibraryC 的庫,如果對 LibraryC 的依賴用的是 implementation 關鍵字。 如下:

dependencies {
. . . .
implementation project(path:':libraryC')
}

那么LibraryC 中的接口,僅僅只能給 LibraryA 使用,而我們的 App Module 是無法訪問到 LibraryC 提供的接口的,也就是將該依賴隱藏在內部,而不對外部公開。這就是implementation關鍵字的作用。

最佳實踐建議

在Google IO 相關話題的中提到了一個建議,就是依賴首先應該設置為implement的,如果沒有錯,那就用implement,如果有錯,那么使用api指令,這樣會使編譯速度有所增快。

那為什么要這么做呢?

答案是: 1. 加快編譯速度。2. 隱藏對外不必要的接口。

為什么能加快編譯速度呢?

這對于大型項目含有多個Module模塊的, 以上圖為例,比如我們改動 LibraryC 接口的相關代碼,這時候編譯只需要單獨編譯LibraryA模塊就行, 如果使用的是api或者舊時代的compile,由于App Module 也可以訪問到 LibraryC,所以 App Module部分也需要重新編譯。當然這是在全編的情況下。

版本依賴關鍵字詳解(2.0與3.0所有關鍵字)

compile(api)

這種是我們最常用的方式,使用該方式依賴的庫將會參與編譯和打包。
當我們依賴一些第三方的庫時,可能會遇到com.android.support沖突的問題,就是因為開發者使用的compile依賴的com.android.support包,而他所依賴的包與我們本地所依賴的com.android.support包版本不一樣,所以就會報All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes這個錯誤。

provided(compileOnly)

只在編譯時有效,不會參與打包
可以在自己的module中使用該方式依賴一些比如com.android.support,gson這些使用者常用的庫,避免沖突。

apk(runtimeOnly)

只在生成apk的時候參與打包,編譯時不會參與,很少用。

testCompile(testImplementation)

testCompile 只在單元測試代碼的編譯以及最終打包測試apk時有效。

debugCompile(debugImplementation)

debugCompile 只在 debug 模式的編譯和最終的 debug apk 打包時有效

releaseCompile(releaseImplementation)

Release compile僅僅針對 Release 模式的編譯和最終的 Release apk 打包。

以上就是“Java用Gradle配置compile及implementation和api的區別是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

清涧县| 中山市| 且末县| 乌恰县| 华坪县| 公安县| 呼伦贝尔市| 潼关县| 金昌市| 吴旗县| 石城县| 库伦旗| 从江县| 武强县| 凤冈县| 温宿县| 呼玛县| 济南市| 五寨县| 南昌县| 舞阳县| 灵山县| 皋兰县| 洛浦县| 彰化市| 弥勒县| 遂宁市| 富顺县| 建平县| 永登县| 当阳市| 迁安市| 美姑县| 泗洪县| 芒康县| 鹿邑县| 股票| 上杭县| 高尔夫| 南昌县| 西充县|