《Maven 实战》读书笔记分享 --- 开篇

146 阅读3分钟

《Maven 实战》读书笔记分享 --- 开篇

前置知识

  • Java 基础
  • 了解 Java 项目编译、打包、部署流程

Maven 是什么

  • 构建工具

    1. 传统的手工构建工作流: 编译 --> 单元测试 --> 生成测试报告 / 文档 --> 打包 --> 部署
    2. Maven 自动化构建过程: 从清理、编译、测试到生成报告,再到打包和部署,不需要一遍又一遍的输入命令,一次又一次的点击鼠标 --- 需要做的是使用 Maven 配置好项目,然后输入简单的命令(如 mvn clean install),Maven 会自动处理那些繁琐的任务
  • 依赖管理工具

    几乎所有的 Java 应用都会借用一些第三方的开源类库,随着依赖的增多,版本不一致、版本冲突、依赖臃肿等问题都会接踵而来

    手工解决这些问题十分枯燥,Maven 提供了一个坐标系统来定位每一个构件(暂时可以简单理解为依赖的 jar 包),借助它来有序的管理依赖,解决那些繁杂的依赖问题

  • 项目信息管理工具

    包括:

    • 项目描述
    • 开发者列表
    • 版本控制系统地址
    • 许可证
    • 缺陷管理系统地址
    • ……
  • 版本管理工具

    版本管理是指项目整体版本的演变过程管理,如从 1.0-SNAPSHOT 到 1.0,再到 1.1-SNAPSHOT

    TODO: Maven 版本号定义约定、快照版本的意义

为什么要用 Maven

Maven 与同类工具对比

IDE / 手工MakeAntMaven 的优点
执行构建的简易性依赖大量的手工操作Makefile 语法易出错通常是一条简单的命令
构建过程的标准化N/AN/A 需要独立编写构建过程的脚本N/A 需要独立编写构建过程的脚本标准化的构建过程能极大地避免不必要的学习成本,想象一下公司每个项目的构建方法都不一样😟 Maven 抽象了一个完整的构建生命周期模型, 这个模型吸取了大量其他构建脚本和构建工具的优点,遵循这个模型,可以避免很多不必要的错误
项目目录结构的标准化N/AN/AN/AMaven 对于项目目录结构、测试用例命名方式等内容都有既定的规则, 遵循这些成熟的规则,用户在项目间切换时就免去了额外的学习成本
操作可移植性很难在项目中统一所有的 IDE 配置Make 可以利用所有系统的本地命令,这使得它和操作系统绑定起来了任务使用 Java 实现,保证了跨平台的特质Maven 是跨平台的,项目配置好后可以在不同机器上都可以使用相同的命令
可扩展性 / 灵活性Make 可以利用所有系统的本地命令插件机制: Maven 的生命周期是抽象的,生命周期本身不做任何实际的工作,实际的任务(如编译)都交由插件来完成
依赖管理手动管理手动管理IvyMaven 依赖仓库