type
status
date
slug
summary
tags
category
icon
password

一、Maven 生命周期

参考 Maven Lifecycle,Maven 一共有三套标准生命周期:
  • Clean 生命周期。
  • Default 生命周期(也称为 Build 生命周期)。
  • Site 生命周期。

Clean 生命周期

Clean 生命周期的目的是清理项目,它包括以下三个阶段。
  • pre-clean:执行清理前需要完成的工作。
  • clean:清理上一次构建过程中生成的文件,比如编译后的 class 文件等。
  • post-clean:执行清理后需要完成的工作。

Default 生命周期

Default 生命周期定义了构建项目时所需要的执行步骤,它是所有生命周期中最核心部分,包括下面的 23 个阶段,比较常用的阶段用粗体标记。
名称
说明
validate
验证项目结构是否正常,必要的配置文件是否存在
initialize
做构建前的初始化操作,比如初始化参数、创建必要的目录等
generate-sources
产生在编译过程中需要的源代码
process-sources
处理源代码,比如过滤值
generate-resources
产生主代码中的资源在 classpath 中的包
process-resources
将资源文件复制到 classpath 的对应包中
compile
编译项目中的源代码
process-classes
产生编译过程中生成的文件
generate-test-sources
产生编译过程中测试相关的代码
process-test-sources
处理测试代码
generate-test-resources
产生测试中资源在 classpath 中的包
process-test-resources
将测试资源复制到 classpath 中
test-compile
编译测试代码
process-test-classes
产生编译测试代码过程的文件
test
运行测试案例
prepare-package
处理打包前需要初始化的准备工作
package
将编译后的 class 和资源打包成压缩文件,比如 jar 或者 war
pre-integration-test
做好集成测试前的准备工作,比如集成环境的参数设置
integration-test
集成测试
post-integration-test
完成集成测试后的收尾工作,比如清理集成环境的值
verify
检测测试后的包是否完好
install
将打包的组件以构件的形式,安装到本地依赖仓库中,以便共享给本地的其他项目
deploy
运行集成和发布环境,将测试后的最终包以构件的方式发布到远程仓库中,方便所有程序员共享

Site 生命周期

Site 生命周期的目的是建立和发布项目站点。Maven 可以基于 pom 所描述的信息自动生成项目的站点,同时还可以根据需要生成相关的报告文档集成在站点中,方便团队交流和发布项目信息。Site 生命周期包括如下阶段。
  • pre-site:执行生成站点前的准备工作。
  • site:生成站点文档。
  • post-site:执行生成站点后需要收尾的工作。
  • site-deploy:将生成的站点发布到服务器上。

生命周期、阶段和插件的默认绑定关系

在默认情况下,Maven 生命周期会绑定以下几个插件来执行基本操作(插件的具体介绍看下面)。没有绑定插件的阶段不会执行。
生命周期( Lifecycle )
阶段( Phase )
目标( Goal)
clean
clean
maven-clean-plugin:clean
default
process-resources
maven-resources-plugin:resources
compile
maven-compiler-plugin:compile
generate-test-resources
maven-resources-plugin:testResouces
test-compile
maven-compiler-plugin:testCompile
test
maven-surefire-plugin:test
package
打包类型是 jar 时:maven-jar-plugin:jar 打包类型是 war 时:maven-war-plugin:war
install
maven-install-plugin:install
deploy
maven-deploy-plugin:deploy
site
site
maven-site-plugin:site
site-deploy
maven-site-plugin:deploy

二、Maven 插件

Maven 插件介绍

