maven(平臺組內部分享四)

2.構建生命周期

1)簡介與打包相關生命周期

一個構建生命周期是一組精心組織的有序的階段,它的存在能使所有注冊的目標變得有序運行。這些目標根據(jù)項目的打包類型被選擇并綁定。Maven中有三種標準的生命周期:清理(clean),默認(default)(有時候也稱為構建),和站點(site)

默認的整個過程,生命周期階段與描述如下:

validate 驗證項目是否正確,以及所有為了完整構建必要的信息是否可用

generate-sources 生成所有需要包含在編譯過程中的源代碼

process-sources 處理源代碼,比如過濾一些值

generate-resources 生成所有需要包含在打包過程中的資源文件

process-resources 復制并處理資源文件至目標目錄,準備打包

compile 編譯項目的源代碼

process-classes 后處理編譯生成的文件,例如對Java類進行字節(jié)碼增強(bytecode enhancement)

generate-test-sources 生成所有包含在測試編譯過程中的測試源碼

process-test-sources 處理測試源碼,比如過濾一些值

generate-test-resources 生成測試需要的資源文件

process-test-resources 復制并處理測試資源文件至測試目標目錄

test-compile 編譯測試源碼至測試目標目錄

test 使用合適的單元測試框架運行測試。這些測試應該不需要代碼被打包或發(fā)布

prepare-package 在真正的打包之前,執(zhí)行一些準備打包必要的操作。這通常會產生一個包的展開的處理過的版本

package 將編譯好的代碼打包成可分發(fā)的格式,如JAR,WAR,或者EAR

pre-integration-test 執(zhí)行一些在集成測試運行之前需要的動作。如建立集成測試需要的環(huán)境

integration-test 如果有必要的話,處理包并發(fā)布至集成測試可以運行的環(huán)境

post-integration-test 執(zhí)行一些在集成測試運行之后需要的動作。如清理集成測試環(huán)境。

verify 執(zhí)行所有檢查,驗證包是有效的,符合質量規(guī)范

install 安裝包至本地倉庫,以備本地的其它項目作為依賴使用

deploy 復制最終的包至遠程倉庫,共享給其它開發(fā)人員和項目(通常和一次正式的發(fā)布相關)

打包相關生命周期有所差異,在打包階段會根據(jù)packing走不同的插件目標。

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

Maven Plugin生命周期階段和目標

generate-resources? ? ? ? ? ? ? plugin:descriptor

process-resources? ? ? ? ? ? ? ? resources:resources

compile? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?compiler:compile

process-test-resources? ? ? ? ?resources:testResources

test-compile? ? ? ? ? ? ? ? ? ? ? ? ? compiler:testCompile

test? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? surefire:test

package? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? jar:jar, plugin:addPluginArtifactMetadata

install? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? install:install, plugin:updateRegistry

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

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

EAR生命周期階段和目標

generate-resources? ? ? ? ? ? ? ?ear:generate-application-xml

process-resources? ? ? ? ? ? ? ? resources:resources

package? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ear:ear

install? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? install:install

deploy? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?deploy:deploy

2)通用生命周期目標

[1] resources替換

替換屬性,有src/main/resources/service.xml,屬性值在src/main/filters/default.properties中定義,此屬性可以在不同的位置定義,并且可以針對不同環(huán)境替換不同的值。最終過濾資源替換屬性。將properties中的值替換到xml中。filter需要為true,以為你默認是不過濾的

service.xml
default.properties
替換

資源列表默認的在src/main/resources,如果你有需求,則可以定義多個。

多資源列表

[2] compile

可以為插件設置source和target版本,源碼遵循版本和目標版本。同時也可以設置源碼位置和目標位置,但實際最好不要這么做,最好的方式是遵循大部分的約定。

源碼和目標

[3]?Test Compile

test-compile階段基本上和compile階段一致。唯一的不同是會調用compile:testCompile編譯測試源代碼目錄至測試構建構建輸出目錄。如果你沒有在超級POM中自定義默認目錄,compile:testCompile將會編譯src/test/java中的源碼至target/test-classes目錄。類似源代碼目錄,如果你想要自定義測試源碼目錄和測試編譯輸出目錄的位置,你可以覆蓋testSourceDirectory和testOutputDirectory。

[4]?Test Compile

大部分生命周期綁定Surefire插件的test目標至test階段。Surefire插件是Maven的單元測試插件,Surefire默認的行為是尋找測試源碼目錄下所有以*Test結尾的類,以JUnit測試的形式運行它們。Surefire插件也可以配置成運行TestNG單元測試。

運行過mvn test之后,你應該注意到Surefire在target/surefire-reports目錄生成了許多報告。該目錄內每個Surefire插件運行過的測試都會有相關的兩個文件:一個是包含測試運行信息的XML文檔,另一個是包含單元測試輸出的文本文件。如果測試階段有問題,單元測試失敗了,你可以使用Maven的輸出以及該目錄下的內容來追查測試失敗的原因。在站點生成的時候,surefire-reports/目錄的內容會被用來創(chuàng)建報告,使項目所有單元測試的總體情況清晰明了。

如果你工作的項目有一些失敗的單元測試,同時你想讓項目生成輸出,你需要配置Surefire插件在遇到失敗的情況下繼續(xù)一個構建。當遇到單元測試失敗的時候,默認行為是停止構建。要覆蓋這種行為,你需要設置Surefire插件的testFailureIgnore配置屬性為true。

配置Surefire忽略單元測試失敗

如果你想要整個的跳過測試,你可以運行如下的命令:$ mvn install -Dmaven.test.skip=true

maven.test.skip變量同時控制Compiler和Surefire插件,如果你傳入maven.test.skip,就等于告訴Maven整個的跳過測試。

[5]?Test Compile

Install插件的install目標基本上都是綁定到install生命周期階段。install:install目標只不過是將項目的主要構件安裝到本地倉庫。

[6]?Deploy

Deploy插件的deploy目標通常綁定到deploy生命周期階段。該階段用來將一個構件部署到遠程Maven倉庫,當你執(zhí)行一次發(fā)布的時候通常需要更新遠程倉庫。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 一。安裝 1.安裝檢查 下載地址:http://maven.apache.org/ download.html 下...
    跑不動了閱讀 404評論 0 0
  • 所有項目的構建都是有生命周期的,這個生命周期包括:項目清理、初始化、編譯、測試、打包、集成測試、驗證、部署、站點生...
    zlcook閱讀 3,008評論 0 21
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,586評論 19 139
  • 生命周期是maven的又一大核心,maven的生命周期是抽象的,而實際行為都是以插件的方式來完成的,下面我將對生命...
    小煉君閱讀 1,315評論 0 50
  • 我認為《紅樓夢》的偉大之處在于它體現(xiàn)了一種敗落的趨勢,不管是家族的,愛情的,還是仕途的,都是走向沒落,在愛...
    余慧hhhh哥哥閱讀 216評論 0 0

友情鏈接更多精彩內容