亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Gradle相對于Maven有哪些優(yōu)點

 更新時間:2020年10月12日 11:38:01   作者:Echo  
這篇文章主要介紹了Gradle相對于Maven有哪些優(yōu)點,幫助大家選擇合適的自動構(gòu)建工具,更好的構(gòu)建項目,感興趣的朋友可以了解下

一、Gradle介紹

Gradle和Maven作為自動構(gòu)建工具,在項目的構(gòu)建中有著廣泛的應(yīng)用。他們之間有各自的優(yōu)缺點,這里我們討論下他們在項目構(gòu)建中的一些區(qū)別并進行比較。

首先簡單介紹下Gradle和Maven。Maven主要服務(wù)于基于java平臺的項目構(gòu)建、依賴管理和項目信息管理。無論是小型的開源類庫項目,還是大型的企業(yè)級應(yīng)用;無論是傳統(tǒng)的瀑布式開發(fā)還是流行的敏捷模式,Maven都能大顯身手。Gradle是以groovy語言為基礎(chǔ),面向java應(yīng)用為主,基于DSL語法的自動化構(gòu)建工具。

雖然兩種構(gòu)建工具有著很多相似處,但是在依賴管理、構(gòu)建生命周期、加載構(gòu)建系統(tǒng)組件等許多方面兩者有著許多區(qū)別。Maven使用XML來定義生成腳本,而 Gradle構(gòu)建腳本是用Groovy。 用XML的優(yōu)勢在于它可以更方便地定義構(gòu)建邏輯,但這是比較復(fù)雜的步驟。 用Groovy的好處是寫起來比XML標簽要簡潔許多。 不過熟悉的XML的開發(fā)人員比groovy的多,并且復(fù)雜的邏輯必須由自己編寫。類似于Maven的pom.xml文件,每個Gradle項目都需要有一個對應(yīng)的build.gradle文件,該文件定義一些任務(wù)(task)來完成構(gòu)建工作,當(dāng)然,每個任務(wù)是可配置的,任務(wù)之間也可以依賴,用戶亦能配置缺省任務(wù)。

二、依賴管理

通常的Maven項目有一個單一的依賴的靜態(tài)配置, 所以一個項目應(yīng)該只有一個單一的Artifact。 因此其具備了簡單的特點但同時也由于單一缺乏彈性。 Gradle在這方面的更靈活, 可以在創(chuàng)建和處理的時候有多套依賴配置。這里我們舉一個例子,原本的Maven POM配置是:

<properties>
 <kaptcha.version>2.3</kaptcha.version>
</properties>

<dependencies>
 <dependency>
  <groupId>com.google.code.kaptcha</groupId>
  <artifactId>kaptcha</artifactId>
  <version>${kaptcha.version}</version>
  <classifier>jdk15</classifier>
 </dependency>
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
 </dependency>
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-beans</artifactId>
 </dependency>
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
 </dependency>
 <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
 </dependency>
</dependencies>

然后我將其轉(zhuǎn)換成Gradle腳本,結(jié)果是驚人的:

dependencies {
 compile('org.springframework:spring-core:2.5.6')
 compile('org.springframework:spring-beans:2.5.6')
 compile('org.springframework:spring-context:2.5.6')
 compile('com.google.code.kaptcha:kaptcha:2.3:jdk15')
 testCompile('junit:junit:4.7')
}

我們可以發(fā)現(xiàn)配置代碼減少為原來的四分之一。這還不算我省略的一些父POM配置。最重要的是依賴的groupId、artifactId、 version,scope甚至是classfier,一點都不少。并且Gradle能夠解析現(xiàn)有的Maven POM或者Ivy的XML配置,從而得到傳遞性以來的信息,并且引入到當(dāng)前項目中,它也支持排除傳遞性依賴或者干脆關(guān)閉傳遞性依賴,Gradle當(dāng)你排除一項任務(wù)時,所有依賴于此任務(wù)的任務(wù)都會自動被排除如果他們之間沒有其他依賴關(guān)系,這是Maven所不具備的特性。

三、加載構(gòu)建系統(tǒng)的組件

