Maven-构建生命周期与插件

一、概念和基础

Maven针对项目的构建和发布定义了一系列明确的步骤,根据作用不同这些步骤分属于不同的生命周期。Maven针对每个步骤都有对应的默认插件,Maven在构建过程中是通过调用这些插件完成整个过程的。开发者只需要通过简单的命令就可以驱动maven逐步执行生命周期中的步骤来完成项目构建。

二、生命周期

1.三种生命周期

根据作用不同,maven主要有三种构建生命周期:

1.1 clean lifecycle:主要是对项目进行清理

1.2 default lifecycle:主要是对项目进行编译、测试、打包、部署等操作

1.3 site lifecycle:主要是对项目产生报告、发布站点等

2.生命周期组成

每种构建生命周期都是有一些阶段组成,在一个生命周期中,必须逐阶段执行,但是可以指定到哪个阶段停止。

2.1、clean生命周期

  • pre-clean:执行一些需要在clean之前完成的工作
  • clean:移除所有上一次构建生成的文件
  • post-clean:执行一些需要在clean之后立刻完成的工作

2.2、default构建生命周期

  • validate (校验):校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
  • initialize(初始化):初始化构建状态,比如设置属性值。
  • generate-sources (生成源代码):生成包含在编译阶段中的任何源代码。
  • process-sources (处理源代码):处理源代码,比如说,过滤任意值。
  • generate-resources(资源文件):生成将会包含在项目包中的资源文件。
  • process-resources(处理资源文件):复制和处理资源到目标目录,为打包阶段最好准备。
  • compile process-classes(处理类文件):处理编译生成的文件,比如说对Java class文件做字节码改善优化。
  • 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 (部署):将最终的项目包复制到远程仓库中与其他开发者和项目共享

2.3、clean生命周期

  • pre-site:执行一些需要在生成站点文档之前完成的工作
  • site:生成项目的站点文档
  • post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy:将生成的站点文档部署到特殊的服务器上

三、插件

Maven在一定意义上相当于一个执行Maven插件的框架,插件是真实执行相关操作的执行者。每个插件都通过pom文件关联到Maven生命周期的某个阶段(phases)并且定义需要执行的目标(goal)。Maven会在构建过程中在对应的阶段查找关联本阶段的插件,并执行插件的goal方法。

1.默认插件

Maven的实际工作都是由插件来执行的,而Maven和其他项目已经提供了一系列核心插件和拓展插件以满足项目构建。

Maven插件

2.自定义插件

如果以上插件不能满足开发者需求,开发者可以通过开发自定义插件来满足需求。
自定义插件开发

四、绑定插件goal到phase

构建生命周期简化了开发者操作,但是我们需要了解当构建项目时,如何将插件goal绑定到phase。

1.Packaging

最常用的方式是通过设置POM的节点,比如jar、war、ear和pom。如果没有配置则默认为jar。每种类型都会将maven核心插件的某个goal绑定到默认生命周期的构建phase。

2.Plugins

可以通过设置POM中的plugin节点,将插件goal与phase进行绑定。

  • 绑定非核心插件:可以绑定其他插件和自定义插件。
  • 绑定多个goal:可以插件的多个goal绑定到一个phase,packaging中只会将一个核心插件中的某一个goal绑定到phase。如果这里插件和packaging中插件相同,则会先执行packaging中goal、再执行plugin中配置的goal。
  • 多个插件绑定到phase:会按照plugin中插件配置的顺序执行。
javascript 复制代码
<plugin>
   <groupId>com.mycompany.example</groupId>
   <artifactId>display-maven-plugin</artifactId>
   <version>1.0</version>
   <executions>
     <execution>
       <phase>process-test-resources</phase>
       <goals>
         <goal>time</goal>
       </goals>
     </execution>
   </executions>
 </plugin>

五、命令行启动

1.启动生命周期

可以通过maven命令行来驱动生命周期运行到某个阶段phase,命令格式如:mvn phase,例如:

javascript 复制代码
mvn clean deploy

这个命令会执行clean生命周期中phase为clean之前的所有phase,然后执行default生命周期中phase为deploy之前的所有phase。

同时会根据goal和phase之前的绑定关系,调用对应插件的goal进行执行操作。

2.启动特定插件

如果开发了自定义插件,插件如果绑定了phase,可以通过启动生命周期执行自定义插件。如果没有进行绑定,也可以通过命令行执行自定义的插件。

命令格式如:

javascript 复制代码
mvn groupId:artifactId:version:goal

总结

主要介绍了Maven的三种构建生命周期以及每种生命周期phase的组成,maven是通过插件执行具体的操作,将插件与phase进行绑定,来提高整个构建过程的拓展性。用户可以通过maven命令行来启动构建过程,寻找与phase绑定的插件并执行来完成整个构建过程。

相关推荐
武昌库里写JAVA1 小时前
Java 设计模式
java·vue.js·spring boot·课程设计·宠物管理
钢铁男儿1 小时前
Python 函数装饰器和闭包(闭包)
java·网络·python
Clf丶忆笙2 小时前
从零开始搭建第一个Spring Boot应用:从入门到精通
java·spring boot
东坡大表哥2 小时前
【Android】Android签名解析
android·java
程序员buddha2 小时前
使用 IDEA + Maven 搭建传统 Spring MVC + Thymeleaf 项目的详细步骤
spring·maven·intellij-idea
杨不易呀2 小时前
Java面试:微服务与大数据场景下的技术挑战
java·大数据·微服务·面试·技术栈
magic 2452 小时前
SpringMVC——第三章:获取请求数据
java·数据库·springmvc
ABCDEEE73 小时前
民宿管理系统5
java
别催小唐敲代码3 小时前
解决跨域的4种方法
java·服务器·前端·json
何似在人间5753 小时前
LangChain4j +DeepSeek大模型应用开发——7 项目实战 创建硅谷小鹿
java·人工智能·ai·大模型开发