【工具】Maven的下载、安装、使用

Maven的下载、安装、使用

一、为什么需要使用Maven呢?

场景一:新建项目

没有Maven,程序员的操作:

有Maven,程序员的操作:

场景二:项目缺少依赖jar包

没有Maven,程序员的操作:

有Maven,程序员的操作:

场景三:项目从源码到部署到服务器

没有Maven,程序员的操作:

有Maven,程序员的操作:


对比总览

无 Maven 有 Maven
场景一:新建项目 手动建目录 + 手工下载每个 jar + 处理传递依赖 + 配 classpath mvn archetype:generate 或写 pom.xml,自动搞定一切
复杂度 高(7 步起) 低(2 步)
耗时 半天起步 几分钟
场景二:缺少依赖 搜索引擎找 jar → 下载 → 发现缺传递依赖 → 继续找 → 版本冲突试错 pom.xml 加一行 <dependency>,Maven 自动下载所有连带依赖
复杂度 高(地狱级传递依赖追踪) 低(一行 XML)
耗时 30 分钟到数小时 10 秒
场景三:源码到部署 javac 编译 → 手动跑测试 → jar 打包 → 写 MANIFEST → scp 上传 → 每次重复 mvn clean package → 编译测试打包一条命令 → 失败自动中断
复杂度 高(6 步,全手动) 低(1 条命令)
耗时 每次 10 分钟 + 易出错 每次 30 秒,可靠可重复

核心差异就三个词

  • 规范化 ------ 项目结构、构建流程全行业统一,换公司换项目,目录结构不变
  • 自动化 ------ 依赖解析、传递依赖、版本冲突、编译测试打包,全由 Maven 搞定
  • 可重复 ------ 今天能跑、明天能跑、同事电脑上也能跑,CI/CD 流水线也能跑

没有 Maven 的年代,每个 Java 项目的 lib/ 文件夹都是一个手工维护的噩梦。Maven 把这件脏活累活变成了自动化的基础能力。

结论:

使用Maven,规范化、自动化、可重复。Maven把编码之外的重复性、流程性工作封装起来,对程序员暴露简单易用的入口。使用Maven可以大大节省程序员的时间,降低交付流程的复杂度。 不止暴露给程序员,也可以暴露给自动化构建工具,例如Jenkins,它们配合完成自动化部署。

二、Maven的下载与安装

(一)图形界面操作(Mac)

1. 下载

去哪里下载呢?

官网:https://maven.apache.org/download.cgi

下载哪个包呢?

当前最新版本是3.9.16。

我的笔记本是mac,所以下载"apache-maven-3.9.16-bin.tar.gz"。

下载的是什么呢?

下载的是Maven编译过后的二进制文件.class文件。下载后解压可以看到目录:

Maven安装包解压后的目录结构,各个包的作用,包下面放的是什么?

先看一下 README.txt

Maven二进制包目录结构说明

了解到Maven是由Java语言编写的项目管理工具。要想使用Maven,需要jdk环境,(如果拿到的是Maven的source源码,就需要对Maven的源码进行编译、运行)。目前我拿到的是二进制文件(编译过的)可在jdk环境配好的情况下直接运行。

配置Maven运行环境的过程就是Maven的安装过程。

2. 安装

  1. 安装到电脑的什么目录下?为什么?
    只要安装到没有中文,没有空格,没有括号的路径下即可。
    根本原因:脚本和 Java 对特殊字符的处理很脆弱。中文、空格、括号,会当特殊字符处理。
  2. 安装怎么理解?实际是做了什么操作?
    安装是做了一些配置,让操作系统可以识别Maven的存在,可以接入Maven。还配了一些JVM的路径,远程仓库的路径、等,让Maven可以使用JVM、可以主动去远程仓库拉取jar包。
    安装没有编译、写注册表这些内容,因为,二进制包本身就是编译好的文件,可直接在JVM上运行。而写注册表是Windows上的操作,目的是为了记住Maven的路径,不够通用,Maven采用更通用的方式,配置path,让操作系统去寻找mvn的路径。
  3. 安装包括配置,配置项有哪些?要怎么配置?为什么要配置这些?
    (1) 安装Java:
    先检查是否已安装:
    terminal中输入
    java -version
    javac -version

为什装Java:因为Maven是Java编写的项目,运行需要JVM,所以需要安装JDK,那安装jre可以吗?能不能只安装jvm?