Maven中每個用于構(gòu)建的組件(編譯/jar等)都作為一個插件, 每個插件都有它自己的版本和依賴關(guān)系樹。 Gradle的構(gòu)建系統(tǒng)組件都是分散的。 Maven插件的優(yōu)點是在于可以獨立更新,無需整個系統(tǒng)更新。Gradle的模型的優(yōu)點是編譯需要核心組件以外的組件時才下載。與此同時Gradle給了用戶足夠的自由去定義自己的任務(wù),Gradle每個任務(wù)都有一個描述,可以分配到一個組。Maven中插件和命令可以描述。比如Gradle你可以排除任何運行的任務(wù)。在Maven中沒有通用的排除機制,必須用插件來實現(xiàn)它。而且Gradle具有高級任務(wù)排序的特性,任務(wù)之間的依賴關(guān)系被建立之后能夠得到完全控制,因為Gradle具有強大的語言結(jié)構(gòu)來描述任務(wù)之間的執(zhí)行順序,即使任務(wù)并不取決于對方的輸出。Gradle支持動態(tài)任務(wù)創(chuàng)建,有時你想要一個任務(wù)的行為取決于或無限價值的大范圍的參數(shù)。一個很好的表達方式提供這樣的任務(wù)是任務(wù)規(guī)則。并且執(zhí)行任務(wù)時,Gradle 在遇到第一次失敗時不停止,執(zhí)行每一個要執(zhí)行的任務(wù)其中所有的任務(wù)依賴關(guān)系都要被完成且沒有失敗。任務(wù)可以被分配去完成其他任務(wù)類似于java中的終結(jié)原則。他們總是在另一個任務(wù)執(zhí)行之后運行,不管這個任務(wù)是否失敗了??梢园l(fā)現(xiàn)在一個單一的執(zhí)行中許多失敗任務(wù)會被很好地記錄成一個錯誤報告并最終被匯總。

四、構(gòu)建生命周期

Maven提供有限的構(gòu)建生命周期訪問,插件可以連接到生命周期的特定階段,而且只有在核心插件執(zhí)行。而Gradle可以訪問生成的一部分并允許用Groovy代碼進行處理。Gradle Java Plugin也定義了構(gòu)建生命周期,包括編譯主代碼、處理資源、編譯測試代碼、執(zhí)行測試、上傳歸檔等等任務(wù),Gradle的構(gòu)建生命周期如下圖:

相對于Maven完全線性的生命周期,Gradle的構(gòu)建生命周期略微復(fù)雜,不過也更為靈活,例如jar這個任務(wù)是用來打包的,它不像Maven那樣依賴于執(zhí)行測試的test任務(wù),類似的,從圖中可以看到,一個最終的build任務(wù)也沒有依賴于uploadArchives任務(wù)。這個生命周期并沒有將用戶限制得很死,由于Gradle完全是基于靈活的任務(wù)模型,因此很多事情包括覆蓋現(xiàn)有任務(wù),跳過任務(wù)都非常易于實現(xiàn)。而這些事情,在Maven的世界中,實現(xiàn)起來就比較的麻煩,或者說Maven就不希望用戶這么做。

除了以上幾個Maven核心內(nèi)容與Gradle的區(qū)別,在面向?qū)ο筝敵瞿J?,GUI操作界面、聲明元素等方面Gradle也有良好表現(xiàn)。構(gòu)建輸出是構(gòu)建用戶體驗的重要部分。在其他大多數(shù)構(gòu)建工具中默認輸出對于一個構(gòu)建作者試圖調(diào)試一個問題來說是有關(guān)聯(lián)的。這通常會導(dǎo)致一個非常詳細的輸出會隱藏重要的警告和消息實際上是相關(guān)的開發(fā)人員運行構(gòu)建。Gradle的默認輸出是針對開發(fā)人員運行構(gòu)建和只顯示消息相關(guān)的情況下而不是濫用日志輸出作為一種進度,例如在執(zhí)行測試的時候。構(gòu)建輸出為構(gòu)建用戶體驗是非常重要的。如果你與外部工具和庫集成他們的控制臺輸出可能非常冗長。Gradle系統(tǒng)中你可以定義每個外部工具結(jié)合的日志級別的輸出應(yīng)該被路由。Gradle提供GUI操作界面,這是一個獨立的用戶界面,可以啟動GUI選項,通過自定義日志模式你可以替換它的日志與自己的UI。Gradle有許多細粒度的聲明性元素,如SourceSets或Android Product Flavors。它們的核心Gradle DSL然后讓Gradle構(gòu)建語言更加豐富。他們不斷構(gòu)建簡潔、易于使用、維護和理解即使你有復(fù)雜的需求。Maven沒有細粒聲明元素,這是Maven極端頑固的主要原因。在Gradle,每個插件都可以提供自己的粗或細粒聲明元素。這使你可以提供一個聲明性方法甚至定制域。它還允許其他技術(shù)集成在Gradle中,讓它被更多人使用。

