diff --git a/source/_posts/maven-pom-tips.md b/source/_posts/maven-pom-tips.md new file mode 100644 index 0000000..f952941 --- /dev/null +++ b/source/_posts/maven-pom-tips.md @@ -0,0 +1,518 @@ +--- +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 %} +