一宵呛、Maven是什么单匣?
Maven 是一個(gè)項(xiàng)目管理和整合工具。Maven 為開(kāi)發(fā)者提供了一套完整的構(gòu)建生命周期框架宝穗。開(kāi)發(fā)團(tuán)隊(duì)幾乎不用花多少時(shí)間就能夠自動(dòng)完成工程的基礎(chǔ)構(gòu)建配置户秤,因?yàn)?Maven 使用了一個(gè)標(biāo)準(zhǔn)的目錄結(jié)構(gòu)和一個(gè)默認(rèn)的構(gòu)建生命周期。
在有多個(gè)開(kāi)發(fā)團(tuán)隊(duì)環(huán)境的情況下逮矛,Maven 能夠在很短的時(shí)間內(nèi)使得每項(xiàng)工作都按照標(biāo)準(zhǔn)進(jìn)行鸡号。因?yàn)榇蟛糠值墓こ膛渲貌僮鞫挤浅:?jiǎn)單并且可復(fù)用,在創(chuàng)建報(bào)告须鼎、檢查鲸伴、構(gòu)建和測(cè)試自動(dòng)配置時(shí)府蔗,Maven 可以讓開(kāi)發(fā)者的工作變得更簡(jiǎn)單。
Maven 能夠幫助開(kāi)發(fā)者完成以下工作:
- 構(gòu)建
- 文檔生成
- 報(bào)告
- 依賴
- SCMs
- 發(fā)布
- 分發(fā)
- 郵件列表
總的來(lái)說(shuō)汞窗,Maven 簡(jiǎn)化了工程的構(gòu)建過(guò)程姓赤,并對(duì)其標(biāo)準(zhǔn)化。它無(wú)縫銜接了編譯仲吏、發(fā)布不铆、文檔生成、團(tuán)隊(duì)合作和其他任務(wù)裹唆。Maven 提高了重用性誓斥,負(fù)責(zé)了大部分構(gòu)建相關(guān)的任務(wù)。
二许帐、Maven 的歷史
Maven 最初是在 Jakarta Turbine 項(xiàng)目中為了簡(jiǎn)化構(gòu)建過(guò)程而設(shè)計(jì)的劳坑。項(xiàng)目中有幾個(gè)子工程,每個(gè)工程包含稍有不同的 ANT 文件成畦。JAR 文件使用 CVS 管理泡垃。
Apache 小組隨后開(kāi)發(fā)了 Maven,能夠同時(shí)構(gòu)建多個(gè)工程羡鸥、發(fā)布工程信息蔑穴、部署工程、在幾個(gè)工程中共享 JAR 文件惧浴,并且協(xié)助團(tuán)隊(duì)合作存和。
三、Maven 的目標(biāo)
Maven 的主要目的是為開(kāi)發(fā)者提供
- 一個(gè)可復(fù)用衷旅、可維護(hù)捐腿、更易理解的工程綜合模型
- 與這個(gè)模型交互的插件或者工具
Maven 工程結(jié)構(gòu)和內(nèi)容被定義在一個(gè) xml 文件中 - pom.xml,是 Project Object Model (POM) 的簡(jiǎn)稱柿顶,此文件是整個(gè) Maven 系統(tǒng)的基礎(chǔ)組件茄袖。
約定優(yōu)于配置
Maven 使用約定而不是配置,意味著開(kāi)發(fā)者不需要再自己創(chuàng)建構(gòu)建過(guò)程嘁锯。
開(kāi)發(fā)者不需要再關(guān)心每一個(gè)配置細(xì)節(jié)宪祥。Maven 為工程提供了合理的默認(rèn)行為。當(dāng)創(chuàng)建 Maven 工程時(shí)家乘,Maven 會(huì)創(chuàng)建默認(rèn)的工程結(jié)構(gòu)蝗羊。開(kāi)發(fā)者只需要合理的放置文件,而在 pom.xml 中不再需要定義任何配置仁锯。
舉例說(shuō)明耀找,下面的表格展示了工程源碼文件、資源文件的默認(rèn)配置业崖,和其他一些配置野芒。假定${basedir}
表示工程目錄:
配置項(xiàng) | 默認(rèn)值 |
---|---|
source code | ${basedir}/src/main/java |
resources | ${basedir}/src/main/resources |
Tests | ${basedir}/src/test |
Complied byte code | ${basedir}/target |
distributable JAR | ${basedir}/target/classes |
為了構(gòu)建工程蓄愁,Maven 為開(kāi)發(fā)者提供了選項(xiàng)來(lái)配置生命周期目標(biāo)和工程依賴(依賴于 Maven 的插件擴(kuò)展功能和默認(rèn)的約定)。大部分的工程管理和構(gòu)建相關(guān)的任務(wù)是由 Maven 插件完成的狞悲。
開(kāi)發(fā)人員不需要了解每個(gè)插件是如何工作的涝登,就能夠構(gòu)建任何給定的 Maven 工程。
四效诅、安裝maven
安裝Maven前請(qǐng)先確定你安裝好了jdk胀滚,進(jìn)而再安裝maven。
- 首先乱投,從以下網(wǎng)址下載 Maven 3.2.5:http://maven.apache.org/download.html)
- 解壓后你會(huì)得到apache-maven-3.5.3-bin這個(gè)文件咽笼,放到你的c盤(pán)軟件盤(pán)(我這里是放在c盤(pán)下我的軟件目錄下)
3.然后跟jdk一樣,設(shè)置maven的環(huán)境變量戚炫,設(shè)置如下
添加 M2_HOME剑刑、M2、MAVEN_OPTS 到環(huán)境變量中双肤。
操作系統(tǒng) | 輸出 |
---|---|
Windows | 使用系統(tǒng)屬性設(shè)置環(huán)境變量施掏。 M2_HOME=C:\Program Files\ApacheSoftware Foundation\apache-maven-3.2.5; M2=%M2_HOME%\bin茅糜;MAVEN_OPTS=-Xms256m -Xmx512m |
Linux | 打開(kāi)命令終端設(shè)置環(huán)境變量七芭。;export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5蔑赘;export M2=$M2_HOME/bin狸驳;export MAVEN_OPTS=-Xms256m -Xmx512m |
Mac | 打開(kāi)命令終端設(shè)置環(huán)境變量。缩赛;export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5耙箍;export M2=$M2_HOME/bin;export MAVEN_OPTS=-Xms256m -Xmx512m |
4.添加 Maven bin 目錄到系統(tǒng)路徑中
現(xiàn)在添加 M2 變量到系統(tǒng)“Path”變量中
操作系統(tǒng) | 輸出 |
---|---|
Windows | 添加字符串 “;%M2%” 到系統(tǒng)“Path”變量末尾 |
Linux | export PATH=M2:PATH |
Mac | export PATH=M2:PATH |
5.好了酥馍,這么多步驟辩昆,最后來(lái)測(cè)試一下是否安裝成功?
驗(yàn)證 Maven 安裝
現(xiàn)在打開(kāi)控制臺(tái)旨袒,執(zhí)行以下 mvn 命令汁针。
操作系統(tǒng) | 輸出 | 命令 |
---|---|---|
Windows | 打開(kāi)命令控制臺(tái) | c:> mvn --version |
Linux | 打開(kāi)命令終端 | $ mvn --version |
Mac | 打開(kāi)終端 | machine:~ joseph$ mvn --version |
結(jié)果應(yīng)該如下,才證明安裝成功:
操作系統(tǒng) | 輸出 |
---|---|
windows | Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T03:49:05+08:00)峦失;Maven home: C:\StudySoftware\apache-maven-3.5.3\bin..扇丛;Java version: 1.8.0_40, vendor: Oracle Corporation术吗;Java home:C:\Program Files\Java\jdk1.8.0_40\jre尉辑;Default locale: zh_CN, platform encoding: GBK;OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "windows" |
五较屿、POM文件
POM 代表工程對(duì)象模型隧魄。它是使用 Maven 工作時(shí)的基本組建卓练,是一個(gè) xml 文件。它被放在工程根目錄下购啄,文件命名為 pom.xml襟企。
POM 包含了關(guān)于工程和各種配置細(xì)節(jié)的信息,Maven 使用這些信息構(gòu)建工程狮含。
POM 也包含了目標(biāo)和插件顽悼。當(dāng)執(zhí)行一個(gè)任務(wù)或者目標(biāo)時(shí),Maven 會(huì)查找當(dāng)前目錄下的 POM几迄,從其中讀取所需要的配置信息蔚龙,然后執(zhí)行目標(biāo)。能夠在 POM 中設(shè)置的一些配置如下:
- project dependencies
- plugins
- goals
- build profiles
- project version
- developers
- mailing list
在創(chuàng)建 POM 之前映胁,我們首先確定工程組(groupId)木羹,及其名稱(artifactId)和版本,在倉(cāng)庫(kù)中這些屬性是工程的唯一標(biāo)識(shí)解孙。
POM 舉例
<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.companyname.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
</project>
需要說(shuō)明的是每個(gè)工程應(yīng)該只有一個(gè) POM 文件坑填。
- 所有的 POM 文件需要 project 元素和三個(gè)必須的字段:groupId, artifactId,version。
- 在倉(cāng)庫(kù)中的工程標(biāo)識(shí)為 groupId:artifactId:version
- POM.xml 的根元素是 project弛姜,它有三個(gè)主要的子節(jié)點(diǎn):
節(jié)點(diǎn) | 描述 |
---|---|
groupId | 這是工程組的標(biāo)識(shí)脐瑰。它在一個(gè)組織或者項(xiàng)目中通常是唯一的。例如廷臼,一個(gè)銀行組織 com.company.bank 擁有所有的和銀行相關(guān)的項(xiàng)目蚪黑。 |
artifactId | 這是工程的標(biāo)識(shí)。它通常是工程的名稱中剩。例如忌穿,消費(fèi)者銀行。groupId 和 artifactId 一起定義了 artifact 在倉(cāng)庫(kù)中的位置结啼。 |
version | 這是工程的版本號(hào)掠剑。在 artifact 的倉(cāng)庫(kù)中,它用來(lái)區(qū)分不同的版本郊愧。例如:com.company.bank:consumer-banking:1.0;com.company.bank:consumer-banking:1.1. |
Super POM
所有的 POM 都繼承自一個(gè)父 POM(無(wú)論是否顯式定義了這個(gè)父 POM)眠寿。父 POM 也被稱作 Super POM焦蘑,它包含了一些可以被繼承的默認(rèn)設(shè)置。
Maven 使用 effective pom(Super pom 加上工程自己的配置)來(lái)執(zhí)行相關(guān)的目標(biāo)宁舰,它幫助開(kāi)發(fā)者在 pom.xml 中做盡可能少的配置,當(dāng)然這些配置可以被方便的重寫(xiě)。
查看 Super POM 默認(rèn)配置的一個(gè)簡(jiǎn)單方法是執(zhí)行以下命令:mvn help:effective-pom
在你的電腦上的任意目錄下創(chuàng)建一個(gè) pom.xml 文件仍律,使用上面提到的示例 pom 中的內(nèi)容窒盐。
在下面的例子中炕横,我們?cè)?d:\MVN\project 目錄中創(chuàng)建了一個(gè) pom.xml 文件。
現(xiàn)在打開(kāi)命令控制臺(tái),到 pom.xml 所在的目錄下執(zhí)行以下 mvn 命令拾枣。
D:\MVN\project>mvn help:effective-pom
Maven 將會(huì)開(kāi)始處理并顯示 effective-pom。
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 41.645 s
[INFO] Finished at: 2018-04-27T11:30:10+08:00
[INFO] ------------------------------------------------------------------------
很多,這里就不全部寫(xiě)出來(lái)了授帕,有興趣的可以去試試泉手。