maven和gradle有什麼區別
1、基礎配置信息區別:
maven使用.pom文件,基於XML,gradle使用.gradle文件,基於Groovy,gradle去掉maven中需要固定配置的groupId,artfactId,package等基本參數,通過 apply plugin: 'java',apply plugin: 'war'來表示打包方式,也提供sourceCompatibility,version等一些實用的標籤。
2、依賴管理區別:
Gradle的jar包管理支持maven下Repository方式,也支持Ant的Ivy方式,由於maven的Repository已經非常成熟,gradle在兼容Repository做得非常方便,定義maven的repository:
mavenLocal() :maven 本地庫
mavenCentral() : maven 遠程庫
mavenRepo urls: 自定義庫路徑
maven通過groupId、name和version到配置的Repository裏尋找指定依賴中的Jar包。Gradle的生命週期更爲複雜,但也支持Maven依賴中的構建生命週期,compile、runtime、testCompile和testRuntime分別對應項目不同階段的依賴。 並且還簡化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需要在每個依賴加上<scope> 和<systemPath>標籤或者在plugin裏單獨增加編譯路徑。而Gradle只需要加上
compile fileTree(dir: 'libs', include: '*.jar'),在多個路徑下時:
jarTree = fileTree(dir: 'libs', include: '*.jar')
rootTree = new File(rootProject.rootDir, 'libs').getAbsolutePath()
jarTree += fileTree(dir: rootTree, include: '*.jar')
compile jarTree
在依賴相關的命令行方面,gradle與maven比較相似,maven常用的分析依賴命令包括:
mvn dependency:analyz查看依賴;
mvn dependency:tree 查看項目直接和傳遞依賴;
mvn help:effective-pom查看有效的pom;
在gradle中使用gradle dependencies 可以查看項目中包的依賴關係。加上-configuration來查看指定階段的依賴情況,還可以-dependency來查看指定jar的依賴情況。
3、多項目管理區別:
實際使用中,往往需要管理的都不是單單一個項目,maven使用依賴,繼承,組成的概念,在父模塊指定自己的子模塊,並且準備一些各個子模塊公用的資源,如插件,配置信息等等。將打包的模塊與實現具體功能的模塊分開的做法來管理多個項目。Gradle在這一方面做得更加清楚,劃分更明確,學習gradle的多項目管理也很容易,在eclipse中安裝完gradle插件之後,新建一個Gradle工程,選擇flat-java-multiproject,生成的工程就是多項目管理一個示例。
Gradle通過settings.gradle文件來指定工程的子項目,在構建的初始化階段(Initialization),Gradle會根據settings.gradle 文件來判斷有哪些子項目被include到了構建中,併爲每一個子項目初始化一個Project對象,在構建腳本中通過project(‘:sub-project-name’)來引用子項目對應的Project對象。關於多項目配置有非常多,因此就簡述一下常用的配置共享以及配置獨享。
Allprojects屬性,返回該Project對象以及其所有子項目。
subprojects屬性,返回該Project所有子項目。
project(‘:sub-project-name’)來設置對應的子項目的配置。
configure(subprojects.findAll {it.name.contains('XXX')})來找符合要求的子項目。
在子項目的build.gradle文件裏添加自己獨有的配置。
4、任務機制區別:
Maven相對於ant相比僅僅通過plugin提供任務機制,相比而言自由度小而且很難擴展,每定義一個功能都需要寫一個插件,Ant中使用tagret標籤的echo來指定命令,gradle使用groovy語言,自帶task概念,與ant使用的build文件更加接近。一個Task表示一個邏輯上的執行單元。
Gradle編寫task的方式有很多,網上也能很容易搜索到相關的例子,在此簡述有關task的一些實用命令以及自己一個常用的task:
Task listJars(description: 'Display compile jars.') << {
configurations.compile.each { File file -> println file.name }
-
小米手機返回鍵不能返回怎麼辦
如果我們小米手機的返回鍵失去作用了,可以使用懸浮球裏的返回鍵進行各種操作,具體方法如下:1、在自己的手機桌面上找到設置圖標,點擊打開。2、找到【更多設置】的選項,點擊打開。3、在更多設置的界面,找到【懸浮球】選項,點擊打開。4、在懸浮球的主界面,找到【自定義菜...
-
蘋果手機長圖怎麼截圖
1、長截圖辦法一iOS13上新之後自帶的長截圖方法,是在我們瀏覽網頁的時候使用的。操作方法:上音量鍵+開關鍵一起按下,然後點開截好的圖片,選擇“整頁”截圖即可。2、長截圖方法二利用QQ實現長截圖。操作方法:首先就是需要我們打開QQ,然後試着上音量鍵+開關鍵一起按下...
-
爲什麼要樹立正確的人生觀
1、因爲人生觀決定着人生道路的方向,以及決定着人們行爲選擇的價值取向和用什麼樣的方式對待實際生活。對於國家來講,我國正處於全面建成小康社會、加快推進社會主義現代化強國、實現中華民族偉大復興的實踐過程,我們只有把自己的人生目的與國家前途、民族命運、...
-
公交車多功能支付終端刷卡機怎樣才能刷多種,掃碼支付公交費一卡通多功能刷卡機
1、乘客乘車刷卡時,將手機支付費用二維碼靠近刷卡設備(車載刷卡收費機,下文簡稱車載機)的掃描區,車載機對二維碼進行識別後,識別通過後進行扣費,上述操作完成,車載機完成了對乘客的收費,乘客可以搭乘汽車。2、乘客刷卡乘車後,車載機主機完成相應的扣款並存儲相應的消費...