从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

  • JavaSenior

  • JavaEE

    • JavaEE 概念

    • Ant

    • Maven

      • 什么是 Maven
        • Maven 能解决什么问题
        • 依赖管理
        • 仓库
        • 构建工具
        • 项目信息管理
        • Maven 的历史
        • 小结
      • 安装Maven
      • 第一个 Maven 项目
      • Maven 的组成和配置
      • 快速创建 Maven 项目
      • 创建 Web 项目
      • Maven 的生命周期和构建
      • Maven 的依赖管理
      • Maven 的插件管理
      • IDEA 关于 Maven 的设置
      • 使用 Maven 完成 dao 层
      • 使用 Maven 完成 service 层
      • 使用 Maven 完成 web 层
      • Maven 的拆分和聚合
      • Nexus 的搭建
      • Nexus 的使用
      • 安装第三方 jar 包到私服
      • Maven 系列完结
    • 日志

    • Junit

    • JDBC

    • XML 和 JSON

  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java
  • JavaEE
  • Maven
2023-05-15
目录

什么是 Maven

# 00.什么是 Maven

Maven 音标 [ˈmeɪvən], 这个单词来自于犹太语,可以翻译为“知识的积累”,“专家”或“内行”。

在 Java 的世界里,Maven 是指一个主流的项目管理工具。

在学习 Maven 之前,读者应对构建和依赖有些许概念,可参考前几篇博客。

# Maven 能解决什么问题

在继续讲 Maven 是什么之前,我们先讲讲 Maven 出现之前,我们是怎么管理项目的,以此加深对 Maven 的理解。

我们知道,项目开发不仅仅是写写代码而已,期间会伴随着各种必不可少的事情要做:

  • 开发时,我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个(JDBC,Junit,Log4j.......),每用到一个框架,都需要手动去官网下载,而每个依赖的官网往往各有特色,找个下载链接也要花一定的时间;下载后统一导入到工程,经常遇到各种的 jar 包冲突,版本冲突。
  • 写好了 Java 文件,需要将它编译成二进制字节码。现在这项工作可以由各种集成开发工具完成,Eclipse、IDEA 等都可以将代码即时编译。比起用记事本来敲代码,然后用 javac 命令一个个地去编译,效率更高。而 Maven 也可以帮我们完成编译。
  • 世界上没有不存在 bug 的代码,为了减少 bug,写完了代码,还要写一些单元测试,然后一个个的运行来检验代码质量。
  • 再优雅的代码也是要打包的。我们后面还需要把代码与各种配置文件、资源整合到一起,定型打包,如果是 web 项目,还需要手工发布到服务器,重启。

试想,如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你管理 jar 包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能部署项目,生成 Web 站点..... Maven 就可以解决上面所提到的这些问题。 ‍ 接下来我们会简单介绍一下 Maven 的功能,为后续的实践打下理论基础。 ‍

# 依赖管理

在 Maven 中,每一个依赖都有一个坐标(Coordinate),我们是用坐标来定位依赖的。通过一个依赖的坐标,我们可以知道这个依赖属于哪个组织、使用的是什么模块,版本号是多少,然后 Maven 能通过坐标自动下载依赖。

听不懂?我们举几个生活的例子来说明什么是坐标:

  1. 在一个平面坐标系中,坐标(x,y)表示该平面上与 x 轴距离为 y,与 y 轴距离为 x 的一点,任何一个坐标都能够唯一标识该平面中的一点
  2. 我们也可以将地址看成是一种坐标。省、市、区、街道等一系列信息同样可以唯一标识城市中的任一居住地址和工作地址。邮局和快递公司正是基于这样一种坐标进行日常工作的。
  3. 坐标还可以看成是一个依赖的“身份证”。例如人的身份证号组成是:地区号+生日日期+顺序码+校验码,通过身份证,能确定唯一的一个人,并且可以知道这个人的出生地区、出生日期和年龄等; ‍ 例如 Junit 的坐标长这样:
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
1
2
3

groupId、artifactId 和 version,这三个元素定义了一个基本的坐标:

  • groupId:一般命名方式为组织名+项目名,这取决于发布该依赖的组织如何命名该项目。譬如在 googlecode 上建立了一个名为 myapp 的项目,那么 groupId 就应该是 com.googlecode.myapp。显然,Apache 组织命名 Junit 的时候就比较简单。
  • artifactId:可以理解为模块名称。例如一个框架非常的大,分成了几个模块,用户可以根据模块名称来按需引入。
  • version 指定了该项目当前的版本。

更多关于坐标的东西,我们后面再详细展开。

# 仓库

