Maven學(xué)習(xí)(一)

一宵呛、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。

  1. 首先乱投,從以下網(wǎng)址下載 Maven 3.2.5:http://maven.apache.org/download.html)
  2. 解壓后你會(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)了授帕,有興趣的可以去試試泉手。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末颊郎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子检眯,更是在濱河造成了極大的恐慌避凝,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茸俭,死亡現(xiàn)場(chǎng)離奇詭異酌伊,居然都是意外死亡驴娃,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)循集,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)咒彤,“玉大人,你說(shuō)我怎么就攤上這事」拭伲” “怎么了炼杖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵坤邪,是天一觀的道長(zhǎng)胳螟。 經(jīng)常有香客問(wèn)我萨醒,道長(zhǎng)黔衡,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任腌乡,我火速辦了婚禮盟劫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘与纽。我一直安慰自己侣签,他們只是感情好塘装,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著影所,像睡著了一般蹦肴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猴娩,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天阴幌,我揣著相機(jī)與錄音,去河邊找鬼胀溺。 笑死裂七,一個(gè)胖子當(dāng)著我的面吹牛皆看,可吹牛的內(nèi)容都是我干的仓坞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼腰吟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼无埃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起毛雇,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嫉称,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后灵疮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體织阅,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年震捣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荔棉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蒿赢,死狀恐怖润樱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情羡棵,我是刑警寧澤壹若,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站皂冰,受9級(jí)特大地震影響店展,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜秃流,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一赂蕴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧剔应,春花似錦睡腿、人聲如沸语御。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)应闯。三九已至,卻和暖如春挂捻,著一層夾襖步出監(jiān)牢的瞬間碉纺,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工刻撒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骨田,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓声怔,卻偏偏與公主長(zhǎng)得像态贤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子醋火,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 簡(jiǎn)介 概述 Maven 是一個(gè)項(xiàng)目管理和整合工具 Maven 為開(kāi)發(fā)者提供了一套完整的構(gòu)建生命周期框架 Maven...
    閩越布衣閱讀 4,293評(píng)論 6 39
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理悠汽,服務(wù)發(fā)現(xiàn),斷路器芥驳,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,810評(píng)論 6 342
  • 當(dāng)前,JVM生態(tài)圈主要的三大構(gòu)建工具: Apache Ant(帶著Ivy) Maven Gradle 對(duì)于剛開(kāi)始接...
    清楓_小天閱讀 5,798評(píng)論 1 13
  • 2016年的11月丽猬,剛下過(guò)大雪宿饱,天寒地凍路滑,冷得人出不了手邁不了步宝鼓。 可偏偏一大早刑棵,東家的王大嬸,啪啪地敲西鄰家...
    就愛(ài)西郭先生閱讀 181評(píng)論 0 0