當前位置:生活全書館 >

IT科技

> 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的配置命令。

gradle與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的依賴情況。

gradle與maven的區別 第2張

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檔案裡新增自己獨有的配置。

gradle與maven的區別 第3張

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 }

標籤: gradle maven
  • 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/dianzi/yq0o41.html