目录

一、maven项目构建过程

二、pom常用构建配置

三、pom默认构建配置

四、开发自定义构建插件


一、maven项目构建过程

生命周期

阶段

插件目标

执行的任务

clean

pre-clean


清理前的准备工作

clean

maven-clean-plugin:clean

清空target目录

post-clean


清理结束后需要完成的工作

default 

validate


验证项目是否正确以及所有必要信息是否可用

initialize


初始化构建状态

generate-sources


生成编译阶段需要的所有源码文件

process-sources

maven-resources-plugin:resources

资源文件复制到target目录

generate-resources


生成项目打包阶段需要的资源文件

process-resources


处理资源文件,并复制到输出目录,为打包阶段做准备

compile

maven-compiler-plugin:compile

编译生成.class文件并移动到target目录

process-classes


处理编译生成的字节码文件

generate-test-sources


生成编译阶段需要的测试源代码

process-test-sources

maven-resources-plugin:testResources

测试资源复制到target目录

test-compile

maven-compiler-plugin:testCompile

编译测试源代码并移动到测试输出目录中

test

maven-surefire-plugin:test

使用适当的单元测试框架(例如JUnit)运行测试

prepare-package


在真正打包之前,执行—些必要的操作

package

maven-jar-plugin:jar

打JAR包

maven-jar-plugin:war

打WAR包

spring-boot-maven-plugin:repackage

jar打包完成后重新打包,生成可执行jar,包含所有依赖的jar包

maven-assembly-plugin:assembly

打zip包

pre-integration-test


在集成测试执行之前,执行所需的操作,例如设置环境变量

integration-test


处理和部署所需的包到集成测试能够运行的环境中

post-integration-test


在集成测试被执行后执行必要的操作,例如清理环境

verify


对集成测试的结果进行检查,以保证质量达标

install

maven-install-plugin:install

jar/war包安装到本地仓库

deploy

maven-deploy-plugin:deploy

jar/war包安装到远程仓库

site 

pre-site


准备阶段在生成站点前所需要做的工作

site

maven-site-plugin:site

生成站点阶段

post-site


结束阶段生成站点结束后所需要做的工作

site-deploy

maven-site-plugin:deploy

站点发布到服务器中

二、pom常用构建配置

<build>
        <!--指定最终build生成的jar/zip名称-->
        <finalName>${project.parent.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <!--打可执行jar包,并把所有依赖的jar包及资源都打进去-->
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <!--构建时打印日志包含id-->
                        <id>make-repackage</id>
                        <!--指定绑定阶段,不指定默认package阶段,
                        多个插件绑定到package阶段按xml中顺序执行,
                        <packaging>jar</packaging>项目最先执行默认插件目标maven-jar-plugin:jar
                        <packaging>pom</packaging>项目(即父项目)不执行默认插件目标-->
                        <phase>package</phase>
                        <goals>
                            <!--指定执行目标(函数),将原jar包更名为.original,再重新打jar包-->
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <excludes>
                        <exclude>
                            <!-- 排除依赖-->
                        </exclude>
                    </excludes>
                    <mainClass>com.gk.App</mainClass><!--指定主类,不指定会默认找main函数-->
                </configuration>
                <version>2.2.4.RELEASE</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <!--打zip包-->
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptors>
                        <!--打zip包的方式配置文件,文件在项目根目录-->
                        <descriptor>assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <!--指定绑定阶段,不指定默认package阶段,
                        多个插件绑定到package阶段按xml中顺序执行,
                        <packaging>jar</packaging>项目最先执行默认插件目标maven-jar-plugin:jar
                        <packaging>pom</packaging>项目(即父项目)不执行默认插件目标-->
                        <phase>package</phase>
                        <goals>
                            <!--指定执行目标(函数),打zip包-->
                            <goal>assembly</goal>
                        </goals>
                        <configuration>
                            <!-- zip文件输出目录,当前目录为项目根目录(即pom目录),不指定默认./target目录-->
                            <outputDirectory>../</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <id>initialize-clean</id>
                        <!-- 项目构建前先clean项目 -->
                        <phase>initialize</phase>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

三、pom默认构建配置

<build>
        <plugins>
            <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>
            <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
            </plugin>
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.5.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
            </plugin>
            <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
            <plugin>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.7.1</version>
            </plugin>
            <plugin>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>
        </plugins>
    </build>

四、开发自定义构建插件