Maven 構(gòu)建生命周期

Maven 構(gòu)建生命周期

構(gòu)建生命周期是什么眉抬?

構(gòu)建生命周期階段的目標(biāo)是執(zhí)行順序是一個(gè)良好定義的序列渔隶。
這里使用一個(gè)例子录粱,一個(gè)典型的 Maven 構(gòu)建生命周期是由下列順序的階段:

階段 處理 描述
準(zhǔn)備資源 資源復(fù)制 資源復(fù)制可以進(jìn)行定制
編譯 執(zhí)行編譯 源代碼編譯在此階段完成
包裝 打包 創(chuàng)建JAR/WAR包如在 pom.xml 中定義提及的包
安裝 安裝 這一階段在本地/遠(yuǎn)程Maven倉庫安裝程序包

可用于注冊必須執(zhí)行一個(gè)特定的階段之前或之后的目標(biāo)衣赶,有之前處理和之后階段。
當(dāng) Maven 開始建立一個(gè)項(xiàng)目匹颤,它通過定義序列階段步驟和執(zhí)行注冊的每個(gè)階段的目標(biāo)仅孩。 Maven有以下三種標(biāo)準(zhǔn)的生命周期:

  • clean
  • default(或 build)
  • site

目標(biāo)代表一個(gè)特定的任務(wù),它有助于項(xiàng)目的建設(shè)和管理印蓖×赡剑可以被綁定到零個(gè)或多個(gè)生成階段。一個(gè)沒有綁定到任何構(gòu)建階段的目標(biāo)赦肃,它的構(gòu)建生命周期可以直接調(diào)用執(zhí)行溅蛉。
執(zhí)行的順序取決于目標(biāo)和構(gòu)建階段折調(diào)用順序。例如他宛,考慮下面的命令船侧。清理和打包(mvn clean)參數(shù)的構(gòu)建階段,而 dependency:copy-dependencies package 是一個(gè)目標(biāo)厅各。

mvn clean dependency:copy-dependencies package

在這里镜撩,清潔的階段,將首先執(zhí)行队塘,然后是依賴關(guān)系:復(fù)制依賴性的目標(biāo)將被執(zhí)行袁梗,并終于將執(zhí)行包階段。

清潔生命周期

當(dāng)我們執(zhí)行命令 mvn clean 命令后憔古,Maven 調(diào)用清潔的生命周期由以下幾個(gè)階段組成:

  • pre-clean
  • clean
  • post-clean

Maven 清潔目標(biāo)(clean:clean)被綁定清潔干凈的生命周期階段遮怜。clean:clean 目標(biāo)刪除 build 目錄下的構(gòu)建輸出。因此鸿市,當(dāng) mvn clean 命令執(zhí)行時(shí)锯梁,Maven會(huì)刪除編譯目錄即碗。

目標(biāo)清潔生命周期在上述階段,我們可以自定義此行為涝桅。
在下面的示例中拜姿,我們將附加 maven-antrun-plugin:run 對目標(biāo)進(jìn)行預(yù)清潔,清潔和清潔后這三個(gè)階段冯遂。這將使我們能夠調(diào)用的信息顯示清理生命周期的各個(gè)階段。
現(xiàn)在來創(chuàng)建了一個(gè) pom.xml 文件在 *C:\MVN* 項(xiàng)目文件夾中谒获,具體內(nèi)容如下:

<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
   <plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-antrun-plugin</artifactId>
   <version>1.1</version>
   <executions>
      <execution>
         <id>id.pre-clean</id>
         <phase>pre-clean</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>pre-clean phase</echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.clean</id>
         <phase>clean</phase>
         <goals>
          <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>clean phase</echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.post-clean</id>
         <phase>post-clean</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>post-clean phase</echo>
            </tasks>
         </configuration>
      </execution>
   </executions>
   </plugin>
</plugins>
</build>
</project>

現(xiàn)在蛤肌,打開命令控制臺(tái),到該文件夾包含 pom.xml 并執(zhí)行以下 mvn 命令批狱。

C:\MVN\project>mvn post-clean

Maven將開始處理并顯示清理生命周期的所有階段裸准。

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-clean}]
[INFO] Executing tasks
     [echo] pre-clean phase
[INFO] Executed tasks
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
     [echo] clean phase
[INFO] Executed tasks
[INFO] [antrun:run {execution: id.post-clean}]
[INFO] Executing tasks
     [echo] post-clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------

你可以嘗試調(diào)整 mvn 清潔命令,該命令將顯示清潔前什么都不會(huì)被執(zhí)行赔硫。

默認(rèn)(或生成)生命周期

這是 Maven 主要的生命周期炒俱,用于構(gòu)建應(yīng)用程序。它有以下 23 個(gè)階段爪膊。

