【工具】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的使用在下篇文章中详解(传送门)。

相关推荐
极创信息1 小时前
Linux挖矿病毒深度清理实战教程,从进程隐藏、Rootkit驻留到彻底根除
java·大数据·linux·运维·安全·tomcat·健康医疗
努力成为AK大王2 小时前
并发编程的核心挑战、优化方案与核心知识点总结
java·开发语言·数据库
云烟成雨TD2 小时前
Agent Scope Java 2.x 系列【10】技能(Skill)
java·人工智能·agent
摇滚侠2 小时前
SpringMVC 入门到实战 DispatcherServlet 源码解读 92-95
java·后端·spring·maven·intellij-idea
键盘歌唱家2 小时前
Spring AI 入门分享:它和“直接调 API“到底差在哪
java·人工智能·spring
宸丶一3 小时前
Day 10:LangGraph - Agent 的图执行引擎
java·windows·python
hikktn3 小时前
Excel 导出 OOM 预防实战:30 万行从堆溢出到 50MB 的演进
java·excel·easyexcel
风味蘑菇干3 小时前
WTomcat服务器
java·服务器
燕-孑3 小时前
tomcat详解(基础到高级生产)
java·tomcat