Maven的pom.xml文件结构之Build配置build
From: https://blog.csdn.net/taiyangdao/article/details/52374125
在Maven的pom.xml文件中,Build相關(guān)配置包含兩個(gè)部分,一個(gè)是<build>,另一個(gè)是<reporting>,這里我們只介紹<build>。
1. 在Maven的pom.xml文件中,存在如下兩種<build>:
??? <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
????? ...
????? <!-- "Project Build" contains elements of the BaseBuild set and the Build set-->
????? <build>...</build>
??? ?
????? <profiles>
??????? <profile>
????????? <!-- "Profile Build" contains elements of the BaseBuild set only -->
????????? <build>...</build>
??????? </profile>
????? </profiles>
??? </project>
說(shuō)明:
一種<build>被稱(chēng)為Project Build,即是<project>的直接子元素。另一種<build>被稱(chēng)為Profile Build,即是<profile>的直接子元素。
Profile Build包含了基本的build元素,而Project Build還包含兩個(gè)特殊的元素,即各種<...Directory>和<extensions>。
2. Profile Build和Project Build共用的基本build元素
1) 示例如下:
??? <build>
????? <defaultGoal>install</defaultGoal>
????? <directory>${basedir}/target</directory>
????? <finalName>${artifactId}-${version}</finalName>
????? ...
??? </build>
說(shuō)明:
??? defaultGoal,執(zhí)行構(gòu)建時(shí)默認(rèn)的goal或phase,如jar:jar或者package等
??? directory,構(gòu)建的結(jié)果所在的路徑,默認(rèn)為${basedir}/target目錄
??? finalName,構(gòu)建的最終結(jié)果的名字,該名字可能在其他plugin中被改變
2) <resources>
資源往往不是代碼,無(wú)需編譯,而是一些properties或XML配置文件,構(gòu)建過(guò)程中會(huì)往往會(huì)將資源文件從源路徑復(fù)制到指定的目標(biāo)路徑。
<resources>給出各個(gè)資源在Maven項(xiàng)目中的具體路徑。示例如下:
????? <build>
??????? ...
??????? <filters>
????????? <filter>filters/filter1.properties</filter>
??????? </filters>
??????? <resources>
????????? <resource>
??????????? <targetPath>META-INF/plexus</targetPath>
??????????? <filtering>false</filtering>
??????????? <directory>${basedir}/src/main/plexus</directory>
??????????? <includes>
????????????? <include>configuration.xml</include>
??????????? </includes>
??????????? <excludes>
????????????? <exclude>**/*.properties</exclude>
??????????? </excludes>
????????? </resource>
??????? </resources>
??????? <testResources>
????????? ...
??????? </testResources>
??????? ...
????? </build>
說(shuō)明:
??? resources,build過(guò)程中涉及的資源文件
??????? targetPath,資源文件的目標(biāo)路徑
??????? filtering,構(gòu)建過(guò)程中是否對(duì)資源進(jìn)行過(guò)濾,默認(rèn)false
??????? directory,資源文件的路徑,默認(rèn)位于${basedir}/src/main/resources/目錄下
??????? includes,一組文件名的匹配模式,被匹配的資源文件將被構(gòu)建過(guò)程處理
??????? excludes,一組文件名的匹配模式,被匹配的資源文件將被構(gòu)建過(guò)程忽略。同時(shí)被includes和excludes匹配的資源文件,將被忽略。
??? filters,給出對(duì)資源文件進(jìn)行過(guò)濾的屬性文件的路徑,默認(rèn)位于${basedir}/src/main/filters/目錄下。屬性文件中定義若干鍵值對(duì)。在構(gòu)建過(guò)程中,對(duì)于資源文件中出現(xiàn)的變量(鍵),將使用屬性文件中該鍵對(duì)應(yīng)的值替換。
??? testResources,test過(guò)程中涉及的資源文件,默認(rèn)位于${basedir}/src/test/resources/目錄下。這里的資源文件不會(huì)被構(gòu)建到目標(biāo)構(gòu)件中
3) <plugins>
<plugins>給出構(gòu)建過(guò)程中所用到的插件。
????? <build>
??????? ...
??????? <plugins>
????????? <plugin>
??????????? <groupId>org.apache.maven.plugins</groupId>
??????????? <artifactId>maven-jar-plugin</artifactId>
??????????? <version>2.6</version>
??????????? <extensions>false</extensions>
??????????? <inherited>true</inherited>
??????????? <configuration>
????????????? <classifier>test</classifier>
??????????? </configuration>
??????????? <dependencies>...</dependencies>
??????????? <executions>...</executions>
????????? </plugin>
??????? </plugins>
????? </build>
說(shuō)明:
??? groupId
??? artifactId
??? version
??? extensions,是否加載該插件的擴(kuò)展,默認(rèn)false
??? inherited,該插件的configuration中的配置是否可以被(繼承該P(yáng)OM的其他Maven項(xiàng)目)繼承,默認(rèn)true
??? configuration,該插件所需要的特殊配置,在父子項(xiàng)目之間可以覆蓋或合并
??? dependencies,該插件所特有的依賴(lài)類(lèi)庫(kù)
??? executions,該插件的某個(gè)goal(一個(gè)插件中可能包含多個(gè)goal)的執(zhí)行方式。一個(gè)execution有如下設(shè)置:
??????? id,唯一標(biāo)識(shí)
??????? goals,要執(zhí)行的插件的goal(可以有多個(gè)),如<goal>run</goal>
??????? phase,插件的goal要嵌入到Maven的phase中執(zhí)行,如verify
??????? inherited,該execution是否可被子項(xiàng)目繼承
??????? configuration,該execution的其他配置參數(shù)
4) <pluginManagement>
在<build>中,<pluginManagement>與<plugins>并列,兩者之間的關(guān)系類(lèi)似于<dependencyManagement>與<dependencies>之間的關(guān)系。<pluginManagement>中也配置<plugin>,其配置參數(shù)與<plugins>中的<plugin>完全一致。只是,<pluginManagement>往往出現(xiàn)在父項(xiàng)目中,其中配置的<plugin>往往通用于子項(xiàng)目。子項(xiàng)目中只要在<plugins>中以<plugin>聲明該插件,該插件的具體配置參數(shù)則繼承自父項(xiàng)目中<pluginManagement>對(duì)該插件的配置,從而避免在子項(xiàng)目中進(jìn)行重復(fù)配置。
3. Project Build特有的<...Directory>
往往配置在父項(xiàng)目中,供所有父子項(xiàng)目使用。示例如下:
????? <build>
??????? <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
??????? <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
??????? <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
??????? <outputDirectory>${basedir}/target/classes</outputDirectory>
??????? <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
??????? ...
????? </build>
??? </project>
目錄可以使用絕對(duì)路徑,如示例所示。如果使用相對(duì)路徑,則所有的相對(duì)路徑都是在${basedir}目錄下。
4. Project Build特有的<extensions>
<extensions>是執(zhí)行構(gòu)建過(guò)程中可能用到的其他工具,在執(zhí)行構(gòu)建的過(guò)程中被加入到classpath中。
也可以通過(guò)<extensions>激活構(gòu)建插件,從而改變構(gòu)建的過(guò)程。
通常,通過(guò)<extensions>給出通用插件的一個(gè)具體實(shí)現(xiàn),用于構(gòu)建過(guò)程。
<extensions>的使用示例如下:
????? <build>
??????? ...
??????? <extensions>
????????? <extension>
??????????? <groupId>org.apache.maven.wagon</groupId>
??????????? <artifactId>wagon-ftp</artifactId>
??????????? <version>1.0-alpha-3</version>
????????? </extension>
??????? </extensions>
??????? ...
????? </build>
??? </project>
?
總結(jié)
以上是生活随笔為你收集整理的Maven的pom.xml文件结构之Build配置build的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: windows系统镜像文件汇总
- 下一篇: java实习周记_java程序员的实习周