生命周期階段 描述
validate 驗(yàn)證項(xiàng)目是否正確权悟,并且所有必要的信息可用于完成構(gòu)建過程
initialize 建立初始化狀態(tài),例如設(shè)置屬性
generate-sources 產(chǎn)生任何的源代碼包含在編譯階段
process-sources 處理源代碼推盛,例如峦阁,過濾器值
generate-resources 包含在包中產(chǎn)生的資源
process-resources 復(fù)制和處理資源到目標(biāo)目錄,準(zhǔn)備打包階段
compile 編譯該項(xiàng)目的源代碼
process-classes 從編譯生成的文件提交處理耘成,例如:Java類的字節(jié)碼增強(qiáng)/優(yōu)化
generate-test-sources 生成任何測試的源代碼包含在編譯階段
process-test-sources 處理測試源代碼榔昔,例如,過濾器任何值
test-compile 編譯測試源代碼到測試目標(biāo)目錄
process-test-classes 處理測試代碼文件編譯生成的文件
test 運(yùn)行測試使用合適的單元測試框架(JUnit)
prepare-package 執(zhí)行必要的任何操作的實(shí)際打包之前準(zhǔn)備一個(gè)包
package 提取編譯后的代碼瘪菌,并在其分發(fā)格式打包撒会,如JAR,WAR或EAR文件
pre-integration-test 完成執(zhí)行集成測試之前所需操作师妙。例如诵肛,設(shè)置所需的環(huán)境
integration-test 處理并在必要時(shí)部署軟件包到集成測試可以運(yùn)行的環(huán)境
pre-integration-test 完成集成測試已全部執(zhí)行后所需操作。例如疆栏,清理環(huán)境
verify 運(yùn)行任何檢查曾掂,驗(yàn)證包是有效的,符合質(zhì)量審核規(guī)定
install 將包安裝到本地存儲(chǔ)庫壁顶,它可以用作當(dāng)?shù)仄渌?xiàng)目的依賴
deploy 復(fù)制最終的包到遠(yuǎn)程倉庫與其他開發(fā)者和項(xiàng)目共享

有涉及到Maven 生命周期值得一提幾個(gè)重要概念:

  • 當(dāng)一個(gè)階段是通過 Maven命令調(diào)用珠洗,例如:mvn compile,只有階段到達(dá)并包括這個(gè)階段才會(huì)被執(zhí)行若专。
  • 不同的 Maven 目標(biāo)綁定到 Maven生命周期的不同階段這是這取決于包類型(JAR/WAR/EAR)许蓖。

在下面的示例中,將附加 Maven 的 antrun 插件:運(yùn)行目標(biāo)構(gòu)建生命周期的幾個(gè)階段。這將使我們能夠回顯的信息顯示生命周期的各個(gè)階段膊爪。
我們已經(jīng)更新了在 C:\MVN\ 項(xiàng)目文件夾中的 pom.xml 文件自阱。

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
   <execution>
      <id>id.validate</id>
      <phase>validate</phase>
      <goals>
         <goal>run</goal>       </goals>
      <configuration>
         <tasks>
            <echo>validate phase</echo>
         </tasks>
      </configuration>
   </execution>
   <execution>
      <id>id.compile</id>
      <phase>compile</phase>
      <goals>
         <goal>run</goal>
      </goals>
      <configuration>
         <tasks>
            <echo>compile phase</echo>
         </tasks>
      </configuration>
   </execution>
   <execution>
      <id>id.test</id>
      <phase>test</phase>
      <goals>
         <goal>run</goal>
      </goals>
      <configuration>
         <tasks>
            <echo>test phase</echo>
         </tasks>
      </configuration>
   </execution>
   <execution>
         <id>id.package</id>
         <phase>package</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
         <tasks>
            <echo>package phase</echo>
         </tasks>
      </configuration>
   </execution>
   <execution>
      <id>id.deploy</id>
      <phase>deploy</phase>
      <goals>
         <goal>run</goal>
      </goals>
      <configuration>
      <tasks>
         <echo>deploy phase</echo>
      </tasks>
      </configuration>
   </execution>
</executions>
</plugin>
</plugins>
</build>
</project>

現(xiàn)在,打開命令控制臺(tái)米酬,進(jìn)入包含 pom.xml 并執(zhí)行以下 mvn 命令沛豌。

C:\MVN\project>mvn compile

編譯階段,Maven 將開始構(gòu)建生命周期的階段處理并顯示赃额。

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [compile]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.validate}]
[INFO] Executing tasks
     [echo] validate phase
[INFO] Executed tasks
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\project\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [antrun:run {execution: id.compile}]
[INFO] Executing tasks
     [echo] compile phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Sat Jul 07 20:18:25 IST 2012
[INFO] Final Memory: 7M/64M
[INFO] ------------------------------------------------------------------

