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

Gradle相對(duì)于Maven有哪些優(yōu)點(diǎn)

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

一、Gradle介紹

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

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

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

二、依賴(lài)管理

通常的Maven項(xiàng)目有一個(gè)單一的依賴(lài)的靜態(tài)配置, 所以一個(gè)項(xiàng)目應(yīng)該只有一個(gè)單一的Artifact。 因此其具備了簡(jiǎn)單的特點(diǎn)但同時(shí)也由于單一缺乏彈性。 Gradle在這方面的更靈活, 可以在創(chuàng)建和處理的時(shí)候有多套依賴(lài)配置。這里我們舉一個(gè)例子,原本的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)配置代碼減少為原來(lái)的四分之一。這還不算我省略的一些父POM配置。最重要的是依賴(lài)的groupId、artifactId、 version,scope甚至是classfier,一點(diǎn)都不少。并且Gradle能夠解析現(xiàn)有的Maven POM或者Ivy的XML配置,從而得到傳遞性以來(lái)的信息,并且引入到當(dāng)前項(xiàng)目中,它也支持排除傳遞性依賴(lài)或者干脆關(guān)閉傳遞性依賴(lài),Gradle當(dāng)你排除一項(xiàng)任務(wù)時(shí),所有依賴(lài)于此任務(wù)的任務(wù)都會(huì)自動(dòng)被排除如果他們之間沒(méi)有其他依賴(lài)關(guān)系,這是Maven所不具備的特性。

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

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

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

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

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

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

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

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

相關(guān)文章

  • Java Spring Bean的生命周期管理詳解

    Java Spring Bean的生命周期管理詳解

    這篇文章主要為大家介紹了Java Spring Bean的生命周期管理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • java實(shí)戰(zhàn)案例之用戶(hù)注冊(cè)并發(fā)送郵件激活/發(fā)送郵件驗(yàn)證碼

    java實(shí)戰(zhàn)案例之用戶(hù)注冊(cè)并發(fā)送郵件激活/發(fā)送郵件驗(yàn)證碼

    現(xiàn)在很多的網(wǎng)站都提供有用戶(hù)注冊(cè)功能,當(dāng)我們注冊(cè)成功之后就會(huì)收到封注冊(cè)網(wǎng)站的郵件,郵件里包含了我們的注冊(cè)的用戶(hù)名和密碼及激活賬戶(hù)的超鏈接等信息,這篇文章主要給大家介紹了關(guān)于java實(shí)戰(zhàn)案例之用戶(hù)注冊(cè)并發(fā)送郵件激活/發(fā)送郵件驗(yàn)證碼的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • java中 spring 定時(shí)任務(wù) 實(shí)現(xiàn)代碼

    java中 spring 定時(shí)任務(wù) 實(shí)現(xiàn)代碼

    java中 spring 定時(shí)任務(wù) 實(shí)現(xiàn)代碼,需要的朋友可以參考一下
    2013-03-03
  • Springcloud中的@RefreshScope的實(shí)現(xiàn)

    Springcloud中的@RefreshScope的實(shí)現(xiàn)

    @RefreshScope注解是Spring Cloud中的一個(gè)注解,它用來(lái)實(shí)現(xiàn)Bean中屬性的動(dòng)態(tài)刷新,本文就來(lái)介紹一下@RefreshScope注解的使用,感興趣的可以了解一下
    2024-06-06
  • Junit測(cè)試多線(xiàn)程無(wú)法得到結(jié)果的問(wèn)題解決

    Junit測(cè)試多線(xiàn)程無(wú)法得到結(jié)果的問(wèn)題解決

    在測(cè)試一個(gè)文件轉(zhuǎn)換工具類(lèi)的時(shí)候,發(fā)生一個(gè)有趣的現(xiàn)象,同樣的輸入,使用Main函數(shù)可以正確解析,得到結(jié)果,使用Junit卻無(wú)法得到結(jié)果,神奇的是,即使捕獲Throwable,也無(wú)法捕獲到仍和異常。
    2021-05-05
  • java排序算法之選擇排序詳解

    java排序算法之選擇排序詳解

    這篇文章主要為大家詳細(xì)介紹了java排序算法之選擇排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • maven中pom.xml詳細(xì)介紹

    maven中pom.xml詳細(xì)介紹

    最近在學(xué)習(xí)maven,這篇文章主要介紹了maven中pom.xml詳細(xì)介紹,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • 詳解Java的位操作符

    詳解Java的位操作符

    位操作就是對(duì)這些數(shù)據(jù)進(jìn)行基本的操作。如果基本類(lèi)型是char、byte或者short類(lèi)型的數(shù)值進(jìn)行移位處理,那么會(huì)轉(zhuǎn)化成int類(lèi)型,再進(jìn)行移位的處理
    2017-09-09
  • Java 添加、替換、刪除PDF中的圖片的示例代碼

    Java 添加、替換、刪除PDF中的圖片的示例代碼

    這篇文章主要介紹了Java 添加、替換、刪除PDF中的圖片,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 全面了解JAVA_BaseDAO數(shù)據(jù)處理類(lèi)

    全面了解JAVA_BaseDAO數(shù)據(jù)處理類(lèi)

    下面小編就為大家?guī)?lái)一篇全面了解JAVA_BaseDAO數(shù)據(jù)處理類(lèi)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07

最新評(píng)論