1、build标签分类
1.1、全局配置(project 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 http://maven.apache.org/maven-v4_0_0.xsd"> ... <build>…</build> ...
</project>
1.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"> ... <profiles> <profile> <!– "Profile Build" contains a subset of "Project Build"s elements –> <build>…</build> </profile> </profiles> ...
</project>
2、build 配置说明
2.1、基本元素
<build><!-- 指定默认的 Maven 构建目标。当运行 mvn 命令时,将执行指定的目标(用不到) --><defaultGoal>install</defaultGoal><!-- 指定 Maven 构建输出的目录路径,下列是默认值--> <directory>target</directory> <finalName>${artifactId}-${version}</finalName><!-- 指定源代码文件的目录路径 --><sourceDirectory>src/main/java</sourceDirectory><!-- 指定脚本文件的源代码目录路径(用不到) --><scriptSourceDirectory>src/main/scripts</scriptSourceDirectory><!-- 指定test的源代码目录路径 --><testSourceDirectory>src/test/java</testSourceDirectory><!-- 指定编译后的类文件输出的目录路径 --><outputDirectory>target/classes</outputDirectory><!-- 指定编译后的test类文件输出的目录路径 --><testOutputDirectory>target/test-classes</testOutputDirectory><!-- 配置项目的资源目录, 例如配置文件、静态资源等 --><resources><resource><directory>src/main/resources</directory><!-- 可以有占位符,并替换占位符,即下面的${application.environment} --><filtering>true</filtering><includes><include>bootstrap.properties</include><include>bootstrap-${application.environment}.properties</include></includes></resource><resource><directory>src/main/resources</directory><!-- 没有占位符 --><filtering>false</filtering><includes><include>banner.txt</include><include>logback-spring.xml</include></includes></resource></resources><!-- 配置项目的test资源目录, 例如配置文件、静态资源等 --><testResources><testResource><directory>src/test/resources</directory></testResource></testResources><filters> <filter>filters/filter1.properties</filter> </filters> <!-- 插件版本管理 --><pluginManagement><plugins><!-- Springboot项目打包插件,生成JAR包 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version></plugin><!-- Maven编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${maven-compiler-plugin.version}</version></plugin></plugins></pluginManagement>...
</build>
- defaultGoal :执行build任务时,如果没有指定目标,将使用的默认值。如上配置:在命令行中执行mvn,则相当于执行mvn install
- directory : 构建结果输出目录,默认在${basedir}/target目录。
- finalName :build目标文件的名称,默认情况为${artifactId}-${version}
- sourceDirectory :主体源程序存放目录,默认在${basedir}/src/main/java
- scriptSourceDirectory :脚本源程序存放目录,默认在: ${basedir}/src/main/scripts
- testSourceDirectory :测试源程序存放目录,默认在${basedir}/src/test/java
- outputDirectory :主体源程序编译结果输出目录,默认在${basedir}/target/classes
- testOutputDirectory :测试源程序编译结果输出目录,默认在${basedir}/target/test-classes
- resources :主体资源文件存放目录,默认在: ${basedir}/src/main/resources
- testResources :测试资源文件存放目录,默认在: ${basedir}/src/test/resources
- filters :给出对资源文件进行过滤的属性文件的路径,默认位于${basedir}/src/main/filters/目录下。属性文件中定义若干键值对。在构建过程中,对于资源文件中出现的变量(键),将使用属性文件中该键对应的值替换。
2.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>
用于包含或者排除某些资源文件:
- resources :一个resources元素的列表。每一个都描述与项目关联的文件是什么和在哪里。
- targetPath :指定build后的resource存放的文件夹,默认是:${basedir}。通常被打包在jar中的resources的目标路径是META-INF
- filtering : 构建过程中是否对资源进行过滤,默认false。
- directory :定义resource文件所在的文件夹,默认为${basedir}/src/main/resources
- includes :指定哪些文件将被匹配,以*作为通配符。
- excludes :指定哪些文件将被忽略。
- testResources :定义和resource类似,只不过在test时使用。
2.3、plugins配置
<build> ... <plugins> <!-- 插件的坐标。此处引用的 maven-compiler-plugin 插件不是第三方的,是一个 Maven 自带的插件。 --><plugin> <groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version> <extensions>false</extensions> <inherited>true</inherited> <!-- configuration 标签:配置 maven-compiler-plugin 插件 --><configuration><!-- 具体配置信息会因为插件不同、需求不同而有所差异 --><classifier>test</classifier> <source>1.8</source><target>1.8</target><encoding>UTF-8</encoding><dependencies>...</dependencies> <executions> <execution> <id>pre-process-classes</id> <!-- phase : 关联的生命周期阶段 --><phase>compile</phase><!-- goals/goal:关联指定生命周期的目标 --> <goals> <goal>jar</goal> </goals> <configuration> <classifier>pre-process</classifier> </configuration> </execution> </executions> </plugin> </plugins>
</build>
用于指定使用的插件:
- GAV(即: groupId、artifactId、version):指定插件的标准坐标。
- extensions :是否加载该插件的扩展,默认false。
- inherited :该插件的configuration中的配置是否可以被(继承该POM的其他Maven项目)继承,默认true
- configuration :该插件所需要的特殊配置,在父子项目之间可以覆盖或合并。
- dependencies :该插件所特有的依赖类库。
- executions :该插件的某个goal(一个插件中可能包含多个goal)的执行方式。一个execution有如下设置:
- id :唯一标识;
- goals :执行目标的名称;
- phase :execution标签要执行的Maven构建生命周期阶段.
- inherited :该execution是否可被子项目继承;
- configuration :该execution的其他配置参数;
- profile:指定该execution标签在哪个profile中生效。
2.4.1、maven生命周期
详见:maven用久后必须了解的phase、goal参数及生命周期概念_maven goal参数-CSDN博客
- 生命周期有三种,分别是clean,default,site
- 每种生命周期都由多个阶段组成:
- clean:默认是清除target目录中的所有文件,避免将历史版本打到新的包中造成一些不在预期中的问题。
- process-resources:将资源文件src/main/resources下的文件复制到target/classes目录中。
- compile:将src/main/java下的代码编译成 class 文件,也放到target/classes目录中。
- process-test-resources:将资源文件src/test/resources下的文件复制到target/test-classes目录中。
- test-compile:将src/test/java下的代码编译成 class 文件,也放到target/test-classes目录中。
- test:运行单元测试并在target/surefire-reports中生成测试报告。
- package:将资源文件、class文件、pom文件打包成一个jar包。
- install:将生成的jar包推送到本地仓库中。
- deploy:将生成的jar包推送到远程仓库中。
- 执行构建时,会按照阶段顺序从上到下的执行,但只有绑定了插件目标的阶段才会执行;
2.4、pluginManagement配置
通过 pluginManagement
标签管理起来的插件就像 dependencyManagement
一样,子工程使用时可以省略版本号,起到在父工程中统一管理版本的效果。
<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>
pluginManagement标签存放着几个极少用到的插件:
- maven-antrun-plugin
- maven-assembly-plugin
- maven-dependency-plugin
- maven-release-plugin
被springboot-dependenciens管理的插件:
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId> </plugin>
上面是父工程的pom配置,在子pom中,我们只需要做配置即可,不需要版本号:
<build> ... <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> </plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin> </plugins> ...
</build>