参考 Maven Plugins。Maven 实际上是一个插件(Plugin)的集成框架,每个插件对应一到多个目标(global),每个目标完成一个特定的任务。Maven 的所有任务都是通过插件及其对应的目标来完成的。上面 生命周期、阶段和插件的默认绑定关系 介绍的内置插件如下
插件
作用
对应阶段
maven-clean-plugin
清理上一次执行创建的目标文件
clean
maven-resources-plugin
处理源资源文件和测试资源文件,包括 src/main/resourcessrc/test/resources 下的资源文件
resources,testResources
maven-compiler-plugin
编译源文件和测试源文件,包括 src/main/javasrc/test/java 目录下的类文件
compile,testCompile
maven-surefire-plugin
运行 JUnit 单元测试,其实大部分时间内,只要你的测试类遵循通用的命令约定(以Test结尾、以TestCase结尾、或者以Test开头)
test
maven-jar-plugin
把项目打包成 jar 包
jar
maven-war-plugin
把项目打包成 war 包
war
maven-install-plugin
将创建生成的 jar 拷贝到本地仓库
install
maven-deploy-plugin
发布 jar 到远程仓库
deploy
maven-site-plugin
发布项目站点
site
除了这些内置的 Maven 插件,我们项目中常用的插件如下:
插件
作用
maven-archetype-plugin
生成简单的 Maven 项目骨架,例如初学者常用的 mvn archetype:generate
maven-assembly-plugin
制作项目分发包,该分发包可能包含了项目的可执行文件、源代码、readme、平台脚本等等。
maven-dependency-plugin
分析项目依赖并打包项目依赖到指定文件夹。
maven-failsafe-plugin
用作集成测试的配置。
maven-checkstyle-plugin
帮助开发检测代码中不合规范的地方。
spring-boot-maven-plugin
Spring Boot 项目专用帮助项目打包成一个fat jar。
jacoco-maven-plugin
生成单元测试覆盖率报告。
sonar-maven-plugin
使用该插件执行sonar扫描。
这些插件的配置方法参考这个地址
用户调用 Maven 插件执行目标有两种方式:
  1. 输入生命周期调用插件目标。生命周期阶段是与插件目标绑定的,这样用户只需要输入生命周期阶段就可以调用对应的插件目标,如果绑定了多个插件目标将会顺序执行(这种需要我们事先把插件绑定到生命周期的阶段上,一般通过 Pom 文件进行绑定)例如
    1. Maven 默认将 maven-compiler-plugincompile 目标与 compile 生命周期阶段绑定,因此命令 mvn compile 实际上是先定位到 compile 这一生命周期阶段,然后再根据绑定关系调用 maven-compiler-plugin 执行 compile 目标。
  1. 在命令行指定要执行的插件目标。例如
    1. 表示调用 maven-archetype-plugingenerate 目标,这种调用方式不需要绑定生命周期的阶段。

Pom 文件绑定插件

在 pom.xml 文件中,使用 build 元素的 plugin 元素定义插件目标并绑定到 Maven 生命周期阶段。例如
在上面的配置中,我们定义了 my-maven-plugin 插件,并在其元素中定义了一个 executionmy-goal,对应的 goalmyGoal,绑定到了 Maven 的 compile 阶段。这样,当我们在执行 mvn compile 命令时,myGoal 目标就会被执行。
通过插件绑定,我们可以方便地将插件目标集成到 Maven 的生命周期中,从而在构建过程中自动执行它们。

Maven 命令执行插件

不管是生命周期绑定的插件,还是命令行参数直接输入的插件,要执行执行插件的话最终还是要使用 Maven 命令。Maven 命令的格式如下:
例如下面命令表示执行编译插件 maven-compiler-plugin 的 compile 目标用来编译 src/main/java/ 目录下的代码
输出日志如下,可以看到 Maven 项目使用默认的内置插件 maven-resources-pluginmaven-compiler-plugin 分别执行了 resourcescompile 两个阶段。这也印证之前的结论,在执行某个阶段的时候,该阶段前面的所有阶段(已经绑定插件)都会被执行。

插件参数

Maven 的插件参数的配置也有两种方式:
  1. 直接在命令行通过 -D 属性设置。这种相当于修改了 properties 元素的属性值。-D 表示配置 properties 属性,-P 表示配置 profiles 属性。如果属性值在 pom.xml 已经存在,传递的参数值会覆盖原来的属性值。例如
    1. 在 pom.xml 文件的 plugin 元素里面通过 configuration 元素设置。例如设置 JDK 的编译版本为 1.8。
      1.  
    Maven系列:常用插件汇总Maven系列:Maven入门
    mcbilla
    mcbilla
    一个普通的干饭人🍚
    Announcement
    type
    status
    date
    slug
    summary
    tags
    category
    icon
    password
    🎉欢迎来到飙戈的博客🎉
    -- 感谢您的支持 ---
    👏欢迎学习交流👏