Java中的maven和gradle的比較與使用詳解
1 構(gòu)建工具的簡(jiǎn)單介紹
在代碼世界中有三大構(gòu)建工具,ant、Maven和Gradle。現(xiàn)在的狀況是maven和gradle并存,gradle使用的越來(lái)越廣泛。Maven使用基于XML的配置,Gradle采用了領(lǐng)域特定語(yǔ)言Groovy的配置。在Maven中要引入一個(gè)依賴,如下面的例子:
<properties> <kaptcha.version>2.3</kaptcha.version> </properties> <dependencies> <dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId>kaptcha</artifactId> <version>${kaptcha.version}</version> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies>
而想要在gradle中達(dá)到相同的效果,代碼如下:
dependencies { compile('org.springframework:spring-core:2.5.6') compile('org.springframework:spring-beans:2.5.6') compile('org.springframework:spring-context:2.5.6') compile('com.google.code.kaptcha:kaptcha:2.3:jdk15') testCompile('junit:junit:4.7') }
2 maven、gradle的簡(jiǎn)單使用方法
2.1 創(chuàng)建maven項(xiàng)目
想要?jiǎng)?chuàng)建maven項(xiàng)目,首先我們需要搭建maven環(huán)境
以eclipse為例來(lái)搭建maven環(huán)境并創(chuàng)建maven項(xiàng)目
2.1.1 安裝eclipse
這一步很簡(jiǎn)單,就不再闡述
2.1.2 安裝maven
首先進(jìn)入maven官網(wǎng),下載maven,我下載的是3.5
下載完后,解壓到本地磁盤中,我解壓到了D:ProjectJavaapache-maven-3.5.0。
為了方便起見(jiàn),把maven配置到系統(tǒng)路徑中,新建一個(gè)名為MAVEN_HOME的系統(tǒng)變量
然后再在Path中添加%MAVEN_HOME%in
2.1.3 配置maven
maven的默認(rèn)倉(cāng)庫(kù)位置是當(dāng)前用戶工作目錄下的“.m2/repository”,我們將位置換到C盤外的位置。通過(guò)修改Maven安裝目錄下的conf子目錄中settings.xml,添加一條下面的語(yǔ)句<localRepository>D:/m2/repository</localRepository>
將中間的值替換成你自己的想要存放的位置
同時(shí)還可以添加中央倉(cāng)庫(kù)的鏡像
在中添加
<mirror> <!--This sends everything else to /public --> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror> <mirror> <!--This is used to direct the public snapshots repo in the profile below over to a different nexus group --> <id>nexus-public-snapshots</id> <mirrorOf>public-snapshots</mirrorOf> <url>http://maven.aliyun.com/nexus/content/repositories/snapshots/</url> </mirror>
最后復(fù)制一份settings.xml到D:/m2中去,我的倉(cāng)庫(kù)是D:/m2/repository,換成你自己的位置
2.1.4 eclipse安裝m2eclipse插件
Eclipse默認(rèn)不支持Maven。需要給它添加m2eclipse插件。下面是具體的操作步驟。
依次選擇Eclipse菜單欄的“Help”菜單“Instance NewSoftWare”菜單項(xiàng),就會(huì)彈出如下對(duì)話窗口:
選擇“Add…”按鈕,又會(huì)彈出如下對(duì)話框:
這個(gè)對(duì)話框就是用于添加一個(gè)插件地址的。在“Name”對(duì)應(yīng)的輸入框里輸入該操作的一個(gè)標(biāo)識(shí)名。在“Location”對(duì)應(yīng)的輸入框里輸入這個(gè)插件的安裝地址。注:Maven的Eclipse插件地址為:http://download.eclipse.org/technology/m2e/releases。輸入后,如下圖所示:
輸入完成后,點(diǎn)擊右下角的“OK”按鈕,就會(huì)彈出如下對(duì)話框:
這里需要選擇想要安裝的插件的詳細(xì)內(nèi)容。選中“Maven Integration for Eclipse”前面的復(fù)選框。如下圖所示:
選擇完成后,點(diǎn)擊右下方的“Next>”按鈕進(jìn)行安裝。安裝成功后,會(huì)提示需要重啟Eclipse來(lái)生效這次配置。重啟之后,這個(gè)Eclipse就可以使用m2eclipse插件功能了。
2.1.5 m2eclipse插件設(shè)置
依次選擇Eclipse菜單欄的的”Window”“Preferences”菜單項(xiàng),就會(huì)彈出如下對(duì)話框:
在這個(gè)對(duì)話框左邊的導(dǎo)航欄中展開(kāi)“Maven”目錄結(jié)點(diǎn),并選擇“Installations”子節(jié)點(diǎn),通過(guò)”Add”來(lái)添加maven。如下圖所示:
設(shè)置自定義的本地倉(cāng)庫(kù),選擇如上圖對(duì)話窗口左邊菜單樹 “Maven”節(jié)點(diǎn)下的“UserSettings”子節(jié)點(diǎn),修改Global Settings以及User Settings如下圖所示:
2.1.6 創(chuàng)建maven項(xiàng)目
m2eclispe插件中默認(rèn)提供了一些Maven樣板項(xiàng)目,可以使用這些樣板來(lái)創(chuàng)建符合我們要求的項(xiàng)目。具體操作如下步驟:
在eclipse菜單欄中選擇“File”“News”“Other”菜單項(xiàng),就會(huì)打開(kāi)如下對(duì)話窗口,在窗口中選擇“Maven”節(jié)點(diǎn)下“Maven Project”條目,如下圖所示:
點(diǎn)擊“Next>”按鈕,進(jìn)入如下窗口:
再次選擇“Next >”按鈕,進(jìn)入如下窗口:
在這個(gè)窗口中選擇“maven-archetype-webapp”來(lái)創(chuàng)建一個(gè)Maven的web項(xiàng)目,再選擇“Next>”按鈕,進(jìn)入如下圖窗口:
在上圖窗口的“Group Id”中輸入項(xiàng)目的基本包名,在“Artifact Id”中輸入項(xiàng)目名,其它輸入框不用理會(huì)。點(diǎn)擊“Finish”按鈕來(lái)完成項(xiàng)目的整個(gè)創(chuàng)建過(guò)程。
創(chuàng)建完成后的maven的web項(xiàng)目,可以轉(zhuǎn)化成正常的javaweb工程。 教你如何用Eclipse創(chuàng)建一個(gè)Maven項(xiàng)目
2.2 maven的使用
2.2.1 maven簡(jiǎn)述
maven的配置核心是.pom(Project Object Model)文件,其中包含了項(xiàng)目的基本信息、構(gòu)建工程、環(huán)境信息、依賴信息等。以下面的代碼為例
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.vs</groupId> <artifactId>com.vs.maven.gradle</artifactId> <version>1.0</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.6.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa </artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.25</version> </dependency> </dependencies> <properties> <java.version>1.8</java.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
這個(gè)例子構(gòu)建了一個(gè)簡(jiǎn)單的spring-boot項(xiàng)目,最開(kāi)始定義了一些項(xiàng)目的基本信息,包括組名、制品名、版本等。arent標(biāo)簽表示我們繼承了一個(gè)spring定義的一個(gè)制品的配置,這樣我們不需要配置很多依賴的版本就可以引入依賴。dependencies標(biāo)簽間配置該項(xiàng)目所依賴的其他制品,分別配置每個(gè)依賴制品的groupId, artifactId和version。當(dāng)我們執(zhí)行mvn insall時(shí),maven就會(huì)自動(dòng)下載依賴,并幫我們將它編譯打包放入本地倉(cāng)庫(kù)之中。我們就可以在用戶目錄下的.m2文件夾中找到我們的制品。
2.2.2 maven構(gòu)建生命周期管理
除了依賴管理以外,構(gòu)建工具的另一個(gè)主要用途就是構(gòu)建的生命周期管理。
Maven有三個(gè)生命周期,每個(gè)生命周期又分為多個(gè)階段:
- Clean:包含3個(gè)階段,與清理上次構(gòu)建生成的文件相關(guān)
- Default:Maven的核心生命周期,包含多個(gè)階段如預(yù)處理、編譯、測(cè)試、打包、安裝到本地倉(cāng)庫(kù)、發(fā)布到遠(yuǎn)程倉(cāng)庫(kù)等。
- Site: 包含4個(gè)階段,與生成項(xiàng)目報(bào)告,站點(diǎn),發(fā)布站點(diǎn)相關(guān)。
這些生命周期都是系統(tǒng)自定義好的,如果我們需要修改現(xiàn)有的構(gòu)建生命周期的話,我們就要編寫一個(gè)Maven插件。因?yàn)镸aven是通過(guò)插件發(fā)來(lái)完成大多數(shù)的構(gòu)建任務(wù)。每個(gè)插件可以綁定一個(gè)生命周期。配置好綁定生命周期后,我們需要定義插件的任務(wù),在Maven中每個(gè)任務(wù)的goal稱作Mojo,每個(gè)Mojo我們都需要實(shí)現(xiàn)org.apache.maven.plugin.Mojo接口。也就是我們需要定義一個(gè)類來(lái)實(shí)現(xiàn)這個(gè)接口。使用時(shí)我們需要引入這個(gè)插件,并配置需要執(zhí)行的goal。
比如我們要完成輸入Hello world這個(gè)需求,我們需要:
- 1新建GreeingMoji類
package sample.plugin; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Mojo; /** * Says "Hi" to the user. * */ @Mojo( name = "sayhi") public class GreetingMojo extends AbstractMojo { public void execute() throws MojoExecutionException { getLog().info( "Hello, world." ); } }
-2 定義pom文件
<project> <modelVersion>4.0.0</modelVersion> <groupId>sample.plugin</groupId> <artifactId>hello-maven-plugin</artifactId> <version>1.0-SNAPSHOT</version> <packaging>maven-plugin</packaging> <name>Sample Parameter-less Maven Plugin</name> <dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> <version>2.0</version> </dependency> <!-- dependencies to annotations --> <dependency> <groupId>org.apache.maven.plugin-tools</groupId> <artifactId>maven-plugin-annotations</artifactId> <version>3.4</version> <scope>provided</scope> </dependency> </dependencies> </project>
-3 在項(xiàng)目pom文件目錄運(yùn)行install命令將插件安裝到本地倉(cāng)庫(kù)
-4 在使用插件的項(xiàng)目中加入配置
<build> <plugins> <plugin> <groupId>sample.plugin</groupId> <artifactId>hello-maven-plugin</artifactId> <version>1.0-SNAPSHOT</version> </plugin> </plugins> </build>
-5 執(zhí)行,即可完成Hello,world的輸出
mvn groupId:artifactId:version:goal
制品發(fā)布
Maven要發(fā)布制品,只需要配置遠(yuǎn)程倉(cāng)庫(kù)的參數(shù):
<distributionManagement> <repository> <id>internal</id> <name>Internal Release Repository</name> <url>http://repository.springsource.com/maven/bundles/release</url> </repository> </distributionManagement>
2.3 gradle的使用
2.3.1 gradle簡(jiǎn)述
Gradle是一個(gè)基于Apache Ant和Apache Maven概念的項(xiàng)目自動(dòng)化構(gòu)建工具。它使用一種基于Groovy的特定領(lǐng)域語(yǔ)言(DSL)來(lái)聲明項(xiàng)目設(shè)置,拋棄了基于XML的各種繁瑣配置。
面向Java應(yīng)用為主。當(dāng)前其支持的語(yǔ)言限于Java、Groovy和Scala,計(jì)劃未來(lái)將支持更多的語(yǔ)言。
2.3.2 gradle引用第三方類庫(kù)
以android studio為例,使用gradle引用第三方library類庫(kù)
在android studio中,不需要額外添加或者下載插件,創(chuàng)建一個(gè)android項(xiàng)目后,在項(xiàng)目中會(huì)創(chuàng)建兩個(gè)build.gradle文件,分別屬于本工程和本Module。我們要使用哪個(gè)第三方的庫(kù),就在屬于module下的build.gradle中添加相應(yīng)的依賴,一般是幾行語(yǔ)句。
你不需要手動(dòng)去下載、導(dǎo)入它們 。gradle的依賴管理能力極其強(qiáng)大,幾乎所有的開(kāi)源項(xiàng)目都可以簡(jiǎn)單的通過(guò)一條compile指令完成依賴的配置,比如在我的項(xiàng)目中用到了umeng分析,volley,googleprogressbar……,我的dependencies如下:
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.2' compile 'com.jpardogo.flabbylistview:library:+' compile 'com.jpardogo.googleprogressbar:library:+' compile 'com.mcxiaoke.volley:library:1.0.+' compile 'com.jakewharton:butterknife:6.0.0' compile 'com.umeng.analytics:analytics:5.2.4' }
一般github上的項(xiàng)目都會(huì)提供一條類似的指令,你可以在你的項(xiàng)目的build.gradle的dependencies塊中添加就ok,這樣在你運(yùn)行g(shù)radle腳本時(shí),gradle會(huì)自己完成依賴的下載,依賴添加。
2.3.3 gradle入門教程
Gradle學(xué)習(xí)系列之一——Gradle快速入門
3 總結(jié)
總的來(lái)說(shuō),gradle相比于maven有很打的靈活性,目前gradle的使用者越來(lái)越多。而由于maven之前處于主流,并且在某些方面maven較gradle還有一些優(yōu)點(diǎn),所以maven和gradle并存。在github上大多數(shù)優(yōu)秀的開(kāi)源項(xiàng)目會(huì)同時(shí)提供maven和gradle兩種添加依賴的方式。
引用資料:
1.使用Eclipse構(gòu)建Maven項(xiàng)目 (step-by-step)
2.Java構(gòu)建工具:Maven與Gradle的對(duì)比
3.Maven和Gradle對(duì)比
4.gradle百度百科
到此這篇關(guān)于Java中的maven和gradle的比較與使用的文章就介紹到這了,更多相關(guān)maven和gradle的比較與使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JPA @Basic單表查詢?nèi)绾螌?shí)現(xiàn)大字段懶加載
這篇文章主要介紹了JPA @Basic單表查詢?nèi)绾螌?shí)現(xiàn)大字段懶加載的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java中List轉(zhuǎn)Map的幾種具體實(shí)現(xiàn)方式和特點(diǎn)
這篇文章主要介紹了幾種常用的List轉(zhuǎn)Map的方式,包括使用for循環(huán)遍歷、Java8StreamAPI、ApacheCommonsCollections和GoogleGuava,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01spring實(shí)現(xiàn)動(dòng)態(tài)切換、添加數(shù)據(jù)源及源碼分析
這篇文章主要給大家介紹了關(guān)于spring實(shí)現(xiàn)動(dòng)態(tài)切換、添加數(shù)據(jù)源及源碼分析的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09Java利用HttpClient模擬POST表單操作應(yīng)用及注意事項(xiàng)
本文主要介紹JAVA中利用HttpClient模擬POST表單操作,希望對(duì)大家有所幫助。2016-04-04logback的LevelFilter日志過(guò)濾器源碼解讀
這篇文章主要為大家介紹了logback的LevelFilter日志過(guò)濾器源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11SpringBoot整合ES-Elasticsearch的實(shí)例
這篇文章主要介紹了SpringBoot整合ES-Elasticsearch的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05Java字符串拼接+和StringBuilder的比較與選擇
Java 提供了兩種主要的方式:使用 "+" 運(yùn)算符和使用 StringBuilder 類,本文主要介紹了Java字符串拼接+和StringBuilder的比較與選擇,感興趣的可以了解一下2023-10-10java中的靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造方法詳解
下面小編就為大家?guī)?lái)一篇java中的靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造方法詳解。小編覺(jué)得挺好的,現(xiàn)在分享給大家。給大家一個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-03-03