mvn clean -U -e -B -X的作用

在持續集成服務器上使用怎樣的 mvn 命令集成項目,這個問題乍一看答案很顯然,不就是 mvn clean install 麼?事實上比較好的集成命令會稍微複雜些,下面是一些總結:

  • 不要忘了clean: clean能夠保證上一次構建的輸出不會影響到本次構建。

  • 使用deploy而不是install: 構建的SNAPSHOT輸出應當被自動部署到私有Maven倉庫供他人使用,這一點在前面已經詳細論述。

  • 使用-U參數: 該參數能強制讓Maven檢查所有SNAPSHOT依賴更新,確保集成基於最新的狀態,如果沒有該參數,Maven默認以天爲單位檢查更新,而持續集成的頻率應該比這高很多。

  • 使用-e參數:如果構建出現異常,該參數能讓Maven打印完整的stack trace,以方便分析錯誤原因。

  • 使用-Dmaven.repo.local參數:如果持續集成服務器有很多任務,每個任務都會使用本地倉庫,下載依賴至本地倉庫,爲了避免這種多線程使用本地倉庫可能會引起的衝突,可以使用-Dmaven.repo.local=/home/juven/ci/foo-repo/這樣的參數爲每個任務分配本地倉庫。

  • 使用-B參數:該參數表示讓Maven使用批處理模式構建項目,能夠避免一些需要人工參與交互而造成的掛起狀態。

  • 使用-X參數:開啓DEBUG模式。

綜上,持續集成服務器上的集成命令應該爲 mvn clean deploy -B -e -U -Dmaven.repo.local=xxx 。此外,定期清理持續集成服務器的本地Maven倉庫也是個很好的習慣,這樣可以避免浪費磁盤資源,幾乎所有的持續集成服務器軟件都支持本地的腳本任務,你可以寫一行簡單的shell或bat腳本,然後配置以天爲單位自動清理倉庫。需要注意的是,這麼做的前提是你有私有Maven倉庫,否則每次都從Internet下載所有依賴會是一場噩夢。

 

 

mvn clean install

生命週期階段 描述

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 在真正的打包之前,執行一些準備打包必要的操作。這通常會產生一個包的展開的處理過的版本(將會在Maven 2.1+中實現)
package 將編譯好的代碼打包成可分發的格式,如JAR,WAR,或者EAR
pre-integration-test 執行一些在集成測試運行之前需要的動作。如建立集成測試需要的環境
integration-test 如果有必要的話,處理包併發布至集成測試可以運行的環境
post-integration-test 執行一些在集成測試運行之後需要的動作。如清理集成測試環境。
verify 執行所有檢查,驗證包是有效的,符合質量規範
install 安裝包至本地倉庫,以備本地的其它項目作爲依賴使用
deploy 複製最終的包至遠程倉庫,共享給其它開發人員和項目(通常和一次正式的發佈相關)


mvn jar:jar     JAR打包默認的目標

生命週期階段 目標

process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package jar:jar
install install:install
deploy deploy:deploy


POM打包默認的目標

生命週期階段 目標

package site:attach-descriptor
install install:install
deploy deploy:deploy


EJB打包默認的目標

生命週期階段 目標

process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package ejb:ejb
install install:install
deploy deploy:deploy

Maven提供了對EJB 2和3的支持。必須配置EJB插件來爲EJB3指定打包類型,否則該插件默認認爲EJB爲2.1,並尋找某些EJB配置文件是否存在。

WAR打包默認的目標

生命週期階段 目標

process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package war:war
install install:install
deploy deploy:deploy

注意war:war插件需要一個web.xml配置文件在項目的src/main/webapp/WEB-INF目錄中。

EAR打包默認的目標 生命週期階段 目標

generate-resources ear:generate-application-xml
process-resources resources:resources
package ear:ear
install install:install
deploy deploy:deploy
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章