最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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 的庫(kù),如果對(duì) LibraryC 的依賴用的是 implementation 關(guān)鍵字。 如下:

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

那么LibraryC 中的接口,僅僅只能給 LibraryA 使用,而我們的 App Module 是無(wú)法訪問到 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)

這種是我們最常用的方式,使用該方式依賴的庫(kù)將會(huì)參與編譯和打包。
當(dāng)我們依賴一些第三方的庫(kù)時(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這些使用者常用的庫(kù),避免沖突。

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)文章

  • Java報(bào)錯(cuò):ClassCastException問題解決方法

    Java報(bào)錯(cuò):ClassCastException問題解決方法

    異常是程序中的一些錯(cuò)誤,但并不是所有的錯(cuò)誤都是異常,并且錯(cuò)誤有時(shí)候是可以避免的,下面這篇文章主要給大家介紹了關(guān)于Java報(bào)錯(cuò):ClassCastException問題解決方法,需要的朋友可以參考下
    2024-07-07
  • IntelliJ IDEA(2019)之mybatis反向生成的實(shí)現(xiàn)

    IntelliJ IDEA(2019)之mybatis反向生成的實(shí)現(xiàn)

    這篇文章主要介紹了IntelliJ IDEA(2019)之mybatis反向生成,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 詳解log4j.properties的簡(jiǎn)單配置和使用

    詳解log4j.properties的簡(jiǎn)單配置和使用

    本篇文章主要介紹了詳解log4j.properties的簡(jiǎn)單配置和使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • JAVA構(gòu)造器是否為靜態(tài)方法你知道嗎

    JAVA構(gòu)造器是否為靜態(tài)方法你知道嗎

    這篇文章主要為大家詳細(xì)介紹了JAVA構(gòu)造器是否為靜態(tài)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Java?中的整型數(shù)據(jù)類型((byte,?short,?int,?long?)的取值范圍及使用不同的整型的場(chǎng)景分析

    Java?中的整型數(shù)據(jù)類型((byte,?short,?int,?long?)的取值范圍及使用不同的整型的場(chǎng)景

    Java中的整型數(shù)據(jù)類型包括byte、short、int和long,每種類型都有不同的內(nèi)存占用和取值范圍,選擇合適的整型類型取決于具體需求,如內(nèi)存敏感場(chǎng)景、性能考量和避免整數(shù)溢出,示例代碼展示了如何聲明和初始化不同整型變量,并打印它們的最大值,感興趣的朋友一起看看吧
    2025-03-03
  • Java8新特性:函數(shù)式編程

    Java8新特性:函數(shù)式編程

    Java8最新引入函數(shù)式編程概念,該項(xiàng)技術(shù)可以大大提升編碼效率,本文會(huì)對(duì)涉及的對(duì)象等進(jìn)行兩種方法的對(duì)比,對(duì)新技術(shù)更直白的看到變化,更方便學(xué)習(xí)
    2021-06-06
  • Java基礎(chǔ)之spring5新功能學(xué)習(xí)

    Java基礎(chǔ)之spring5新功能學(xué)習(xí)

    這篇文章主要介紹了Java基礎(chǔ)之spring5新功能學(xué)習(xí),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • IDEA啟動(dòng)Tomcat報(bào)Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED的解決方法

    IDEA啟動(dòng)Tomcat報(bào)Unrecognized option: --add-opens=java

    這篇文章主要為大家介紹了解決IDEA啟動(dòng)Tomcat報(bào)Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED的方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • MyBatis多對(duì)多映射初識(shí)教程

    MyBatis多對(duì)多映射初識(shí)教程

    這篇文章重點(diǎn)給大家介紹mybatis多對(duì)多映射,多對(duì)多映射的例子也很常見,本文通過代碼實(shí)例相結(jié)合的方式給大家介紹mybatis多對(duì)多映射,需要的朋友參考下吧
    2016-08-08
  • gateway網(wǎng)關(guān)與前端請(qǐng)求跨域問題的解決方案

    gateway網(wǎng)關(guān)與前端請(qǐng)求跨域問題的解決方案

    這篇文章主要介紹了gateway網(wǎng)關(guān)與前端請(qǐng)求跨域問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

信宜市| 萨嘎县| 杭锦后旗| 兴安县| 甘孜| 深州市| 深水埗区| 山东省| 湖南省| 弋阳县| 永年县| 永顺县| 沛县| 周至县| 海盐县| 平安县| 博兴县| 江阴市| 增城市| 金平| 安阳市| 玉树县| 嫩江县| 龙门县| 昌邑市| 百色市| 马龙县| 耿马| 融水| 通河县| 南开区| 海城市| 广安市| 咸宁市| 濮阳县| 建德市| 滦平县| 资阳市| 东宁县| 工布江达县| 巴彦淖尔市|