整體來講,Gradle給人一種簡潔靈活的體驗,然而必須掌握groovy也是他的問題,而且由于其靈活性,導(dǎo)致人們更容易破壞約定以至于讓構(gòu)建變得難以理解。但是Gradle確實是Maven理念的優(yōu)秀實現(xiàn)。如果足夠了解Groovy,也理解Maven的配置和構(gòu)建,Gradle會是絕佳選擇,尤其是它幾乎能和現(xiàn)有的Maven系統(tǒng)無縫集成,而且你也能享受到簡潔帶來的極大樂趣,相信Gradle作為后起之秀在今后能夠被完善的更好。

以上就是Gradle相對于Maven有哪些優(yōu)點的詳細內(nèi)容,更多關(guān)于Gradle和Maven的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringCloud負載均衡實現(xiàn)定向路由詳情

    SpringCloud負載均衡實現(xiàn)定向路由詳情

    這篇文章主要介紹了SpringCloud負載均衡實現(xiàn)定向路由詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • SpringBoot+Hutool+thymeleaf完成導(dǎo)出Excel的實現(xiàn)方法

    SpringBoot+Hutool+thymeleaf完成導(dǎo)出Excel的實現(xiàn)方法

    這篇文章主要介紹了SpringBoot+Hutool+thymeleaf完成導(dǎo)出Excel,本篇示例當(dāng)中不僅僅有后端,而且還提供了前端html,html當(dāng)中利用js將后端 輸出流直接下載為文件,需要的朋友可以參考下
    2022-03-03
  • springboot整合mybatis實現(xiàn)多表查詢的實戰(zhàn)記錄

    springboot整合mybatis實現(xiàn)多表查詢的實戰(zhàn)記錄

    SpringBoot對數(shù)據(jù)庫操作有多種方式,下面這篇文章主要給大家介紹了關(guān)于springboot整合mybatis實現(xiàn)多表查詢的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • 詳解Java項目中讀取properties文件

    詳解Java項目中讀取properties文件

    本篇文章主要介紹了Java項目中讀取properties文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • Java接口和抽象類用法實例總結(jié)

    Java接口和抽象類用法實例總結(jié)

    這篇文章主要介紹了Java接口和抽象類用法,結(jié)合實例形式總結(jié)分析了Java接口與抽象類的具體定義、使用技巧與相關(guān)注意事項,需要的朋友可以參考下
    2015-12-12
  • java版十大排序經(jīng)典算法:完整代碼(3)

    java版十大排序經(jīng)典算法:完整代碼(3)

    優(yōu)秀的文章也不少,但是Java完整版的好像不多,我把所有的寫一遍鞏固下,同時也真誠的希望閱讀到這篇文章的小伙伴們可以自己去從頭敲一遍,不要粘貼復(fù)制!希望我的文章對你有所幫助,每天進步一點點
    2021-07-07
  • Java實現(xiàn)批量操作Excel的示例詳解

    Java實現(xiàn)批量操作Excel的示例詳解

    在操作Excel的場景中,通常會有一些針對Excel的批量操作,以GcExcel為例,為大家詳細介紹一下Java是如何實現(xiàn)批量操作Excel的,需要的可以參考一下
    2023-07-07
  • java如何將Object數(shù)組轉(zhuǎn)換為指定類型數(shù)組

    java如何將Object數(shù)組轉(zhuǎn)換為指定類型數(shù)組

    這篇文章主要介紹了java如何將Object數(shù)組轉(zhuǎn)換為指定類型數(shù)組,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 在IntelliJ IDEA中使用gulp的方法步驟(圖文)

    在IntelliJ IDEA中使用gulp的方法步驟(圖文)

    這篇文章主要介紹了在IntelliJ IDEA中使用gulp的方法步驟(圖文),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • SpringBoot使用AOP與注解實現(xiàn)請求參數(shù)自動填充流程詳解

    SpringBoot使用AOP與注解實現(xiàn)請求參數(shù)自動填充流程詳解

    面向切面編程(aspect-oriented programming,AOP)主要實現(xiàn)的目的是針對業(yè)務(wù)處理過程中的切面進行提取,諸如日志、事務(wù)管理和安全這樣的系統(tǒng)服務(wù),從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率
    2023-02-02

最新評論