不能只装jvm,因为Maven启动项目需要java命令,而java命令属于jre。也不能只装jre,因为Maven的核心功能之一编译项目compile,需要使用javac命令,javac命令属于JDK。所以使用Maven必须安装JDK。

(AI回复:Maven 是 Java 编写的程序,因此运行 Maven 至少需要 JRE(包含 JVM);但 Maven 的核心用途是编译、测试、打包 Java 项目,而这些过程需要 JDK 提供的 javac 等开发工具,所以实际使用 Maven 时通常必须安装 JDK,而不是只安装 JRE。)

(2) 配置环境变量(配置MAVEN_HOME;配置PATH)(Mac/Linux):

编辑:

vim ~/.zshrc

添加:

export MAVEN_HOME=/Users/xxx/software/apache-maven-3.9.11

export PATH= M A V E N H O M E / b i n : MAVEN_HOME/bin: MAVENHOME/bin:PATH

刷新配置:

source ~/.zshrc

操作截图:

(3) 检查安装是否成功:

terminal中输入mvn -v,显示目标版本号即成功

  1. 安装时与其他软件有什么联系?
    依赖JDK,必须安装JDK。
    Maven是怎么跟IDEA关联起来的?为什么idea中可以使用Maven的功能?
    Maven还可以在什么地方使用?还跟什么软件有关系?
    Maven与命令行、终端terminal的关系是什么?
    Maven与idea的关系是什么?

3. 卸载

  1. 删除安装包
  2. 删除环境变量配置
    环境变量可能配置在
    ~/.bash_profile
    ~/.zshrc
    它们两个有什么关系?

(二)用命令行操作

1. 命令行安装 Maven

Maven 完全可以通过命令行下载和安装,而且很多 Linux 服务器就是这么做的。

Mac(Homebrew)

如果安装了 Homebrew:

bash 复制代码
brew install maven

查看:

bash 复制代码
mvn -version

输出类似:

text 复制代码
Apache Maven 3.9.x
Java version: 17

安装完成。


2. 纯命令行手动下载安装 Maven

假设不使用包管理器。

(1) 下载

可以从 Maven 官网获取压缩包:

Apache Maven Downloads

例如:

bash 复制代码
curl -O https://downloads.apache.org/maven/maven-3/3.9.11/binaries/apache-maven-3.9.11-bin.tar.gz

(2) 解压
bash 复制代码
tar -zxvf apache-maven-3.9.11-bin.tar.gz

得到:

text 复制代码
apache-maven-3.9.11/

(3) 配置环境变量
bash 复制代码
vim ~/.zshrc

添加:

bash 复制代码
export MAVEN_HOME=$HOME/apache-maven-3.9.11
export PATH=$MAVEN_HOME/bin:$PATH

刷新:

bash 复制代码
source ~/.zshrc
(4) 验证:
bash 复制代码
mvn -version

3、命令行安装 Maven 的本质

无论是:

bash 复制代码
brew install maven

还是:

bash 复制代码
apt install maven

最终都在做类似的事情:

text 复制代码
下载 Maven 压缩包
      ↓
解压到某个目录
      ↓
配置 PATH
      ↓
获得 mvn 命令

所以 Maven 本质上仍然是一个"解压即用"的工具,只是包管理器帮你自动完成了这些步骤。

三、Maven的使用

Maven的使用在下篇文章中详解(传送门)。

相关推荐
JAVA面经实录91720 小时前
集合框架 (六)
java·开发语言
骇客野人20 小时前
Linux 查看 Java 进程常用命令
java·linux·运维
周GZ21 小时前
简单讲解Java中静态方法与 实例方法
java·开发语言
疯狂打码的少年21 小时前
【数据结构】树的基本概念与二叉树定义
java·数据结构·笔记·算法
盗理者1 天前
AI Agent 技能分享|SQL 性能诊断与优化
java·sql·spring·skill
GitLqr1 天前
Java 26 终于原生支持 HTTP/3 了:告别 Netty,直接用 QUIC
java·netty·http3
用户40966601317511 天前
Jackson 序列化:@JsonIgnore / @JsonProperty / @JsonFormat / @JsonInclude / @JsonUnwrapped 一次讲清楚
java·后端
码路漫漫1 天前
用了 Caffeine,消息为什么还是被处理了两次?
java
云和数据.ChenGuang1 天前
fastapi项目拆分实战数据模型
java·服务器·数据库·人工智能·深度学习·fastapi·强化学习
小龙报1 天前
【优选算法】1.搜索插入位置 2.x的平方根
java·c语言·数据结构·c++·python·算法·蓝桥杯