项目构建:清理、编译、测试、生成文档、打包、部署
依赖管理:坐标系统
项目信息管理:项目描述、开发者列表、版本控制系统地址、许可证、缺陷管理系统地址
一、setting.xml的位置
安装的地方:${M2_HOME}/conf/settings.xml
用户的目录:${user.home}/.m2/settings.xml
前者又被叫做全局配置,对操作系统的所有使用者生效;后者被称为用户配置,只对当前操作系统的使用者生效。如果两者都存在,它们的内容将被合并,并且用户范围的settings.xml会覆盖全局的settings.xml。
二、POM(Project Object Model)
1、
project:pom.xml的根元素。
modelVersion:指定当前POM模型的版本;目前是4.0.0。
2、项目坐标
groupId:定义当前maven隶属的实际项目。
artifactId:定义实际项目中的一个模块。推荐的做法是使用实际项目名称作为artifactId的前缀。在默认情况下maven生成的构建,其文件名以artifactID为开头。
version:当前项目的版本。
packaging:该maven项目的打包方式。默认值jar。
classifier:帮助定义构建输出的一些附属构建(doc、sources)。不能直接定义项目的classifier,因为附属构建不是项目直接默认生成的,而是由附加的插件帮助生成的。
项目构建的文件名:artifactId-version-[classifier].packaging。
三、依赖的配置
根元素project下的dependencies可以包含一个或多个dependency,以声明一个或多个项目依赖。每个依赖可包含的元素有:
groupId,artifactId,version :依赖的基本坐标。
type:依赖的类型。对应项目坐标定义的packaging。
scope:依赖的范围。
compile:编译依赖范围。默认。编译、测试、运行三种classpath都有效。
test:只对测试classpath有效。
provided:已提供依赖范围。编译和测试classpath有效,运行时无效。
runtime:运行时依赖范围。测试和运行classpath有效,编译主代码时无效。
system:系统依赖范围。与provided一致,必须通过systemPath元素显示的指定依赖文件路径。
import:导入依赖范围。
传递性依赖和依赖范围:
依赖调解:1、路径最近者优先;2、第一声明者优先。
optional:标记依赖是否可选。
可选依赖不被传递。需要显示声明。
exclusions:用来排除传递性依赖。
归类依赖
properties 元素 定义 Maven 属性, 该 例 中 定义 了 一个 springframework. version 子 元素, 其 值 为 2. 5. 6。 有了 这个 属性 定义 之后, Maven 运行 的 时候 会 将 POM 中的 所有 的 ${ springframework. version} 替换 成 实际 值 2. 5. 6。 也就是说, 可以 使用 美元 符号 和 大括弧 环绕 的 方式 引用 Maven 属性。 然后, 将 所有 Spring Framework 依赖 的 版 本值 用 这一 属性 引用 表示。
四、仓库
得益于坐标机制,任何maven项目使用任何maven构件的方式都是相同的。maven可以在某个位置统一存储所有maven项目的共享构件,这个统一位置就是仓库。
仓库的布局:任何一个构件都有其唯一坐标,根据这个坐标可以定义其在仓库中的唯一存储路径。该 路径 与 坐标 的 大致 对应 关系 为 groupId/ artifactId/ version/ artifactId- version. packaging。
仓库的分类:
1、本地仓库
2、远程仓库
3、中央仓库:$MAVEN_HOME$/lib/maven-model-builder-3.5.2.jar\org\apache\maven\model\
4、私服
远程仓库的配置:
对于 releases 和 snapshots 来说, 除了 enabled, 它们 还 包含 另外 两个 子 元素 updatePolicy 和 checksumPolicy:
元素 updatePolicy 用来 配置 Maven 从 远程 仓库 检查 更新 的 频率, 默认 的 值 是 daily, 表示 Maven 每天 检查 一次。 其他 可 用的 值 包括: never— 从不 检查 更新; always— 每次 构建 都 检查 更新; interval: X— 每隔 X 分钟 检查 一次 更新( X 为 任意 整数)。
元素 checksumPolicy 用来 配置 Maven 检查 检验 和 文件 的 策略。 当 构件 被 部署 到 Maven 仓库 中 时, 会同 时 部署 对应 的 校验 和 文件。 在下 载 构件 的 时候, Maven 会 验证 校验 和 文件, 如果 校验 和 验证 失败, 怎么办? 当 checksumPolicy 的 值 为 默认 的 warn 时, Maven 会在 执行 构建 时 输出 警告 信息, 其他 可 用的 值 包括: fail— Maven 遇到 校验 和 错误 就让 构建 失败; ignore— 使 Maven 完全 忽略 校验 和 错误。
远程仓库的认证:setting.xml中配置仓库认证信息
settings. xml 中 server 元素 的 id 必须 与 POM 中 需要 认证 的 repository 元素 的id 完全 一致。 换句话说, 正是 这个 id 将 认证 信息 与 仓库 配置 联 系在 了 一起。
部署至远程仓库:mav clean deploy
快照版本:
镜像:
生命周期:
包括项目的清理、初始化、编译、测试、打包、集成测试、验证、部署、站点生成
生命周期抽象了构建的各个步骤,定义了它们的次序
每个构建步骤可以绑定一个或者多个插件行为。maven为大多数构建绑定了默认插件。用户 可以 通过 配置 现有 插件 或者 自行 编写 插件 来自 定义 构建 行为。
maven拥有三套相互独立的生命周期,clean、default、site
每个生命周期包含一些阶段,这些阶段是有顺序的,后边的阶段依赖于前边的阶段。每个生命周期都是相互独立的。
clean:清理项目。
1、pre-clean 执行一些清理前需要完成的工作
2、clean 清理上一次构建生成的文件
3、post-clean 执行一些清理后需要完成的工作
default:构建项目。
site:建立项目站点。
自定义绑定:选择将某个插件目标绑定到生命周期的某个阶段
通过 phase 元素 配置 生命 周期 阶段,再通过 goals 配置 指定 要 执行 的 插件 目标。
命令行插件配置:在 Maven 命令 中 使用- D 参数, 并 伴随 一个 参数 键= 参 数值 的 形式, 来 配置 插件 目标 的 参数。
插件解析机制:
聚合:把项目的各个模块聚合到一起构建。
对于 聚合 模块 来说, 其 打包 方式 packaging 的 值 必须 为 pom, 否则 就 无法 构建。用户 可以 通过 在 一个 打包 方式 为 pom 的 Maven 项目 中 声明 任意 数量 的 module 元素 来 实现 模块 的 聚合。这里每个module值是当前pom的相对目录。
聚合模块有平行结构和父子目录结构。
继承:帮助抽取各个模块相同的依赖和插件等配置。
打包类型为pom,子模块继承父模块,子模块中元素 relativePath 表示 父 模块 POM 的 相对 路径,当 项目 构建 时, Maven 会首 先 根据 relativePath 检查 父 POM, 如果 找 不到, 再 从 本地 仓库 查找。
依赖管理:Maven 提供 的 dependencyManagement 元素 既能 让 子 模块 继承 到 父 模块 的 依赖 配置, 又能 保证 子 模块 依赖 使用 的 灵活性。 在 dependencyManagement 元素 下 的 依赖 声明 不会 引入 实际 的 依赖, 不过 它 能够 约束 dependencies 下 的 依赖 使用。
插件管理:pluginManagement