• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • Maven教程
    Maven常用命令應用
    Maven修改倉庫地址
    使用Eclipse創建Maven項目
    Maven插件
    Maven打包
    Maven項目導入及轉換

    Maven構建生命周期

     

     

    Maven 的構建機制,是圍繞生命周期(lifecycle)這個概念進行構建的。這意味著構建和發布一個項目的整個過程是預先被定義了的。采用這種方式進行項目構建,可以讓用戶在學習很少的一部分命令的情況下通過 POM 對項目進行構建。

     

    Maven 本質上是一個插件框架,它的核心并不執行任何具體的構建任務,僅僅定義了抽象的生命周期,所有這些任務都交給插件來完成的。將生命周期的階段與插件目標互相綁定,就可以在特定的階段完成具體的構建任務, Maven 的生命周期是抽象的,這意味著生命周期本身不做任何實際的工作,在 Maven 的設計中,實際的任務都交由插件來完成。生命周期抽象了構建的各個步驟,定義了它們的次序,利用插件機制具體實現。每個構建步驟都可以綁定一個或多個插件行為。

     

    在 Maven 中,內建了三種構建生命周期:default、clean、site。default 生命周期處理項目的部署,clean 生命周期處理項目構建后的清理工作,site 生命周期對項目的站點文檔進行生成。

     

    Maven 的生命周期,又是由不同的階段(phase)構成的。每一個生命周期,都包含了一系列的階段,每一個階段都表示了生命周期中的一個狀態。比如,對于 default 生命周期來說,包含了如下的這些階段:

     

     

    階段

    處理

    描述

    驗證 validate

    驗證項目

    驗證項目是否正確且所有必須信息是可用的

    編譯 compile

    執行編譯

    源代碼編譯在此階段完成

    測試 Test

    測試

    使用適當的單元測試框架(例如JUnit)運行測試。

    包裝 package

    打包

    創建JAR/WAR包如在 pom.xml 中定義提及的包

    檢查 verify

    檢查

    對集成測試的結果進行檢查,以保證質量達標

    安裝 install

    安裝

    安裝打包的項目到本地倉庫,以供其他項目使用

    部署 deploy

    部署

    拷貝最終的工程包到遠程倉庫中,以共享給其他開發人員和工程

     

    為了完成 default 生命周期,這些階段(包括其他未在上面羅列的生命周期階段)將被按順序地執行。

     

    Maven 有以下三個標準的生命周期:

     

    ? clean:項目清理的處理

     

    ? default(或 build):項目部署的處理

     

    ? site:項目站點文檔創建的處理

     

    構建階段由插件目標構成

     

    一個插件目標代表一個特定的任務(比構建階段更為精細),這有助于項目的構建和管理。這些目標可能被綁定到多個階段或者無綁定。不綁定到任何構建階段的目標可以在構建生命周期之外通過直接調用執行。這些目標的執行順序取決于調用目標和構建階段的順序。

     

    例如,考慮下面的命令:

     

    clean 和 pakage 是構建階段,dependency:copy-dependencies 是目標

     

    mvn clean dependency:copy-dependencies package

     

    這里的 clean 階段將會被首先執行,然后 dependency:copy-dependencies 目標會被執行,最終 package 階段被執行。

     

     

    Clean 生命周期

     

    當我們執行 mvn post-clean 命令時,Maven 調用 clean 生命周期,它包含以下階段:

     

    ? pre-clean:執行一些需要在clean之前完成的工作

     

    ? clean:移除所有上一次構建生成的文件

     

    ? post-clean:執行一些需要在clean之后立刻完成的工作

     

    mvn clean 中的 clean 就是上面的 clean,在一個生命周期中,運行某個階段的時候,它之前的所有階段都會被運行,也就是說,如果執行 mvn clean 將運行以下兩個生命周期階段:

     

    pre-clean, clean

     

    如果我們運行 mvn post-clean ,則運行以下三個生命周期階段:

     

    pre-clean, clean, post-clean

     

    我們可以通過在上面的 clean 生命周期的任何階段定義目標來修改這部分的操作行為。

     

    在下面的例子中,我們將 maven-antrun-plugin:run 目標添加到 pre-clean、clean 和 post-clean 階段中。這樣我們可以在 clean 生命周期的各個階段顯示文本信息。

     

    我們已經在 C:\MVN\project 目錄下創建了一個 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.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>

     

    現在打開命令控制臺,跳轉到 pom.xml 所在目錄,并執行下面的 mvn 命令。

     

    C:\MVN\project>mvn post-clean

     

    Maven 將會開始處理并顯示 clean 生命周期的所有階段。

     

    [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] ------------------------------------------------------------------

     

    你可以嘗試修改 mvn clean 命令,來顯示 pre-clean 和 clean,而在 post-clean 階段不執行任何操作。

     

     

    Default (Build) 生命周期


    這是 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(部署)

    將最終的項目包復制到遠程倉庫中與其他開發者和項目共享。

     

    有一些與 Maven 生命周期相關的重要概念需要說明:

     

    當一個階段通過 Maven 命令調用時,例如 mvn compile,只有該階段之前以及包括該階段在內的所有階段會被執行。

     

    不同的 maven 目標將根據打包的類型(JAR / WAR / EAR),被綁定到不同的 Maven 生命周期階段。

     

    在下面的例子中,我們將 maven-antrun-plugin:run 目標添加到 Build 生命周期的一部分階段中。這樣我們可以顯示生命周期的文本信息。

     

    我們已經更新了 C:\MVN\project 目錄下的 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>

     

    現在打開命令控制臺,跳轉到 pom.xml 所在目錄,并執行以下 mvn 命令。

     

    C:\MVN\project>mvn compile

     

    Maven 將會開始處理并顯示直到編譯階段的構建生命周期的各個階段。

     

    [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] ------------------------------------------------------------------

     

     

    命令行調用

     

    在開發環境中,使用下面的命令去構建、安裝工程到本地倉庫

     

    mvn install

     

    這個命令在執行 install 階段前,按順序執行了 default 生命周期的階段 (validate,compile,package,等等),我們只需要調用最后一個階段,如這里是 install。

     

    在構建環境中,使用下面的調用來純凈地構建和部署項目到共享倉庫中

     

    mvn clean deploy

     

    這行命令也可以用于多模塊的情況下,即包含多個子項目的項目,Maven 會在每一個子項目執行 clean 命令,然后再執行 deploy 命令。

     

     

    Site生命周期

     

    Maven Site 插件一般用來創建新的報告文檔、部署站點等。

     

    ? pre-site:執行一些需要在生成站點文檔之前完成的工作

     

    ? site:生成項目的站點文檔

     

    ? post-site: 執行一些需要在生成站點文檔之后完成的工作,并且為部署做準備

     

    ? site-deploy:將生成的站點文檔部署到特定的服務器上

     

    這里經常用到的是site階段和site-deploy階段,用以生成和發布Maven站點,這可是Maven相當強大的功能,Manager比較喜歡,文檔及統計數據自動生成,很好看。 在下面的例子中,我們將 maven-antrun-plugin:run 目標添加到 Site 生命周期的所有階段中。這樣我們可以顯示生命周期的所有文本信息。

     

    我們已經更新了 C:\MVN\project 目錄下的 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.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>

     

    現在打開命令控制臺,跳轉到 pom.xml 所在目錄,并執行以下 mvn 命令。

     

    C:\MVN\project>mvn site

     

    Maven 將會開始處理并顯示直到 site 階段的 site 生命周期的各個階段。

     

    [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] ------------------------------------------------------------------```

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