Maven是一個優秀的項目管理工具,它可以幫你管理編譯、報告、文檔等。java
Maven的生命週期:服務器
maven的生命週期是抽象的,它自己並不作任何的工做。實際的工做都交由"插件"來完成。框架
maven的每一個構建步驟均可以綁定一個或多個插件行爲,並且maven爲大多數的構建步驟編寫並綁定了默認插件。maven
三套生命週期:工具
clean、default、sitepost
clean: 主要目的是清理項目單元測試
pre-clean: 執行一些清理前須要完成的工做測試
clean: 清理上一次構建生成的文件spa
post-clean: 執行一些清理後須要完成的工做.net
default:定義了真正構建時所須要執行的全部步驟,它是生命週期中最核心的部分
validate
initialize
generate-sources
process-sources: 處理項目主資源文件。通常來講,是對src/main/resources目錄的內容進行變量替換等工做後,複製到項目輸出的主classpath目錄中
generate-resources
process-resources
compile: 編譯項目的主源碼。通常來講,是編譯src/main/Java目錄下的Java文件至項目輸出的主classpath目錄中
process-classes
generate-test-sources
process-test-sources: 處理項目測試資源文件。通常來講,是對src/test/resources目錄的內容進行變量替換等工做後,複製到項目輸出的測試classpath目錄中
generate-test-resources
process-test-resources
test-compile: 編譯項目的測試代碼,通常來講,是編譯src/test/java目錄下的Java文件至項目輸出的測試classpath目錄中
process-test-classes
test: 使用單元測試框架運行測試,測試代碼不會打包或部署
prepare-package
package: 接受編譯好的代碼,打包成可發佈的格式,如JAR
pre-integration-test
integration-test
post-integration-test
verify
install: 將包安裝到Maven本地倉庫,供本地其餘Maven項目使用
deploy: 將最終的包複製到遠程倉庫,供其餘開發人員和Maven項目使用
site生命週期: 創建和發佈項目站點,Maven可以基於POM所包含的信息,自動生成站點
pre-site: 執行一些在生成項目站點以前須要完成的工做
site: 生成項目站點文檔
post-site: 執行一些在生成項目站點以後須要完成的工做
site-deploy: 將生成的項目站點發布到服務器上
Maven的生命週期的各個階段是先後階段相互依賴的,當用戶調用clean的時候,pre-clean 和 clean階段會順序執行,不會碰觸default的任何階段。
在命令行中的複雜調用和生命週期各個階段的執行狀況:
從三個例子來講明:
1.$mvn test : 該命令調用default生命週期的 test 階段。實際執行的階段爲default生命週期的validate到test的全部階段
2.$mvn clean install : 該命令調用clean生命週期的clean階段和default生命週期的install階段。實際執行的是clean生命週期的pre-clean、clean階段和default生命週期的validate到install的全部階段。該命令結合了兩個生命週期,是執行真正項目構建以前清理項目的一個很好的實踐。
3.$mvn clean deploy site-deploy : 該命令調用了clean生命週期的clean階段和default生命週期的deploy階段,以及site生命週期的site-deploy階段。實際執行的是clean生命週期的pre-clean、clean階段和default生命週期的全部階段,以及site生命週期的全部階段。
Maven的插件
Maven的核心分發包只有不到3MB的大小,Maven會在須要的時候下載並使用插件,對於插件自己,爲了可以複用代碼,它每每可以完成多個任務。Maven的生命週期與插件相互綁定,用以完成實際的構建任務。具體而言是生命週期的階段與插件的目標相互綁定,以完成某個具體的構建任務。
內置綁定
Maven在覈心爲一些主要的生命週期階段綁定了不少插件的目標
clean生命週期階段與插件目標的綁定關係
生命週期階段 | 插件目標 |
---|---|
pre-clean | |
clean | maven-clean-plugin:clean |
post-clean |
site生命週期階段與插件目標的綁定關係
生命週期階段 | 插件目標 |
---|---|
pre-site | |
site | maven-site-plugin:site |
post-site | |
site-deploy | maven-site-plugin:deploy |
default生命週期與內置插件綁定關係及具體任務(打包類型: jar)
生命週期階段 | 插件目標 | 執行任務 |
---|---|---|
process-resources | maven-resources-plugin:resources | 複製主資源文件至主輸出目錄 |
compile | maven-compile-plugin:compile | 編譯主代碼至主輸出目錄 |
process-test-resources | maven-resources-plugin:testRresources | 複製測試資源文件至測試輸出目錄 |
test-compile | maven-compiler-plugin:testCompile | 編譯測試代碼至測試輸出目錄 |
test | maven-surefire-plugin:test | 執行測試用例 |
package | maven-jar-plugin:jar | 建立項目jar包 |
install | maven-install-plugin:install | 將項目輸出構件安裝到本地倉庫 |
deploy | maven-deploy-plugin:deploy | 將項目輸出構件部署到遠程倉庫 |