欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java用?Gradle配置compile及implementation和api的區(qū)別

 更新時(shí)間:2022年06月08日 09:31:58   作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)  
這篇文章主要介紹了Java用Gradle配置compile及implementation和api的區(qū)別,文章圍繞主題的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

前言:

這個(gè)主要看Java項(xiàng)目所使用的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兩種依賴的不同點(diǎn)在于:它們聲明的依賴其他模塊是否能使用。

api:當(dāng)其他模塊依賴于此模塊時(shí),此模塊使用api聲明的依賴包是可以被其他模塊使用。

implementation:當(dāng)其他模塊依賴此模塊時(shí),此模塊使用implementation聲明的依賴包只限于模塊內(nèi)部使用,不允許其他模塊使用。

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

implementation:使用了該命令編譯的依賴,它僅僅對(duì)當(dāng)前的Module提供接口。例如我們當(dāng)前項(xiàng)目結(jié)構(gòu)如下

LibraryA 中引用了 LibraryC 的庫,如果對(duì) LibraryC 的依賴用的是 implementation 關(guān)鍵字。 如下:

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

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

最佳實(shí)踐建議

在Google IO 相關(guān)話題的中提到了一個(gè)建議,就是依賴首先應(yīng)該設(shè)置為implement的,如果沒有錯(cuò),那就用implement,如果有錯(cuò),那么使用api指令,這樣會(huì)使編譯速度有所增快。

那為什么要這么做呢?

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

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

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

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

compile(api)

這種是我們最常用的方式,使用該方式依賴的庫將會(huì)參與編譯和打包。
當(dāng)我們依賴一些第三方的庫時(shí),可能會(huì)遇到com.android.support沖突的問題,就是因?yàn)殚_發(fā)者使用的compile依賴的com.android.support包,而他所依賴的包與我們本地所依賴的com.android.support包版本不一樣,所以就會(huì)報(bào)All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes這個(gè)錯(cuò)誤。

provided(compileOnly)

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

apk(runtimeOnly)

只在生成apk的時(shí)候參與打包,編譯時(shí)不會(huì)參與,很少用。

testCompile(testImplementation)

testCompile 只在單元測(cè)試代碼的編譯以及最終打包測(cè)試apk時(shí)有效。

debugCompile(debugImplementation)

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

releaseCompile(releaseImplementation)

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

到此這篇關(guān)于Java用 Gradle配置compile及implementation和api的區(qū)別的文章就介紹到這了,更多相關(guān)Java 配置compile 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于springboot的RestTemplate、okhttp和HttpClient對(duì)比分析

    基于springboot的RestTemplate、okhttp和HttpClient對(duì)比分析

    這篇文章主要介紹了基于springboot的RestTemplate、okhttp和HttpClient對(duì)比分析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Java對(duì)zip,rar,7z文件帶密碼解壓實(shí)例詳解

    Java對(duì)zip,rar,7z文件帶密碼解壓實(shí)例詳解

    在日常業(yè)務(wù)中,會(huì)遇到一些瑣碎文件需要打包到一個(gè)壓縮包中上傳,業(yè)務(wù)方在后臺(tái)接收到壓縮包后自行解壓,然后解析相應(yīng)文件。而且可能涉及安全保密,因此會(huì)在壓縮時(shí)帶上密碼,要求后臺(tái)業(yè)務(wù)可以指定密碼進(jìn)行解壓。本文將用Java解決這一問題,需要的可以參考一下
    2022-07-07
  • 基于Jpa中ManyToMany和OneToMany的雙向控制

    基于Jpa中ManyToMany和OneToMany的雙向控制

    這篇文章主要介紹了Jpa中ManyToMany和OneToMany的雙向控制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java實(shí)現(xiàn)的時(shí)間戳與date對(duì)象相互轉(zhuǎn)換功能示例

    Java實(shí)現(xiàn)的時(shí)間戳與date對(duì)象相互轉(zhuǎn)換功能示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的時(shí)間戳與date對(duì)象相互轉(zhuǎn)換功能,結(jié)合具體實(shí)例形式分析了java日期與時(shí)間戳類型的表示與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • java實(shí)現(xiàn)多人聊天工具(socket+多線程)

    java實(shí)現(xiàn)多人聊天工具(socket+多線程)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)多人聊天工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringBoot項(xiàng)目實(shí)戰(zhàn)之加載和讀取資源文件

    SpringBoot項(xiàng)目實(shí)戰(zhàn)之加載和讀取資源文件

    在項(xiàng)目的開發(fā)中,我們知道的是SpringBoot框架大大減少了我們的配置文件,但是還是留下了一個(gè)application.properties文件讓我們可以進(jìn)行一些配置,下面這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目實(shí)戰(zhàn)之加載和讀取資源文件的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Mybatis-plus支持Gbase8s分頁的實(shí)現(xiàn)示例

    Mybatis-plus支持Gbase8s分頁的實(shí)現(xiàn)示例

    本文主要介紹了Mybatis-plus支持Gbase8s分頁的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Spring如何解決單例bean線程不安全的問題

    Spring如何解決單例bean線程不安全的問題

    這篇文章主要介紹了Spring如何解決單例bean線程不安全的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Maven下載依賴的順序及配置文件小結(jié)

    Maven下載依賴的順序及配置文件小結(jié)

    本文主要介紹了Maven下載依賴的順序及配置文件小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 關(guān)于Java如何正確地實(shí)現(xiàn)方法重載詳解

    關(guān)于Java如何正確地實(shí)現(xiàn)方法重載詳解

    在一個(gè)類中,可以定義多個(gè)構(gòu)造方法,這叫做方法的重載!但是關(guān)于方法重載,具有有哪些要求和細(xì)節(jié)?在今天的這篇文章中,小編給大家詳細(xì)說說方法重載相關(guān)的內(nèi)容,需要的朋友可以參考下
    2023-05-05

最新評(píng)論