Maven的命令,比如mvn compile、mvn install、mvn package等,一直讓我很迷惑,如果理解了maven的默認生命週期,那麼這都不是事了。
maven默認有23個階段,如下:
生命週期階段 | 描述 |
---|---|
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(部署) | 將最終的項目包複製到遠程倉庫中與其他開發者和項目共享。 |
如果執行一個命令,那麼此命令對應的階段之前的都會執行,比如執行命令:mvn package,那麼package之前的階段都會被執行,當然也包括package,但是後面的例如verify、install等都不會被執行
說到這裏不得不提到有三個互相不干擾的生命週期
1、clean
2、default
3、site
比如說一個命令:mvn clean install,應該很常見,clean屬於clean週期,install屬於default週期的,可以同時使用,但估計很少見到如下的命令:mvn compile install 爲什麼呢?
原因就在於compile和install都屬於default週期,只要執行了install命令,自然默認就會執行compile命令