《Maven 实战》读书笔记分享 --- 开篇
前置知识
- Java 基础
- 了解 Java 项目编译、打包、部署流程
Maven 是什么
-
构建工具
- 传统的手工构建工作流: 编译 --> 单元测试 --> 生成测试报告 / 文档 --> 打包 --> 部署
- Maven 自动化构建过程: 从清理、编译、测试到生成报告,再到打包和部署,不需要一遍又一遍的输入命令,一次又一次的点击鼠标 --- 需要做的是使用 Maven 配置好项目,然后输入简单的命令(如 mvn clean install),Maven 会自动处理那些繁琐的任务
-
依赖管理工具
几乎所有的 Java 应用都会借用一些第三方的开源类库,随着依赖的增多,版本不一致、版本冲突、依赖臃肿等问题都会接踵而来
手工解决这些问题十分枯燥,Maven 提供了一个坐标系统来定位每一个构件(暂时可以简单理解为依赖的 jar 包),借助它来有序的管理依赖,解决那些繁杂的依赖问题
-
项目信息管理工具
包括:
- 项目描述
- 开发者列表
- 版本控制系统地址
- 许可证
- 缺陷管理系统地址
- ……
-
版本管理工具
版本管理是指项目整体版本的演变过程管理,如从 1.0-SNAPSHOT 到 1.0,再到 1.1-SNAPSHOT
TODO: Maven 版本号定义约定、快照版本的意义
为什么要用 Maven
Maven 与同类工具对比
| IDE / 手工 | Make | Ant | Maven 的优点 | |
|---|---|---|---|---|
| 执行构建的简易性 | 依赖大量的手工操作 | Makefile 语法易出错 | 通常是一条简单的命令 | |
| 构建过程的标准化 | N/A | N/A 需要独立编写构建过程的脚本 | N/A 需要独立编写构建过程的脚本 | 标准化的构建过程能极大地避免不必要的学习成本,想象一下公司每个项目的构建方法都不一样😟 Maven 抽象了一个完整的构建生命周期模型, 这个模型吸取了大量其他构建脚本和构建工具的优点,遵循这个模型,可以避免很多不必要的错误 |
| 项目目录结构的标准化 | N/A | N/A | N/A | Maven 对于项目目录结构、测试用例命名方式等内容都有既定的规则, 遵循这些成熟的规则,用户在项目间切换时就免去了额外的学习成本 |
| 操作可移植性 | 很难在项目中统一所有的 IDE 配置 | Make 可以利用所有系统的本地命令,这使得它和操作系统绑定起来了 | 任务使用 Java 实现,保证了跨平台的特质 | Maven 是跨平台的,项目配置好后可以在不同机器上都可以使用相同的命令 |
| 可扩展性 / 灵活性 | Make 可以利用所有系统的本地命令 | 插件机制: Maven 的生命周期是抽象的,生命周期本身不做任何实际的工作,实际的任务(如编译)都交由插件来完成 | ||
| 依赖管理 | 手动管理 | 手动管理 | Ivy | Maven 依赖仓库 |