Maven 是一種軟體項目管理和理解工具;它基於項目對象模型(POM),從中央位置管理項目的構建、報告和文檔,並幫助開發人員輕鬆管理依賴項並自動化構建過程。 1、簡介 1.1、項目目錄 Maven 使用約定優於配置的原則,提倡使用一個共同的標準目錄結構。 目錄說明 ${basedir} 項目根目錄, ...
Maven 是一種軟體項目管理和理解工具;它基於項目對象模型(POM),從中央位置管理項目的構建、報告和文檔,並幫助開發人員輕鬆管理依賴項並自動化構建過程。
1、簡介
1.1、項目目錄
Maven 使用約定優於配置的原則,提倡使用一個共同的標準目錄結構。
目錄 | 說明 |
---|---|
${basedir} | 項目根目錄,存放 pom.xml 和 所有的子目錄 |
${basedir}/src/main/java | java 源代碼 |
${basedir}/src/main/resources | 資源目錄 |
${basedir}/src/test/java | 測試代碼 |
${basedir}/src/test/resources | 測試用的資源 |
${basedir}/src/main/webapp/WEB-INF | web 應用目錄 |
${basedir}/target | 打包輸出目錄 |
${basedir}/target/classes | 編譯輸出目錄 |
${basedir}/target/test-classes | 測試編譯輸出目錄 |
~/.m2/repository | Maven 預設的本地倉庫目錄 |
1.2、生命周期
Maven 有三個標準的生命周期:
- clean:項目清理
- default(build):項目部署
- site:項目站點文檔創建
每個生命周期又包含多個階段。
1.2.1、clean 生命周期
生命周期階段 | 說明 |
pre-clean | 執行一些需要在 clean 之前完成的工作 |
clean | 移除所有上一次構建生成的文件 |
post-clean | 執行一些需要在 clean 之後完成的工作 |
1.2.2、default(build) 生命周期
生命周期階段 | 說明 |
---|---|
validate(校驗) | 校驗項目是否正確,是否包含所有必要信息以完成項目的構建 |
initialize(初始化) | 初始化構建狀態,比如設置屬性值 |
generate-sources(生成源代碼) | 生成用於編譯階段中的任何源代碼 |
process-sources(處理源代碼) | 處理源代碼,比如說,過濾任意值 |
generate-resources(生成資源文件) | 生成將會包含在項目包中的資源文件 |
process-resources (處理資源文件) | 複製和處理資源到目標目錄,為打包階段最好準備 |
compile(編譯) | 編譯項目的源代碼 |
process-classes(處理類文件) | 處理編譯生成的文件,比如說對 Java class 文件做位元組碼改善優化 |
generate-test-sources(生成測試源代碼) | 生成用於編譯階段中的任何測試源代碼 |
process-test-sources(處理測試源代碼) | 處理測試源代碼,比如說,過濾任意值 |
generate-test-resources(生成測試資源文件) | 為測試創建資源文件 |
process-test-resources(處理測試資源文件) | 複製和處理測試資源到目標目錄 |
test-compile(編譯測試源碼) | 編譯測試源代碼 |
process-test-classes(處理測試類文件) | 處理測試源碼編譯生成的文件 |
test(測試) | 使用合適的單元測試框架運行測試(如:Juint ) |
prepare-package(準備打包) | 在實際打包之前,執行任何的必要的操作為打包做準備 |
package(打包) | 將編譯後的文件及資源文件打包成可分發格式的文件,如:JAR、WAR 或者 EAR 文件。 |
pre-integration-test(集成測試前) | 在執行集成測試前進行的必要動作,如:搭建需要的環境 |
integration-test(集成測試) | 部署項目到可以運行集成測試的環境中 |
post-integration-test(集成測試後) | 在執行集成測試完成後進行的必要動作,如:清理集成測試環境 |
verify (驗證) | 運行任意的檢查來驗證項目包有效且達到質量標準 |
install(安裝) | 安裝項目包到本地倉庫,這樣項目包可以用作其他本地項目的依賴 |
deploy(部署) | 將最終的項目包複製到遠程倉庫,與其他開發者和項目共用 |
1.2.3、site 生命周期
生命周期階段 | 說明 |
pre-site | 執行一些需要在生成站點文檔之前完成的工作 |
site | 生成項目的站點文檔 |
post-site | 執行一些需要在生成站點文檔之後完成的工作,並且為部署做準備 |
site-deploy | 將生成的站點文檔部署到特定的伺服器上 |
1.3、Maven 插件
Maven 每個生命周期中都包含著一系列的階段(phase);這些 phase 相當於 Maven 提供的統一的介面,這些 phase的實現由 Maven 的插件來完成。我們在輸入 mvn 命令的時候,比如 mvn clean,clean 對應的就是 clean 生命周期中的 clean 階段。但是 clean 的具體操作是由 maven-clean-plugin 來實現的。所以說 Maven 生命周期的每一個階段的具體實現都是由 Maven 插件實現的。Maven 實際上是一個依賴插件執行的框架,每個任務實際上是由插件完成。Maven 插件通常被用來:
插件通常提供了一個目標的集合,可以使用下麵的語法執行:
mvn [plugin-name]:[goal-name]
例如,一個 Java 工程可以使用 maven-compiler-plugin 的 compile-goal 編譯,使用以下命令:
mvn compiler:compile
常用插件:
插件 | 說明 |
---|---|
clean | 清理目標文件,刪除目標目錄 |
compiler | 編譯 Java 源文件 |
surefile | 運行 JUnit 單元測試,創建測試報告 |
jar | 構建 JAR 文件 |
war | 構建 WAR 文件 |
javadoc | 為工程生成 Javadoc |
1.4、倉庫
Maven 倉庫是項目中依賴的第三方庫,這個庫所在的位置叫做倉庫。在 Maven 中,任何一個依賴、插件或者項目構建的輸出,都可以稱之為構件。Maven 倉庫能幫助我們管理構件(主要是JAR),它就是放置所有 JAR、WAR、ZIP、POM 文件的地方。Maven 倉庫有三種類型:本地(local)、中央(central)、遠程(remote)。
1.4.1、本地倉庫
Maven 的本地倉庫,在安裝 Maven 後並不會創建,它是在第一次執行 maven 命令的時候才被創建。運行 Maven 的時候,Maven 所需要的任何構件都是直接從本地倉庫獲取的。如果本地倉庫沒有,它會首先嘗試從遠程倉庫下載構件至本地倉庫,然後再使用本地倉庫的構件。Maven 本地倉庫目錄預設為:%USER_HOME%/.m2/repository;要修改預設位置,可在 Maven 的 settings.xml 文件中設置另一個路徑:
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd"> <localRepository>d:/repo</localRepository> />
1.4.2、中央倉庫
Maven 中央倉庫是由 Maven 社區提供的倉庫,其中包含了大量常用的庫。中央倉庫包含了絕大多數流行的開源 Java 構件,以及源碼、作者信息、SCM、信息、許可證信息等。一般來說,簡單的 Java項目依賴的構件都可以在這裡下載到。中央倉庫不需要配置,但需要通過網路才能訪問。maven 社區提供了一個網站用來搜索瀏覽中央倉庫的內容:https://central.sonatype.com/;通過該網站可以方便搜索查看相應的構件。
1.4.3、遠程倉庫
如果 Maven 在中央倉庫中也找不到依賴的文件,它會停止構建過程並輸出錯誤信息到控制台。為避免這種情況,Maven 提供了遠程倉庫的概念,它是開發人員自己定製倉庫,包含了所需要的代碼庫或者其他工程中用到的 jar 文件。
1.4.4、Maven 依賴搜索順序
當我們執行 Maven 構建命令時,Maven 會按照以下順序查找依賴的庫:
步驟 1 - 在本地倉庫中搜索,如果找不到,執行步驟 2,如果找到了則執行其他操作。
步驟 2 - 在中央倉庫中搜索,如果找不到,並且有一個或多個遠程倉庫已經設置,則執行步驟 4,如果找到了則下載到本地倉庫。
步驟 3 - 如果沒有設置遠程倉庫,Maven 將簡單的停滯處理並拋出錯誤(無法找到依賴的文件)。
步驟 4 - 在一個或多個遠程倉庫中搜索依賴的文件,如果找到則下載到本地倉庫,否則 Maven 將停止處理並拋出錯誤(無法找到依賴的文件)。
2、安裝
在官網(https://maven.apache.org/download.cgi)下載安裝包並解壓,然後配置環境變數即可;這裡使用 3.8.8 版本安裝部署。
2.1、Windows 安裝
這裡假設 Maven 的解壓目錄為:D:\apache\apache-maven-3.8.8,新建用戶變數 MAVEN_HOME:
編輯用戶變數 Path,添加變數值:%MAVEN_HOME%\bin
打開 cmd,檢查安裝是否成功:
C:\Users\admin>mvn -version Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39) Maven home: D:\apache\apache-maven-3.8.8 Java version: 1.8.0_321, vendor: Oracle Corporation, runtime: D:\soft\Java\jdk1.8.0_321\jre Default locale: zh_CN, platform encoding: GBK OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
2.2、Linux 安裝
這裡假設 Maven 的解壓目錄為:/home/mongo/soft/apache-maven-3.8.8,編輯 ~/.bash_profile 設置環境變數:
export MAVEN_HOME=/home/mongo/soft/apache-maven-3.8.8 export PATH=$PATH:$MAVEN_HOME/bin
使配置生效:source ~/.bash_profile;然後檢查安裝是否成功:
app4:[/home/mongo] mvn -verion Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39) Maven home: /home/mongo/soft/apache-maven-3.8.8 Java version: 1.8.0_321, vendor: Oracle Corporation, runtime: /home/mongo/soft/jdk1.8.0_321/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"
參考:https://www.runoob.com/maven/maven-tutorial.html。