gradle和maven的區(qū)別是什么呢?不知道的小伙伴來(lái)看看小編今天的分享吧!
1、基礎(chǔ)配置信息區(qū)別:
maven使用.pom文件,基于XML,gradle使用.gradle文件,基于Groovy,gradle去掉maven中需要固定配置的groupId,artfactId,package等基本參數(shù),通過(guò) apply plugin: 'java',apply plugin: 'war'來(lái)表示打包方式,也提供sourceCompatibility,version等一些實(shí)用的標(biāo)簽。
2、依賴(lài)管理區(qū)別:
Gradle的jar包管理支持maven下Repository方式,也支持Ant的Ivy方式,由于maven的Repository已經(jīng)非常成熟,gradle在兼容Repository做得非常方便,定義maven的repository:
mavenLocal() :maven 本地庫(kù)
mavenCentral() : maven 遠(yuǎn)程庫(kù)
mavenRepo urls: 自定義庫(kù)路徑
maven通過(guò)groupId、name和version到配置的Repository里尋找指定依賴(lài)中的Jar包。Gradle的生命周期更為復(fù)雜,但也支持Maven依賴(lài)中的構(gòu)建生命周期,compile、runtime、testCompile和testRuntime分別對(duì)應(yīng)項(xiàng)目不同階段的依賴(lài)。 并且還簡(jiǎn)化maven的配置命令。
Maven:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
Gradle:
dependencies { testCompile group:'junit', name: 'junit', version '4.11'}
或者
dependencies { testCompile 'junit:junit:4.11' }
如果需要引用自己lib目錄下jar包,maven需要在每個(gè)依賴(lài)加上<scope> 和<systemPath>標(biāo)簽或者在plugin里單獨(dú)增加編譯路徑。而Gradle只需要加上
compile fileTree(dir: 'libs', include: '*.jar'),在多個(gè)路徑下時(shí):
jarTree = fileTree(dir: 'libs', include: '*.jar')
rootTree = new File(rootProject.rootDir, 'libs').getAbsolutePath()
jarTree += fileTree(dir: rootTree, include: '*.jar')
compile jarTree
在依賴(lài)相關(guān)的命令行方面,gradle與maven比較相似,maven常用的分析依賴(lài)命令包括:
mvn dependency:analyz查看依賴(lài);
mvn dependency:tree 查看項(xiàng)目直接和傳遞依賴(lài);
mvn help:effective-pom查看有效的pom;
在gradle中使用gradle dependencies 可以查看項(xiàng)目中包的依賴(lài)關(guān)系。加上-configuration來(lái)查看指定階段的依賴(lài)情況,還可以-dependency來(lái)查看指定jar的依賴(lài)情況。
3、多項(xiàng)目管理區(qū)別:
實(shí)際使用中,往往需要管理的都不是單單一個(gè)項(xiàng)目,maven使用依賴(lài),繼承,組成的概念,在父模塊指定自己的子模塊,并且準(zhǔn)備一些各個(gè)子模塊公用的資源,如插件,配置信息等等。將打包的模塊與實(shí)現(xiàn)具體功能的模塊分開(kāi)的做法來(lái)管理多個(gè)項(xiàng)目。Gradle在這一方面做得更加清楚,劃分更明確,學(xué)習(xí)gradle的多項(xiàng)目管理也很容易,在eclipse中安裝完gradle插件之后,新建一個(gè)Gradle工程,選擇flat-java-multiproject,生成的工程就是多項(xiàng)目管理一個(gè)示例。
Gradle通過(guò)settings.gradle文件來(lái)指定工程的子項(xiàng)目,在構(gòu)建的初始化階段(Initialization),Gradle會(huì)根據(jù)settings.gradle 文件來(lái)判斷有哪些子項(xiàng)目被include到了構(gòu)建中,并為每一個(gè)子項(xiàng)目初始化一個(gè)Project對(duì)象,在構(gòu)建腳本中通過(guò)project(‘:sub-project-name’)來(lái)引用子項(xiàng)目對(duì)應(yīng)的Project對(duì)象。關(guān)于多項(xiàng)目配置有非常多,因此就簡(jiǎn)述一下常用的配置共享以及配置獨(dú)享。
Allprojects屬性,返回該P(yáng)roject對(duì)象以及其所有子項(xiàng)目。
subprojects屬性,返回該P(yáng)roject所有子項(xiàng)目。
project(‘:sub-project-name’)來(lái)設(shè)置對(duì)應(yīng)的子項(xiàng)目的配置。
configure(subprojects.findAll {it.name.contains('XXX')})來(lái)找符合要求的子項(xiàng)目。
在子項(xiàng)目的build.gradle文件里添加自己獨(dú)有的配置。
4、任務(wù)機(jī)制區(qū)別:
Maven相對(duì)于ant相比僅僅通過(guò)plugin提供任務(wù)機(jī)制,相比而言自由度小而且很難擴(kuò)展,每定義一個(gè)功能都需要寫(xiě)一個(gè)插件,Ant中使用tagret標(biāo)簽的echo來(lái)指定命令,gradle使用groovy語(yǔ)言,自帶task概念,與ant使用的build文件更加接近。一個(gè)Task表示一個(gè)邏輯上的執(zhí)行單元。
Gradle編寫(xiě)task的方式有很多,網(wǎng)上也能很容易搜索到相關(guān)的例子,在此簡(jiǎn)述有關(guān)task的一些實(shí)用命令以及自己一個(gè)常用的task:
Task listJars(description: 'Display compile jars.') << {
configurations.compile.each { File file -> println file.name }
以上就是小編今天的分享了,希望可以幫助到大家。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com