1.分類
(1)全局配置(project build)
針對整個項目的所有情況都有效
(2)配置(profile build)
針對不同的profile配置
- <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/maven-v4_0_0.xsd">
- …
- <!– "Project Build" contains more elements than just the BaseBuild set –>
- <build>…</build>
- <profiles>
- <profile>
- <!– "Profile Build" contains a subset of "Project Build"s elements –>
- <build>…</build>
- </profile>
- </profiles>
- </project>
2.配置說明
(1)基本元素
- <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
(2)Resources配置
用於包含或者排除某些資源文件
- <build>
- ...
- <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>
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配置
用於指定使用的插件
- <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>
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階段
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <version>1.1</version>
- <executions>
- <execution>
- <id>echodir</id>
- <goals>
- <goal>run</goal>
- </goals>
- <phase>verify</phase>
- <inherited>false</inherited>
- <configuration>
- <tasks>
- <echo>Build Dir: ${project.build.directory}</echo>
- </tasks>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
id:標識,用於和其他execution區分。當這個階段執行時,它將以這個形式展示[plugin:goal execution: id]。在這里為: [antrun:run execution: echodir]
goals:目標列表
phase:目標執行的階段
inherit:子類pom是否繼承
configuration:在指定目標下的配置
(4)pluginManagement配置
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>