一扫倡、概述
Maven 是一個項目管理和整合工具渔嚷。Maven 為開發(fā)者提供了一套完整的構建生命周期框架叹俏。開發(fā)團隊幾乎不用花多少時間就能夠自動完成工程的基礎構建配置舞肆,因為 Maven 使用了一個標準的目錄結(jié)構和一個默認的構建生命周期肩袍。
在有多個開發(fā)團隊環(huán)境的情況下厂僧,Maven 能夠在很短的時間內(nèi)使得每項工作都按照標準進行。因為大部分的工程配置操作都非常簡單并且可復用了牛,在創(chuàng)建報告颜屠、檢查、構建和測試自動配置時鹰祸,Maven 可以讓開發(fā)者的工作變得更簡單甫窟。
二、構建生命周期
構建生命周期是一組階段的序列(sequence of phases)蛙婴,每個階段定義了目標被執(zhí)行的順序粗井。這里的階段是生命周期的一部分。當需要在某個特定階段之前或之后執(zhí)行目標時,可以使用 pre 和 post 來定義這個目標浇衬。當 Maven 開始構建工程懒构,會按照所定義的階段序列的順序執(zhí)行每個階段注冊的目標。
Maven 有以下三個標準的生命周期:
- clean
- default(or build)
- site
1. Clean生命周期
Clean的主要目的是清空項目工作中產(chǎn)生的一些中間件耘擂,比如上次打的jar包胆剧,臨時文件等。該生命周期主要用于在build生命周期之前做清理工作醉冤。它包含以下階段:
- pre-clean:執(zhí)行一些需要在clean之前完成的工作
- clean:移除所有上一次構建生成的文件
- post-clean:執(zhí)行一些需要在clean之后立刻完成的工作
2. Default (or Build) 生命周期
這是 Maven 的主要生命周期秩霍,被用于構建應用,主要有23個階段蚁阳,下面主要介紹常用的幾種:
階段 | 處理 | 描述 |
---|---|---|
validate | 驗證項目 | 驗證項目是否正確且所有必須信息是可用的 |
compile | 執(zhí)行編譯 | 源代碼編譯在此階段完成 |
Test | 測試 | 使用適當?shù)膯卧獪y試框架運行測試铃绒。 |
package | 打包 | 將編譯后的代碼打包成需要的格式,比如JAR |
verify | 檢查 | 對集成測試的結(jié)果進行檢查螺捐,以保證質(zhì)量達標 |
install | 安裝 | 安裝打包的項目到本地倉庫颠悬,以供其他項目使用 |
deploy | 部署 | 將在最終的build環(huán)境上面完成,拷貝最終的工程包到遠程倉庫中定血,以共享給其他開發(fā)人員和工程 |
3. Site生命周期
Maven Site 插件一般用來創(chuàng)建新的報告文檔椿疗、部署站點等。
- pre-site:執(zhí)行一些需要在生成站點文檔之前完成的工作
- site:生成項目的站點文檔
- post-site: 執(zhí)行一些需要在生成站點文檔之后完成的工作糠悼,并且為部署做準備
- site-deploy:將生成的站點文檔部署到特定的服務器上
這里經(jīng)常用到的是site階段和site-deploy階段,用以生成和發(fā)布Maven站點浅乔。
三倔喂、配置文件
構建配置文件是一系列的配置項的值,可以用來設置或者覆蓋 Maven 構建默認值靖苇。使用構建配置文件席噩,可以為不同的環(huán)境,比如說生產(chǎn)環(huán)境(Producation)和開發(fā)(Development)環(huán)境贤壁,定制構建方式悼枢。
配置文件在 pom.xml 文件中使用 activeProfiles 或者 profiles 元素指定,并且可以通過各種方式觸發(fā)脾拆。配置文件在構建時修改 POM馒索,并且用來給參數(shù)設定不同的目標環(huán)境(比如說,開發(fā)(Development)名船、測試(Testing)和生產(chǎn)環(huán)境(Producation)中數(shù)據(jù)庫服務器的地址)绰上。
構建配置文件大體上有三種類型:
類型 | 在哪定義 |
---|---|
項目級(Per Project) | 定義在項目的POM文件pom.xml中 |
用戶級 (Per User) | 定義在Maven的設置xml文件中 (%USER_HOME%/.m2/settings.xml) |
全局(Global) | 定義在 Maven 全局的設置 xml 文件中 (%M2_HOME%/conf/settings.xml) |
POM配置
在項目的根目錄下面有個pom.xml的文件,該文件是用來配置Maven項目的渠驼,其中包括版本蜈块,生命周期,構建過程,依賴等的配置百揭。POM( Project Object Model爽哎,項目對象模型 ) 是 Maven 工程的基本工作單元,是一個XML文件器一,包含了項目的基本信息课锌,用于描述項目如何構建,聲明項目依賴盹舞,等等产镐。執(zhí)行任務或目標時,Maven 會在當前目錄中查找 POM踢步。它讀取 POM癣亚,獲取所需的配置信息,然后執(zhí)行目標获印。
POM.xml 的根元素是 project述雾,它有三個主要的子節(jié)點:groupId,artifactId兼丰,version玻孟。
節(jié)點 | 描述 |
---|---|
project | 工程的根標簽。 |
groupId | 是項目組織中唯一的標識符鳍征,對應Java包結(jié)構黍翎,在idea中看到的是main目錄里java的目錄結(jié)構。一般分為多個段艳丛,這里我只說兩段匣掸,第一段為域,第二段為公司名稱氮双。域又分為org碰酝、com、cn等等許多戴差,其中org為非營利組織送爸,com為商業(yè)組織。 |
artifactId | 是項目的唯一的標識符暖释,實際對應項目的名稱(就是idea中工程的名字)袭厂,就是項目根目錄的名稱。 |
version | 是該項目的版本信息球匕。 |
四嵌器、倉庫
在Maven中,倉庫就是用來存放依賴文件的地方谐丢,是依賴管理的重要組成部分爽航。倉庫按照存放位置可以分為本地倉庫蚓让,遠程倉庫以及中央倉庫。
1. 本地倉庫
本地倉庫就是本地開發(fā)自己機器上的倉庫讥珍。Maven 本地倉庫是機器上的一個文件夾历极。它在第一次運行任何 maven 命令的時候創(chuàng)建。
Maven 本地倉庫保存你的工程的所有依賴(library jar衷佃、plugin jar 等)趟卸。當你運行一次 Maven 構建,Maven 會自動下載所有依賴的 jar 文件到本地倉庫中氏义。它避免了每次構建時都引用存放在遠程機器上的依賴文件锄列。
Maven 本地倉庫默認被創(chuàng)建在 %USER_HOME% 目錄下。要修改默認位置惯悠,在 %M2_HOME%\conf 目錄中的 Maven 的 settings.xml 文件中定義另一個路徑邻邮。
2. 中央倉庫
Maven 中央倉庫是由 Maven 社區(qū)提供的倉庫,其中包含了大量常用的庫克婶。
中央倉庫包含了絕大多數(shù)流行的開源Java構件筒严,以及源碼、作者信息情萤、SCM鸭蛙、信息、許可證信息等筋岛。一般來說娶视,簡單的Java項目依賴的構件都可以在這里下載到。
中央倉庫的關鍵概念:
- 這個倉庫由 Maven 社區(qū)管理睁宰。
- 不需要配置肪获。
- 需要通過網(wǎng)絡才能訪問。
3. 遠程倉庫
有時候勋陪,我們可能沒有網(wǎng)絡或者網(wǎng)絡由于條件約束,不允許在中央倉庫下載依賴硫兰,那么組織可以自己定制一個遠程倉庫诅愚,讓所有開發(fā)都從此倉庫下載。我們定義好了遠程倉庫劫映,然后修改POM文件即可违孝。