...">
瀏覽量:146次
gradle和maven的區(qū)別是什么呢?不知道的小伙伴來(lái)看看陽(yáng)泰小編今天的分享吧!
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、依賴管理區(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里尋找指定依賴中的Jar包。Gradle的生命周期更為復(fù)雜,但也支持Maven依賴中的構(gòu)建生命周期,compile、runtime、testCompile和testRuntime分別對(duì)應(yīng)項(xiàng)目不同階段的依賴。 并且還簡(jiǎn)化maven的配置命令。
Maven:
Gradle:
dependencies {? ? testCompile group:'junit', name: 'junit', version '4.11'}
或者
dependencies {? ? testCompile 'junit:junit:4.11'? ? }
如果需要引用自己lib目錄下jar包,maven需要在每個(gè)依賴加上
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
在依賴相關(guān)的命令行方面,gradle與maven比較相似,maven常用的分析依賴命令包括:
mvn dependency:analyz查看依賴;
mvn dependency:tree 查看項(xiàng)目直接和傳遞依賴;?
mvn help:effective-pom查看有效的pom;
在gradle中使用gradle dependencies 可以查看項(xiàng)目中包的依賴關(guān)系。加上-configuration來(lái)查看指定階段的依賴情況,還可以-dependency來(lái)查看指定jar的依賴情況。
3、多項(xiàng)目管理區(qū)別:
實(shí)際使用中,往往需要管理的都不是單單一個(gè)項(xiàng)目,maven使用依賴,繼承,組成的概念,在父模塊指定自己的子模塊,并且準(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)轉(zhuǎn)載網(wǎng)絡(luò)媒體稿件是為了傳播更多的信息,此類稿件不代表本網(wǎng)觀點(diǎn),本網(wǎng)不承擔(dān)此類稿件侵權(quán)行為的連帶責(zé)任。故此,如果您發(fā)現(xiàn)本網(wǎng)站的內(nèi)容侵犯了您的版權(quán),請(qǐng)您的相關(guān)內(nèi)容發(fā)至此郵箱【779898168@qq.com】,我們?cè)诖_認(rèn)后,會(huì)立即刪除,保證您的版權(quán)。
官網(wǎng)優(yōu)化
整站優(yōu)化
渠道代理
400-655-5776