網(wǎng)站的生命周期

Maven的網(wǎng)站插件通常用于創(chuàng)建新的文檔加派,創(chuàng)建報(bào)告,部署網(wǎng)站等跳芳。
階段

  • pre-site
  • site
  • post-site
  • site-deploy

在下面的示例中芍锦,我們將附加 maven-antrun-plugin:run 目標(biāo)網(wǎng)站的生命周期的所有階段。這將使我們能夠調(diào)用短信顯示的生命周期的各個(gè)階段飞盆。
現(xiàn)在更新 pom.xml 文件在 C:\MVN\ 項(xiàng)目文件夾中娄琉。

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
   <executions>
      <execution>
         <id>id.pre-site</id>
         <phase>pre-site</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>pre-site phase</echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.site</id>
         <phase>site</phase>
         <goals>
         <goal>run</goal>
         </goals>
         <configuration><tasks>
               <echo>site phase</echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.post-site</id>
         <phase>post-site</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>post-site phase</echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.site-deploy</id>
         <phase>site-deploy</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>site-deploy phase</echo>
            </tasks>
         </configuration>
      </execution>
   </executions>
</plugin>
</plugins>
</build>
</project>

打開命令控制臺(tái),進(jìn)入該文件夾包含 pom.xml 并執(zhí)行以下 mvn 命令吓歇。

C:\MVN\project>mvn site

Maven將開始處理并顯示網(wǎng)站的生命周期階段的各個(gè)階段孽水。

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [site]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-site}]
[INFO] Executing tasks
     [echo] pre-site phase
[INFO] Executed tasks
[INFO] [site:site {execution: default-site}]
[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Project Plugins" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.
[INFO] [antrun:run {execution: id.site}]
[INFO] Executing tasks
     [echo] site phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Sat Jul 07 15:25:10 IST 2012
[INFO] Final Memory: 24M/149M
[INFO] -
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市照瘾,隨后出現(xiàn)的幾起案子匈棘,更是在濱河造成了極大的恐慌,老刑警劉巖析命,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件主卫,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹃愤,警方通過查閱死者的電腦和手機(jī)簇搅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來软吐,“玉大人瘩将,你說我怎么就攤上這事“及遥” “怎么了姿现?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肖抱。 經(jīng)常有香客問我备典,道長,這世上最難降的妖魔是什么意述? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任提佣,我火速辦了婚禮吮蛹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拌屏。我一直安慰自己潮针,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布倚喂。 她就那樣靜靜地躺著每篷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪务唐。 梳的紋絲不亂的頭發(fā)上雳攘,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機(jī)與錄音枫笛,去河邊找鬼。 笑死刚照,一個(gè)胖子當(dāng)著我的面吹牛刑巧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播无畔,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼啊楚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浑彰?” 一聲冷哼從身側(cè)響起恭理,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎郭变,沒想到半個(gè)月后颜价,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诉濒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年周伦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片未荒。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡专挪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出片排,到底是詐尸還是另有隱情寨腔,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布率寡,位于F島的核電站迫卢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏勇劣。R本人自食惡果不足惜靖避,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一潭枣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧幻捏,春花似錦盆犁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至榛臼,卻和暖如春伊佃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沛善。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工航揉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人金刁。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓帅涂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親尤蛮。 傳聞我的和親對象是個(gè)殘疾皇子媳友,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 什么是構(gòu)建生命周期 構(gòu)建生命周期是一組階段的序列(sequence of phases),每個(gè)階段定義了目標(biāo)被執(zhí)行...
    小孩真笨閱讀 263評論 0 0
  • Maven 構(gòu)建生命周期定義了一個(gè)項(xiàng)目構(gòu)建跟發(fā)布的過程产捞。我們在開發(fā)項(xiàng)目的時(shí)候醇锚,不斷地在編譯、測試坯临、打包焊唬、部署等過程...
    41uLove閱讀 529評論 0 1
  • 什么是構(gòu)建生命周期 Maven的構(gòu)建過程被分解為構(gòu)建生命周期、階段和目標(biāo)尿扯。一個(gè)構(gòu)建周期由一系列的構(gòu)建階段組成求晶,每一...
    歐余山南閱讀 860評論 0 0
  • 所有項(xiàng)目的構(gòu)建都是有生命周期的,這個(gè)生命周期包括:項(xiàng)目清理衷笋、初始化芳杏、編譯、測試辟宗、打包爵赵、集成測試、驗(yàn)證泊脐、部署空幻、站點(diǎn)生...
    zlcook閱讀 2,753評論 0 21
  • 一個(gè)星期四的下午,我抬頭看著一朵不知像何方神圣的云容客。 我皺著眉頭看著天秕铛,還是媽媽最懂我:“我覺得像...
    瑞公主閱讀 335評論 0 1