之前我们说过 Maven 能通过坐标下载依赖,下载到哪里呢?仓库。仓库其实就是一个文件夹:

‍

这个文件夹里面,根据不同的依赖分成了不同的文件夹,并且不同版本也是不同文件夹:

‍

而 Maven 是从哪里下载依赖的呢?是一个叫做中央仓库的地方。中央仓库是 Maven 官方组织维护的一个仓库,里面收录了很多的依赖:

Maven 在运行时,首先会从本地仓库寻找依赖,没有找到就会去中央仓库下载。中央仓库是在海外的,访问速度有点慢,因此国内不少机构(例如阿里云)也搞了一个仓库:

我们可以配置不从中央仓库下载依赖,而是从阿里云下载,这样下载速度能提高不少;这种仓库就叫远程仓库。实际上,中央仓库可以认为是一个特殊的远程库。

除此之外,在公司里我们可能不能联外网(为了安全),而是公司内部也搭建了一个仓库供开发人员使用,这样能提高安全性,还可以自己决定放什么依赖上去,下载速度也会更快(局域网),更灵活。有时候我们也叫这个为私服,私服也是远程仓库。

至此,我们可以给仓库分个类:

  • 本地仓库
  • 中央仓库
  • 远程仓库(也叫私服)

使用仓库还有个好处:减少了重复的依赖。例如我们电脑上有 10 个项目,每个项目都用到了 Junit,在 Maven 出现之前,每个项目的 lib 目录下都有 Junit 的依赖,相当于我们电脑上有 10 个重复的 Junit。

而使用了 Maven,所有依赖都在仓库里,项目需要用到的时候直接去仓库里面取就行了,项目本身是没有存放依赖的,这样节省了不少磁盘空间。

# 构建工具

我们之前说了什么是构建:构建、依赖管理 (opens new window)

而使用 Maven,可以帮助我们一键构建,整个构建过程,使用 maven 一个命令可以轻松完成整个工作。Maven 将构建分为了如下几步:

清理 → 编译 → 测试 → 报告 → 打包 → 部署

每一个步骤都有对应的 Maven 命令,也可以一键完成以上步骤,大大简化了构建的成本。

# 项目信息管理

一个项目中,除了代码之外,往往还有很多的其他的项目信息,例如项目的描述,开发者列表,Git 仓库地址,许可证等等,这些都是比较琐碎麻烦的;另外还有一些测试报告,静态分析报告等有价值的项目信息,这些都可以通过 Maven 来管理,无形之间也省了不少麻烦。

# Maven 的历史

说了这么多,咋们聊点简单的:Maven 的历史以及学习的必要性

Maven 诞生时间大概在 2001 年 3 月,在 2007~2010 年间,Maven 开始流行起来。Maven 之父后来创建了 Sonatype 公司,该公司目前仍在维护 Maven。

Maven 作者是 Jason Van Zyl。

有必要学习 Maven 么?还是有一点必要的。原因如下:

  1. Maven 使用率非常多,可以说是项目的标配,工作中经常用到。无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷模式,Maven 都能大显身手
  2. 即使不是因为工作,自己开发项目起来,使用 Maven 也很简单;
  3. Maven 解决了一些项目管理的痛点,我们在学习 Maven 时能体会到 Maven 是怎么解决这些痛点的;即使后续出现了新的工具,也能很容易上手;
  4. 本教程也就几篇博客,看完后能很快上手,花不了多少时间,后续想深入也可以阅读相关书籍。

# 小结

Maven 的特点如下:

  • 用于 Java 项目的构建、依赖管理和项目信息管理
  • 跨平台,可以在 Linux,Windows 和 Mac 上使用,这得益于 Maven 自身也是用跨平台的 Java 语言实现的
  • 是 Apache 组织开源的一个非常成功的项目,非常流行,可以说是开发 Java 项目的标配之一,Struts、Hibernate、Ehcache 等知名的开源项目都使用 Maven 进行管理,国内外的公司 Maven 的使用率也很高。
  • 适用于小型的开源项目 和大型企业级应用,功能非常强大
  • 约定大于配置

本小结我们简单说了下 Maven 的作用:构建、依赖管理和项目信息管理,并简单介绍了下坐标的概念,后续我们一步步实践来初步掌握 Maven ‍

上次更新: 2025/6/3 09:31:54
Ant 系列小结
安装Maven

← Ant 系列小结 安装Maven→

最近更新
01
语雀文档一键下载至本地教程
07-04
02
要成功,就不要低估环境对你的影响
07-03
03
血泪教训:电子设备要定期开机
07-02
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式