前言:apache
<build >設置,主要用於編譯設置
maven
在Maven的pom.xml文件中,存在以下兩種<build>:ui
(1)全局配置(project build)spa
針對整個項目的全部狀況都有效插件
(2)配置(profile build)命令行
針對不一樣的profile配置code
<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>
說明:xml
一種<build>被稱爲Project Build,便是<project>的直接子元素。blog
另外一種<build>被稱爲Profile Build,便是<profile>的直接子元素。繼承
Profile Build包含了基本的build元素,而Project Build還包含兩個特殊的元素,即各類<...Directory>和<extensions>。
示例以下
<build> <defaultGoal>install</defaultGoal> <directory>${basedir}/target</directory> <finalName>${artifactId}-${version}</finalName>
<filters>
<filter>filters/filter1.properties</filter>
</filters>
...
</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
用於包含或者排除某些資源文件
<build> ... <resources> <resource> <targetPath>META-INF/plexus</targetPath> <filtering>true</filtering> <directory>${basedir}/src/main/plexus</directory> <includes> <include>configuration.xml</include> </includes> <excludes> <exclude>**/*.properties</exclude> </excludes> </resource> </resources> <testResources> ... </testResources> ... </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時使用
用於指定使用的插件
<build> ... <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.0</version> <extensions>false</extensions> <inherited>true</inherited> <configuration> <classifier>test</classifier> </configuration> <dependencies>...</dependencies> <executions>...</executions> </plugin> </plugins> </build>
pluginManagement的配置和plugins的配置是同樣的,只是用於繼承,使得能夠在孩子pom中使用。
父pom:
<build> ... <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.2</version> <executions> <execution> <id>pre-process-classes</id> <phase>compile</phase> <goals> <goal>jar</goal> </goals> <configuration> <classifier>pre-process</classifier> </configuration> </execution> </executions> </plugin> </plugins> </pluginManagement> ... </build>
則在子pom中,咱們只須要配置:
<build> ... <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> </plugin> </plugins> ... </build>
這樣大大簡化了孩子pom的配置