gradle和maven的區別
gradle和maven的區別是什麼呢?不知道的小夥伴來看看小編今天的分享吧!
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 }
以上就是小編今天的分享了,希望可以幫助到大家。