概念
Maven是什么
Maven 是一個(gè)項(xiàng)目管理工具。它負(fù)責(zé)管理項(xiàng)目開發(fā)過程中的幾乎所有的東西蟀苛。
版本 maven有自己的版本定義和規(guī)則益咬。
構(gòu)建 maven支持許多種的應(yīng)用程序類型,對于每一種支持的應(yīng)用程序類型都定義好了一組構(gòu)建規(guī)則和工具集帜平。
輸出物管理 maven可以管理項(xiàng)目構(gòu)建的產(chǎn)物幽告,并將其加入到用戶庫中。這個(gè)功能可以用于項(xiàng)目組和其他部門之間的交付行為裆甩。
依賴關(guān)系 maven對依賴關(guān)系的特性進(jìn)行細(xì)致的分析和劃分冗锁,避免開發(fā)過程中的依賴混亂和相互污染行為
文檔和構(gòu)建結(jié)果 maven的site命令支持各種文檔信息的發(fā)布,包括構(gòu)建過程的各種輸出嗤栓,javadoc冻河,產(chǎn)品文檔等。
項(xiàng)目關(guān)系 一個(gè)大型的項(xiàng)目通常有幾個(gè)小項(xiàng)目或者模塊組成茉帅,用maven可以很方便地管理叨叙。
移植性管理 maven可以針對不同的開發(fā)場景,輸出不同種類的輸出結(jié)果担敌。
Maven的生命周期
maven把項(xiàng)目的構(gòu)建劃分為不同的生命周期(lifecycle)摔敛。粗略一點(diǎn)的話关划,它這個(gè)過程(phase)包括:編譯悄蕾、測試、打包卜范、集成測試刹悴、驗(yàn)證行楞、部署。maven中所有的執(zhí)行動(dòng)作(goal)都需要指明自己在這個(gè)過程中的執(zhí)行位置土匀,然后maven執(zhí)行的時(shí)候子房,就依照過程的發(fā)展依次調(diào)用這些goal進(jìn)行各種處理。
這個(gè)也是maven的一個(gè)基本調(diào)度機(jī)制。一般來說证杭,位置稍后的過程都會(huì)依賴于之前的過程田度。當(dāng)然,maven同樣提供了配置文件解愤,可以依照用戶要求镇饺,跳過某些階段。
Maven的標(biāo)準(zhǔn)工程結(jié)構(gòu)
Maven的標(biāo)準(zhǔn)工程結(jié)構(gòu)如下:
|-- pom.xml(maven的核心配置文件)
|-- src
|-- main
|-- java(java源代碼目錄)
|-- resources(資源文件目錄)
|-- test
|-- java(單元測試代碼目錄)
|-- target(輸出目錄送讲,所有的輸出物都存放在這個(gè)目錄下)
|-- classes(編譯后的class文件存放處)
Maven的"約定優(yōu)于配置"
所謂的"約定優(yōu)于配置"奸笤,在maven中并不是完全不可以修改的,他們只是一些配置的默認(rèn)值而已哼鬓。但是除非必要监右,并不需要去修改那些約定內(nèi)容。maven默認(rèn)的文件存放結(jié)構(gòu)如下:
每一個(gè)階段的任務(wù)都知道怎么正確完成自己的工作异希,比如compile任務(wù)就知道從src/main/java下編譯所有的java文件健盒,并把它的輸出class文件存放到target/classes中。
對maven來說宠互,采用"約定優(yōu)于配置"的策略可以減少修改配置的工作量味榛,也可以降低學(xué)習(xí)成本,更重要的是予跌,給項(xiàng)目引入了統(tǒng)一的規(guī)范搏色。
Maven的版本規(guī)范
maven使用如下幾個(gè)要素來唯一定位某一個(gè)輸出物:
- groupId 團(tuán)體、組織的標(biāo)識(shí)符券册。團(tuán)體標(biāo)識(shí)的約定是频轿,它以創(chuàng)建這個(gè)項(xiàng)目的組織名稱的逆向域名(reverse domain name)開頭。一般對應(yīng)著JAVA的包的結(jié)構(gòu)烁焙。例如org.apache
- artifactId 單獨(dú)項(xiàng)目的唯一標(biāo)識(shí)符航邢。比如我們的tomcat, commons等。不要在artifactId中包含點(diǎn)號(.)骄蝇。
- version 一個(gè)項(xiàng)目的特定版本膳殷。
- packaging 項(xiàng)目的類型,默認(rèn)是jar九火,描述了項(xiàng)目打包后的輸出赚窃。類型為jar的項(xiàng)目產(chǎn)生一個(gè)JAR文件,類型為war的項(xiàng)目產(chǎn)生一個(gè)web應(yīng)用岔激。
maven有自己的版本規(guī)范勒极,一般是如下定義 <major version>
、<minor version>
虑鼎、<incremental version>-<qualifier>
辱匿,比如1.2.3-beta-01键痛。要說明的是,maven自己判斷版本的算法是major,minor,incremental部分用數(shù)字比 較匾七,qualifier部分用字符串比較絮短,所以要小心 alpha-2和alpha-15的比較關(guān)系,最好用 alpha-02的格式乐尊。
maven在版本管理時(shí)候可以使用幾個(gè)特殊的字符串 SNAPSHOT戚丸,LATEST,RELEASE扔嵌。比如"1.0-SNAPSHOT"。各個(gè)部分的含義和處理邏輯如下說明:
- SNAPSHOT 這個(gè)版本一般用于開發(fā)過程中夺颤,表示不穩(wěn)定的版本痢缎。
- LATEST 指某個(gè)特定構(gòu)件的最新發(fā)布,這個(gè)發(fā)布可能是一個(gè)發(fā)布版世澜,也可能是一個(gè)snapshot版独旷,具體看哪個(gè)時(shí)間最后。
- RELEASE 指最后一個(gè)發(fā)布版寥裂。
安裝
官網(wǎng)下載地址
http://maven.apache.org/download.cgi
配置環(huán)境變量
注意:安裝maven之前嵌洼,必須先確保你的機(jī)器中已經(jīng)安裝了JDK。
1.解壓壓縮包(以apache-maven-3.3.9-bin.zip為例)
2.添加環(huán)境變量MAVEN_HOME封恰,值為apache-maven-3.3.9的安裝路徑
3.在Path環(huán)境變量的變量值末尾添加%MAVEN_HOME%\bin
4.在cmd輸入mvn –version麻养,如果出現(xiàn)maven的版本信息,說明配置成功诺舔。
本地倉儲(chǔ)配置
從中央倉庫下載的jar包鳖昌,都會(huì)統(tǒng)一存放到本地倉庫中。我們需要配置本地倉庫的位置低飒。
打開maven安裝目錄许昨,打開conf目錄下的setting.xml文件。
可以參照下圖配置本地倉儲(chǔ)位置褥赊。
第一個(gè)Maven工程
在Eclipse中創(chuàng)建Maven工程
Maven插件
在Eclipse中創(chuàng)建Maven工程糕档,需要安裝Maven插件。
一般較新版本的Eclipse都會(huì)帶有Maven插件拌喉,如果你的Eclipse中已經(jīng)有Maven插件速那,可以跳過這一步驟。
點(diǎn)擊Help -> Eclipse Marketplace司光,搜索maven關(guān)鍵字琅坡,選擇安裝紅框?qū)?yīng)的Maven插件。
Maven環(huán)境配置
點(diǎn)擊Window -> Preferences
如下圖所示残家,配置settings.xml文件的位置
創(chuàng)建Maven工程
File -> New -> Maven Project -> Next榆俺,在接下來的窗口中會(huì)看到一大堆的項(xiàng)目模板,選擇合適的模板。
接下來設(shè)置項(xiàng)目的參數(shù)茴晋,如下:
groupId是項(xiàng)目組織唯一的標(biāo)識(shí)符陪捷,實(shí)際對應(yīng)JAVA的包的結(jié)構(gòu),是main目錄里java的目錄結(jié)構(gòu)诺擅。
artifactId就是項(xiàng)目的唯一的標(biāo)識(shí)符市袖,實(shí)際對應(yīng)項(xiàng)目的名稱,就是項(xiàng)目根目錄的名稱烁涌。
點(diǎn)擊Finish苍碟,Eclipse會(huì)創(chuàng)建一個(gè)Maven工程。
使用Maven進(jìn)行構(gòu)建
Eclipse中構(gòu)建方式
在Elipse項(xiàng)目上右擊 -> Run As 就能看到很多Maven操作撮执。這些操作和maven命令是等效的微峰。例如Maven clean,等同于mvn clean命令抒钱。
你也可以點(diǎn)擊Maven build蜓肆,輸入組合命令,并保存下來谋币。如下圖:
Maven****命令構(gòu)建方式
當(dāng)然仗扬,你也可以直接使用maven命令進(jìn)行構(gòu)建。
進(jìn)入工程所在目錄蕾额,輸入maven命令就可以了早芭。
如下圖