1. 程式人生 > >pom.xml中build標籤

pom.xml中build標籤

1.分類

       (1)全域性配置(project build)

                 針對整個專案的所有情況都有效

       (2)配置(profile build)

                 針對不同的profile配置

  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4. http://maven.apache.org/maven-v4_0_0.xsd"
    >
  5. <!– "Project Build" contains more elements than just the BaseBuild set –>
  6. <build></build>
  7. <profiles>
  8. <profile>
  9. <!– "Profile Build" contains a subset of "Project Build"s elements –>
  10. <build></build>
  11. </profile>
  12. </profiles
    >
  13. </project>

2.配置說明

       (1)基本元素

  1. <build>
  2. <defaultGoal>install</defaultGoal>
  3. <directory>${basedir}/target</directory>
  4. <finalName>${artifactId}-${version}</finalName>
  5. <filters>
  6. <filter>filters/filter1.properties</filter
    >
  7. </filters>
  8. ...
  9. </build>
               1)defaultGoal

                    執行build任務時,如果沒有指定目標,將使用的預設值。

                    如上配置:在命令列中執行mvn,則相當於執行mvn install

              2)directory                      build目標檔案的存放目錄,預設在${basedir}/target目錄

              3)finalName

                     build目標檔案的名稱,預設情況為${artifactId}-${version}

              4)filter

                     定義*.properties檔案,包含一個properties列表,該列表會應用到支援filter的resources中。

                     也就是說,定義在filter的檔案中的name=value鍵值對,會在build時代替${name}值應用到resources中。

                     maven的預設filter資料夾為${basedir}/src/main/filters

        (2)Resources配置

                 用於包含或者排除某些資原始檔

  1. <build>
  2. ...
  3. <resources>
  4. <resource>
  5. <targetPath>META-INF/plexus</targetPath>
  6. <filtering>false</filtering>
  7. <directory>${basedir}/src/main/plexus</directory>
  8. <includes>
  9. <include>configuration.xml</include>
  10. </includes>
  11. <excludes>
  12. <exclude>**/*.properties</exclude>
  13. </excludes>
  14. </resource>
  15. </resources>
  16. <testResources>
  17. ...
  18. </testResources>
  19. ...
  20. </build>
              1)resources

                    一個resources元素的列表。每一個都描述與專案關聯的檔案是什麼和在哪裡

              2)targetPath

                    指定build後的resource存放的資料夾,預設是basedir。

                    通常被打包在jar中的resources的目標路徑是META-INF

             3)filtering

                    true/false,表示為這個resource,filter是否啟用              4)directory

                    定義resource檔案所在的資料夾,預設為${basedir}/src/main/resources

             5)includes

                    指定哪些檔案將被匹配,以*作為萬用字元

             6)excludes

                   指定哪些檔案將被忽略

             7)testResources

                   定義和resource類似,只不過在test時使用

        (3)plugins配置

                  用於指定使用的外掛

  1. <build>
  2. ...
  3. <plugins>
  4. <plugin>
  5. <groupId>org.apache.maven.plugins</groupId>
  6. <artifactId>maven-jar-plugin</artifactId>
  7. <version>2.0</version>
  8. <extensions>false</extensions>
  9. <inherited>true</inherited>
  10. <configuration>
  11. <classifier>test</classifier>
  12. </configuration>
  13. <dependencies>...</dependencies>
  14. <executions>...</executions>
  15. </plugin>
  16. </plugins>
  17. </build>
                1)GAV

                      指定外掛的標準座標

                2)extensions

                      是否載入plugin的extensions,預設為false

                3)inherited

                      true/false,這個plugin是否應用到該pom的孩子pom,預設為true

                4)configuration

                      配置該plugin期望得到的properties

                5)dependencies

                      作為plugin的依賴

                6)executions

                      plugin可以有多個目標,每一個目標都可以有一個分開的配置,可以將一個plugin繫結到不同的階段

                      假如繫結antrun:run目標到verify階段

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <artifactId>maven-antrun-plugin</artifactId>
  5. <version>1.1</version>
  6. <executions>
  7. <execution>
  8. <id>echodir</id>
  9. <goals>
  10. <goal>run</goal>
  11. </goals>
  12. <phase>verify</phase>
  13. <inherited>false</inherited>
  14. <configuration>
  15. <tasks>
  16. <echo>Build Dir: ${project.build.directory}</echo>
  17. </tasks>
  18. </configuration>
  19. </execution>
  20. </executions>
  21. </plugin>
  22. </plugins>
  23. </build>
                           id:標識,用於和其他execution區分。當這個階段執行時,它將以這個形式展示[plugin:goal execution: id]。在這裡為: [antrun:run execution: echodir]                            goals:目標列表

                          phase:目標執行的階段

                          inherit:子類pom是否繼承

                          configuration:在指定目標下的配置

        (4)pluginManagement配置

                   pluginManagement的配置和plugins的配置是一樣的,只是用於繼承,使得可以在孩子pom中使用。

                   父pom:

  1. <build>
  2. ...
  3. <pluginManagement>
  4. <plugins>
  5. <plugin>
  6. <groupId>org.apache.maven.plugins</groupId>
  7. <artifactId>maven-jar-plugin</artifactId>
  8. <version>2.2</version>
  9. <executions>
  10. <execution>
  11. <id>pre-process-classes</id>
  12. <phase>compile</phase>
  13. <goals>
  14. <goal>jar</goal>
  15. </goals>
  16. <configuration>
  17. <classifier>pre-process</classifier>
  18. </configuration>
  19. </execution>
  20. </executions>
  21. </plugin>
  22. </plugins>
  23. </pluginManagement>
  24. ...
  25. </build>
                 則在子pom中,我們只需要配置:
  1. <build>
  2. ...
  3. <plugins>
  4. <plugin>
  5. <groupId>org.apache.maven.plugins</groupId>
  6. <artifactId>maven-jar-plugin</artifactId>
  7. </plugin>
  8. </plugins>
  9. ...
  10. </build>
               這樣就大大簡化了孩子pom的配置