Maven生命周期、阶段与目标

生命周期

对于Java项目来说,一个项目的生命周期可能会有创建项目、编译、打包、运行、部署等,而maven将项目的生命周期进行了标准化。
Maven默认支持的生命周期有clean、site、default,其中 site这个生命周期几乎用不到,最常用的就是clean与default。

阶段

在maven中,每一个生命周期都对应多个阶段。
clean生命周期的阶段如下:

pre-clean
clean (注意这个clean不是lifecycle而是phase)
post-clean

default生命周期的阶段有如下:

validate
initialize
generate-sources
process-sources
generate-resources
process-resources
compile
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources
test-compile
process-test-classes
test
prepare-package
package
pre-integration-test
integration-test
post-integration-test
verify
install
deploy

常用的 mvn 命令后面跟的参数其实不是生命周期而是阶段,例如 mvn clean 表示找到clean这个生命周期,然后从这个这个生命周期最开始的阶段到clean这个阶段也就是 pre-clean、clean。平时比较常用的 mvn package 就是会找到default这个生命周期,然后一直从validate 阶段执行到 package 这个阶段。

插件目标

光有阶段还不够,代码的编译、测试、打包其实都是通过一个个的插件目标做的,这些插件目标其实就是一个个的Java类,一个阶段可以绑定一个或多个目标,例如执行 mvn package 就可以看到每个插件绑定的目标。

在这里插入图片描述

很多生命周期的阶段目标maven都已经内置好了,如果需要自定义插件,希望可以在maven生命周期的某个阶段执行自定义的目标,可以通过定制pom.xml实现。

            <plugin>
                <!--源码插件引入-->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.2.1</version>
                <!--执行计划-->
                <executions>
                    <execution>
                        <!--在哪个生命周期阶段执行-->
                        <phase>install</phase>
                        <!--执行别名-->
                        <id>build-source</id>
                        <goals>
                            <!--插件目标-->
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                      <execution>
                        <!--在哪个生命周期阶段执行-->
                        <phase>package</phase>
                        <!--执行别名-->
                        <id>build-agg</id>
                        <goals>
                            <!--插件目标-->
                            <goal>aggregate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

maven默认的打包插件默认是无法将依赖包打入到jar中的,springboot官方推出的打包插件可以实现将依赖包打入jar包。

  <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
  </plugin>

这里并没有指定这个插件要在哪个阶段执行哪个目标,那maven在打包的时候是如何确定的,答案是在parent.pom里,在父pom中的pluginManagment中执行了此插件的阶段和目标。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43750656/article/details/132438958
今日推荐