--- title: Maven POM文件编辑技巧要点 tags: - JVM - Java - Maven - POM categories: - - JVM - 构建工具 keywords: 'Maven,pom,pom.xml,构建,dependency' date: 2021-06-09 07:22:33 --- Maven作为一个老牌的项目构建工具,虽然在构建速度上不及Gradle的多线程构建快,但是使用XML文件作为构建配置还是拥有不少好处的,起码在进行配置的时候,不会像Gradle一样自由的感觉无从下手。 项目对象模型(POM)是Maven管理项目的基本工作单元,一般采用XML编写,其中包含了项目基本信息、构建信息以及依赖信息等。在Maven执行任务时,会在当前目录中寻找POM,并从中读取所需的配置信息,然后执行相关任务。POM一般在目录中以`pom.xml`文件的形式存在。每个POM文件中都至少需要`project`根元素和`groupId`、`artifactId`、`verion`这三个必需元素。 Super POM是Maven的默认POM,被所有的POM继承。Super POM可以通过命令`mvn help:effective-pom`查看。 ## Maven构建生命周期 所有常用Maven命令,实际上调用的都是Maven的各个生命周期动作,也就是命令行格式`mvn [options] [goals] [phases]`中的`[phase]`。 在Maven中有三个标准生命周期:`clean`、`default`、`site`,每个生命周期都包含一定的阶段(`phase`)。 ### Clean生命周期 Clean周期主要执行项目的清理工作,会移除上一次构建生成的所有文件。Clean周期包含以下几个阶段。 1. `pre-clean`,执行一些清理构建文件之前需要完成的操作。 1. `clean`,执行移除构建文件的操作。 1. `post-clean`,在移除构建文件之后需要完成的操作。 当执行命令`mvn post-clean`时,位于`post-clean`阶段之前的`pre-clean`和`clean`阶段都会按照预定顺序执行。这种阶段的执行模式对于其他声明周期也同样起效。 ### Site生命周期 Site周期主要用来创建报告文档、部署站点等。主要包含四个阶段: 1. `pre-site`,在生成站点之前需要完成的操作。 1. `site`,生成站点的文档。 1. `post-site`,在生成站点之后需要完成的工作,并且为部署做准备。 1. `site-deploy`,将生成的站点文档部署到特定的服务器上。 ### Default生命周期 Default周期主要用于构建应用,也称为Build周期,是三个标准周期中最复杂的一个,有23个阶段。 1. `validate`,校验项目是否正确并且已经具备的信息是否可以完成项目构建。 1. `initialize`,初始化构建状态。 1. `generate-sources`,生成包含在编译阶段中的全部源代码。 1. `process-sources`,处理生成的源代码。 1. `generate-resources`,生成将会包含在项目包中的资源文件。 1. `process-resources`,复制和处理资源到目标目录。 1. `compile`,编译全部源代码。 1. `process-classes`,处理编译生成的文件,进行优化。 1. `generate-test-sources`,生成包含在编译阶段中的全部测试源代码。 1. `process-test-sources`,处理生成的测试源代码。 1. `generate-test-resources`,为测试创建资源文件。 1. `process-test-resources`,复制和处理测试资源到目标目录。 1. `test-compile`,编译全部测试源代码。 1. `process-test-classes`,处理和测试源码编译生成的文件。 1. `test`,运行单元测试。 1. `prepare-package`,在打包之前,执行全部必要操作。 1. `package`,将编译后的代码打包为可分发格式文件。 1. `pre-integration-test`,执行集成测试之前所必要的操作。 1. `integration-test`,部署项目到集成测试环境中。 1. `post-integration-test`,执行完集成测试之后进行的必要操作。 1. `verify`,运行指定的检查来确定项目包有效且达到指定质量标准。 1. `install`,将项目包安装到本地仓库,使其可以作为其他项目的依赖。 1. `deploy`,将项目包部署到远程仓库使其可以与其他开发者共享。 ## POM文件结构 POM文件在编辑的时候可以依照以下标签解释内容来完成编辑。 {% codeblock lang:xml wrap:true %} 4.0.0 com.example app 1.0.0-SNAPSHOT jar Application jira
Project Manager Architect repo Windows XP Windows x86 5.1.2600 mavenVersion 2.0.3 banseon-repository-proxy banseon-repository-proxy http://192.168.1.169:9999/repository/ default org.apache.maven maven-artifact 3.8.1 jar test spring-core org.springframework true {% endcodeblock %}