跳到主要内容

Maven 生命周期

· 阅读需 4 分钟
素明诚
Full stack development

Maven 的生命周期是一系列定义好的阶段,用于描述构建过程的不同步骤。当你执行一个 Maven 命令(如 mvn clean 或 mvn install),你实际上是在调用生命周期中的一个或多个阶段。

Maven 主要有三个标准的生命周期:

  1. clean:清除之前构建的项目。
  2. default(或 build):构建项目的主要生命周期。
  3. site:生成项目的站点文档。

默认生命周期 (主要用于构建和部署):

  • 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: 编译测试源代码。
  • test: 使用合适的单元测试框架运行测试。
  • prepare-package: 在实际打包之前进行必要的操作。
  • package: 将编译后的代码打包为分发格式,如 JAR、WAR。
  • pre-integration-test: 在集成测试之前进行必要的环境设置。
  • integration-test: 处理和部署包到集成测试环境中,并运行。
  • post-integration-test: 在集成测试之后进行必要的操作。
  • verify: 检查包的有效性,并确保满足质量标准。
  • install: 安装打包的项目到本地仓库,供其他项目使用。
  • deploy: 在构建环境中,将最终的包复制到远程仓库,供共享和合作。

1. 清理生命周期:

  • pre-clean: 执行清理前的需要的操作。
  • clean: 移除先前的构建产物。
  • post-clean: 执行清理后的需要的操作。

2. 站点生成生命周期:

  • pre-site: 执行生成站点前的需要的操作。
  • site: 生成项目的站点文档。
  • post-site: 执行生成站点文档后的需要的操作。
  • site-deploy: 部署生成的站点文档到指定的服务器。

执行生命周期

当你运行一个生命周期阶段时,Maven 会按顺序执行该阶段之前的所有阶段。例如,如果你执行 mvn install,Maven 会按顺序执行从 validate 到 install 的所有阶段。

生命周期和生命周期阶段

生命周期 (Lifecycle):

  • 生命周期是构建过程中的一系列阶段的集合。Maven 定义了三个主要的生命周期:default(主要用于构建项目)、clean(用于清理项目)和 site(用于生成项目的站点文档)。
  • 这些生命周期定义了一个项目从创建到部署的整个构建过程。

生命周期阶段 (Lifecycle Phase):

  • 生命周期阶段是构建过程中的一个步骤或任务。例如,compile、test 和 install 都是生命周期阶段。
  • 当你执行一个生命周期阶段时,Maven 会按顺序执行该生命周期中直到该阶段为止的所有阶段。例如,执行 mvn install 时,Maven 会按顺序执行 default 生命周期中从 validate 到 install 的所有阶段。

你不能直接添加新的生命周期。Maven 的生命周期是预定义的,它包括 default(用于构建),clean(用于清理)和 site(用于生成项目文档)这三个主要的生命周期。

但是,你可以做的是:

  1. 自定义生命周期的阶段:虽然你不能添加新的生命周期,但你可以为已有的生命周期阶段定义自定义的行为。这是通过绑定插件的目标到特定的生命周期阶段来实现的。例如,你可以绑定一个插件的目标到 compile 阶段,使得在编译时执行特定的操作。
  2. 创建自定义插件和目标:如果 Maven 的内置插件和目标不能满足你的需求,你可以创建自己的插件,并定义新的目标。然后,你可以将这些自定义目标绑定到生命周期的特定阶段。
  3. 使用 Profile:Profile 允许你为不同的构建环境和条件定义不同的设置。虽然这不是添加新的生命周期,但它可以让你根据不同的情境改变构建的行为。