这是我参与 8 月更文挑战的第5天,活动详情查看: 8月更文挑战
Maven的生命周期是为了对所有的构建过程进行抽象和统一。生命周期是抽象的,并没有实际的工作内容,其实现任务都交由插件来完成。类似于设计模式中的模板方法,父类中定义好了通用逻辑,由子类实现具体的执行过程。在Maven中生命周期类比父类,而插件实现具体的逻辑。
生命周期
Maven共有三套相互独立的生命周期,分别为:
- clean:清理项目
- default (build):构建项目
- site:建立项目的站点
每一个生命周期包含多个阶段,各个阶段是顺序执行的。例如执行
mvn clean 命令,表示会执行pre-clean和clean的阶段工作;又比如执行mvn install,表示执行validate到install阶段之间的所有过程。
Clean的生命周期
目的是清理项目,共有三个阶段:
- pre-clean:执行一些清理前需要完成的工作
- clean:清理上一次构建生成的文件
- post-clean:执行一些清理后需要完成的工作
default的生命周期
目的是构建项目,也是构建时真正执行的步骤,最核心的部分。这里列下比较重要的阶段:
- validate
- initialize
- generate-sources
- process-sources 处理项目主资源文件。一般来说是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
- process-resources
- compile 编译项目的主源码。一般来说是编译src/main/java 目录下的Java文件至项目输出的主classpath目录中。
- process-test-sources 处理项目测试资源文件。针对src/test/resources目录下的测试资源
- test-compile 编译项目的测试代码。针对src/test/java目录下Java文件进行编译并输出到测试classpath目录中。
- test 使用单元测试框架进行测试,测试代码不会被打包或部署。
- package 接受编译好的代码,打包成可发布的格式,如Jar,War。
- verify
- install 将打包好的包安装到Maven本地仓库,供本地其他Maven项目使用。
- deploy 将最终的包复制到远程仓库,共其他开发人员和Maven项目使用。
Site的生命周期
Site生命周期的目的是建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成一个友好的扎尼丹,方便团队交流和发布项目信息。该生命周期包含如下阶段:
- pre-site 执行一些在生成项目站点之前需要完成的工作。
- site 生成项目站点文档。
- post-site 执行一些在生成项目站点之后需要完成的工作。
- site-deploy 将生成的项目站点发布到服务器上。
插件
Maven 生命周期交由插件来实现,一个插件有着多个目标,一个目标对应一个功能。例如maven-dependency-plugin 插件有这样的目标,dependency:list、dependency:tree、dependency:analyze,分别表示查看项目依赖、查看项目依赖树、依赖分析不同的功能。
常用的插件配置
- 源码编译插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<compilerVersion>${java.version}</compilerVersion>
</configuration>
</plugin>
- 资源编译插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<resources>/src/main/resources</resources> <!--默认的资源路径 -->
</configuration>
</plugin>
- 测试插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>