Maven基础
Maven是一个项目管理和整合工具。Maven 使用一个标准的目录结构,为开发者提供了一套完整的构建生命周期框架。 能够在短时间内使得每项工作都按照标准进行。在创建报告、检查、构建和测试自动配置时,Maven 可以让开发者的工作变得更简单。
总结Maven的构建原理,生命周期,配置文件,仓库等概念,写一篇博客
Maven的构建原理
- 在软件开发过程中,使用专门的工具来管理:编码,加载依赖,编译,测试,打包,发布等过程, 这种工具就叫做“项目构建工具”。
- POM(Project Object Model) 代表工程对象模型,是使用 Maven 工作时的基本组建,是一个 xml 文件,被放在工程根目录下,文件命名为 pom.xml。
- POM 包含了关于工程和各种配置细节的信息,Maven 使用这些信息构建工程。
- POM 也包含了目标和插件。当执行一个任务或者目标时,Maven 会查找当前目录下的 POM,从其中读取所需要的配置信息,然后执行目标。
生命周期
1、定义:Maven 构建生命周期定义了一个项目构建跟发布的过程,Maven 有以下三个标准的生命周期:
- clean
- default(or build)
- site
2、Clean 生命周期
Maven 的 clean 目标(clean:clean)绑定到了 clean 生命周期的 clean 阶段。它的 clean:clean 目标通过删除构建目录删除了构建输出。执行mvn clean 命令,Maven 删除了构建目录。当我们执行 mvn post-clean 命令时,Maven 调用 clean 生命周期,它包含以下阶段:
- pre-clean:执行一些需要在clean之前完成的工作
- clean:移除所有上一次构建生成的文件
- post-clean:执行一些需要在clean之后立刻完成的工作
3、Default (or Build) 生命周期
这是 Maven 的主要生命周期,被用于构建应用。包括下面的 23 个阶段:
生命周期阶段 | 描述 |
---|---|
validate | 检查工程配置是否正确,完成构建过程的所有必要信息是否能够获取到。 |
initialize | 初始化构建状态,例如设置属性。 |
generate-sources | 生成编译阶段需要包含的任何源码文件。 |
process-sources | 处理源代码,例如,过滤任何值(filter any value)。 |
generate-resources | 生成工程包中需要包含的资源文件。 |
process-resources | 拷贝和处理资源文件到目的目录中,为打包阶段做准备。 |
compile | 编译工程源码。 |
process-classes | 处理编译生成的文件,例如 Java Class 字节码的加强和优化。 |
generate-test-sources | 生成编译阶段需要包含的任何测试源代码。 |
process-test-sources | 处理测试源代码,例如,过滤任何值(filter any values)。 |
test-compile | 编译测试源代码到测试目的目录。 |
process-test-classes | 处理测试代码文件编译后生成的文件。 |
test | 使用适当的单元测试框架(例如JUnit)运行测试。 |
prepare-package | 在真正打包之前,为准备打包执行任何必要的操作。 |
package | 获取编译后的代码,并按照可发布的格式进行打包,例如 JAR、WAR 或者 EAR 文件。 |
pre-integration-test | 在集成测试执行之前,执行所需的操作。例如,设置所需的环境变量。 |
integration-test | 处理和部署必须的工程包到集成测试能够运行的环境中。 |
post-integration-test | 在集成测试被执行后执行必要的操作。例如,清理环境。 |
verify | 运行检查操作来验证工程包是有效的,并满足质量要求。 |
install | 安装工程包到本地仓库中,该仓库可以作为本地其他工程的依赖。 |
deploy | 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程。 |
- 当一个阶段通过 Maven 命令调用时,例如 mvn compile,只有该阶段之前以及包括该阶段在内的所有阶段会被执行。
- 不同的 maven 目标将根据打包的类型(JAR / WAR / EAR),被绑定到不同的 Maven 生命周期阶段。
- 当需要在某个特定阶段之前或之后执行目标时,可以使用 pre 和 post 来定义这个目标。
- 目标表示一个特定的、对构建和管理工程有帮助的任务。它可以绑定 0 个或多个构建阶段。没有绑定任何构建阶段的目标可以在构建生命周期之外被直接调用执行。
4、Site 生命周期
Maven Site 插件一般用来创建新的报告文档、部署站点等。包括4个阶段:
- pre-site
- site
- post-site
- site-deploy
配置文件(Profile)
1、定义:构建配置文件是一组配置的集合,用来设置或者覆盖 Maven 构建的默认配置。使用构建配置文件,可以为不同的环境定制构建过程
2、Profile 类型
Profile 主要有三种类型:
类型 | 在哪里定义 |
---|---|
Per Project | 定义在工程 POM 文件 pom.xml 中 |
Per User | 定义在 Maven 设置 xml 文件中 (%USER_HOME%/.m2/settings.xml) |
Global | 定义在 Maven 全局配置 xml 文件中 (%M2_HOME%/conf/settings.xml) |
3、Profile 激活
Maven 的 Profile 能够通过几种不同的方式激活。
- 显式使用命令控制台输入
- 通过 maven 设置
- 基于环境变量(用户 / 系统变量)
- 操作系统配置(例如,Windows family)
- 现存 / 缺失 文件
仓库
1、定义:在 Maven 的术语中,仓库是一个位置(place),例如目录,可以存储所有的工程 jar 文件、library jar 文件、插件或任何其他的工程指定的文件。Maven 仓库有三种类型:
- 本地(local)
- 中央(central)
- 远程(remote)
2、本地仓库
- Maven 本地仓库是机器上的一个文件夹,保存工程的所有依赖(library jar、plugin jar 等)。在第一次运行任何 maven 命令的时候自动创建。
- Maven 会自动下载所有依赖的 jar 文件到本地仓库中,Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。
3、中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库,需要网络才能访问。
4、远程仓库
开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
Maven 依赖搜索顺序
- 步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
- 步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中已被将来引用。
- 步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
- 步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库已被将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。
插件
Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。
常用插件:
插件 | 描述 |
---|---|
clean | 构建之后清理目标文件。删除目标目录。 |
compiler | 编译 Java 源文件。 |
surefile | 运行 JUnit 单元测试。创建测试报告。 |
jar | 从当前工程中构建 JAR 文件。 |
war | 从当前工程中构建 WAR 文件。 |
javadoc | 为工程生成 Javadoc。 |
antrun | 从构建过程的任意一个阶段中运行一个 ant 任务的集合。 |