Maven生命週期
- CleanLifecycle:在構建之前完成清理
- DefaulLifecycle:構建核心部分,包括:編譯,測試,打包,部署等
- SiteLifecycle:生成項目報告,站點,發佈站點
注意:不同的生命週期是相互獨立的。可以獨立完成。
CleanLifecycle生命週期
clean生命週期的各個階段:
Clean生命週期 | |
---|---|
pre-clean | 執行一些需要在clean之前完成的工作 |
clean | 移除所有上一次構建生成的文件 |
post-clean | 執行一些需要在clean之後立刻完成的工作 |
命令:
- mvn pre-clean
- mvn clean
- mvn post-clean
注意:生命週期後一個階段包含了前面所有的階段,即執行mvn post-clean
時,mvn pre-clean
,mvn clean
都會被執行,等同於 mvn pre-clean clean post clean
,用以簡化命令行的輸入。
DefaulLifecycle生命週期
default生命週期的各個階段
default生命週期 | |
---|---|
validate | 驗證項目是否正確,以及所有爲了完整構建必要的信息是否可用 |
generate-sources | 生成所有需要包含在編譯過程中的源代碼 |
process-sources | 處理源代碼,比如過濾一些值 |
generate-resources | 生成所有需要包含在打包過程中的資源文件 |
process-resources | 複製並處理資源文件至目標目錄,準備打包 |
compile | 編譯項目的源代碼 |
process-classes | 處理編譯生成的文件,例如對Java類進行字節碼增強(bytecode enhancement) |
generate-test-sources | 生成所有包含在測試編譯過程中的測試源碼 |
process-test-sources | 處理測試源碼,比如過濾一些值 |
generate-test-resources | 生成測試需要的資源文件 |
process-test-resources | 複製並處理測試資源文件至測試目標目錄 |
test-compile | 編譯測試源碼至測試目標目錄 |
test | 使用合適的單元測試框架運行測試。這些測試應該不需要代碼被打包或發佈 |
prepare-package | 在真正的打包之前,執行一些準備打包必要的操作 |
package | 將編譯好的代碼打包成可分發的格式,如JAR,WAR,或者EAR |
pre-integration-test | 執行一些在集成測試運行之前需要的動作。如建立集成測試需要的環境 |
integration-test | 如果有必要的話,處理包併發布至集成測試可以運行的環境 |
post-integration-test | 執行一些在集成測試運行之後需要的動作。如清理集成測試環境。 |
verify | 執行所有檢查,驗證包是有效的,符合質量規範 |
install | 安裝包至本地倉庫,以備本地的其它項目作爲依賴使用 |
deploy | 複製最終的包至遠程倉庫,共享給其它開發人員和項目(通常和一次正式的發佈相關) |
類似於clean生命週期,後面的命令也包含前面的操作,但是可以通過一些方式跳過某些階段,如:跳過測試階段(mvn install -DskipTest)
site生命週期
site生命週期的各個階段
Site生命週期 | |
---|---|
pre-site | 執行一些需要在生成站點文檔之前完成的工作 |
site | 生成項目的站點文檔 |
post-site | 執行一些需要在生成站點文檔之後完成的工作,並且爲部署做準備 |
site-deploy | 將生成的站點文檔部署到特定的服務器上 |
Maven插件
maven中能夠執行的所有命令都是由插件完成的,maven本質上是一個插件框架。
maven官方提供的插件列表
執行maven插件的語法:
mvn [plugin-name]:[goal-name]
例:
mvn compiler:compile
maven提供的兩種插件類型
- 構建插件:在生成過程中執行,並應在pom.xml中的元素進行配置
- 報告插件:在網站生成期間執行的,應該在pom.xml中的元素進行配置
Maven命令
maven命令的兩種格式
mvn [plugin-name]:[goal-name]
:指定執行的插件及插件目標mvn [lifecycle]
:將插件目標與生命週期綁定
常用的maven命令
Maven常用命令列表 | |
---|---|
mvn –version | 顯示版本信息 |
mvn clean | 清理項目生產的臨時文件,一般是模塊下的target目錄 |
mvn compile | 編譯源代碼,一般編譯模塊下的src/main/java目錄 |
mvn package | 項目打包工具,會在模塊下的target目錄生成jar或war等文件 |
mvn test | 測試命令,或執行src/test/java/下junit的測試用例 |
mvn install | 將打包的jar/war文件複製到你的本地倉庫中,供其他模塊使用 |
mvn deploy | 將打包的文件發佈到遠程參考,提供其他人員進行下載依賴 |
mvn site | 生成項目相關信息的網站 |
mvn eclipse:eclipse | 將項目轉化爲Eclipse項目 |
mvn dependency:tree | 打印出項目的整個依賴樹 |
mvn archetype:generate | 創建Maven的普通java項目 |
mvn tomcat:run | 在tomcat容器中運行web應用 |
mvn jetty:run | 調用 Jetty 插件的 Run 目標在 Jetty Servlet 容器中啓動 web 應用 |
注意:運行maven命令的時候,首先需要定位到maven項目的目錄,也就是項目的pom.xml文件所在的目錄。否則,必以通過參數來指定項目的目錄。
命令行參數
命令行參數 | |
---|---|
-D | 傳入屬性參數,如mvn package -Dmaven.test.skip=true ,跳過單元測試打包 |
-P | 使用指定的Profile配置 |
**-e ** | 顯示maven運行出錯的信息 |
-o | 離線執行命令,即不去遠程倉庫更新包 |
-X | 顯示maven允許的debug信息 |
-U | 強制去遠程更新snapshot的插件或依賴,默認每天只更新一次 |
Maven倉庫
maven用戶拉取依賴流程圖
注意:虛線爲可以沒有的倉庫。首先會從本地倉庫獲取,如果本地沒有的Maven回去遠程倉庫中獲取依賴。
maven倉庫的種類
- 本地倉庫
- 遠程倉庫
- 中央倉庫
- 鏡像倉庫
- 私服
國內知名的鏡像倉庫
- 阿里Maven鏡像庫
- 華爲Maven鏡像庫
主流的私服
- Archiva(Apache)
- Artifactory(JFrog)
- Nexus(Sonatype)
Maven項目結構
- src
- main
- java 具體源碼目錄
- resource 具體項目資源目錄
- test
- java 測試源碼目錄
- resource 測試資源目錄
- main
- pom.xml
Maven版本管理
- SNAPSHOT:頻繁發佈的版本,發佈時會帶上時間,可以重複發佈爲一個版本號。
- LATEST:最新發布的版本。
- RELEASE:穩定版本,同一個版本號的穩定版只能發佈一次。
Maven依賴關係
- 依賴
- 繼承
- 聚合
Maven可繼承的POM 元素列表如下:
groupId :項目組 ID ,項目座標的核心元素;
version :項目版本,項目座標的核心元素;
description :項目的描述信息;
organization :項目的組織信息;
inceptionYear :項目的創始年份;
url :項目的 url 地址
develoers :項目的開發者信息;
contributors :項目的貢獻者信息;
distributionManagerment:項目的部署信息;
issueManagement :缺陷跟蹤系統信息;
ciManagement :項目的持續繼承信息;
scm :項目的版本控制信息;
mailingListserv :項目的郵件列表信息;
properties :自定義的 Maven 屬性;
dependencies :項目的依賴配置;
dependencyManagement:醒目的依賴管理配置;
repositories :項目的倉庫配置;
build :包括項目的源碼目錄配置、輸出目錄配置、插件配置、插件管理配置等;
reporting :包括項目的報告輸出目錄配置、報告插件配置等。