當前位置:生活全書館 >

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 }

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