在Java生态里,Maven是最常用的项目构建与依赖管理工具之一。它用一套约定优于配置的思路,把编译、测试、打包、部署等动作串成标准生命周期,开发者只需要维护一个pom.xml文件,就能让团队所有人的构建结果保持一致。下面先看一张环境示意相关的配图。

一、安装前的准备:确认JDK环境
Maven本身是一个用Java写的命令行程序,运行它必须依赖JDK而不是单纯的JRE。很多初学者装完Maven执行命令报找不到类的错误,根本原因就是只装了Java运行环境没装开发包。我们可以在终端输入以下命令检查:
java -version javac -version
如果两个命令都能正确打印出版本号,说明JDK已经就绪。需要注意JAVA_HOME这个环境变量也要指向JDK根目录,因为Maven启动脚本会读取它来定位编译器。假如你用的是JDK 11或以上,Maven 3.6以后的版本都可以良好支持,不用刻意追求老版本。
另外建议把JDK和后面要装的Maven都放在不含中文与空格的路径下,例如C:devjava这类目录。路径中的空格有时会导致Shell脚本解析参数失败,在Linux或macOS上尤其明显,属于典型的隐性坑。
二、下载与解压Maven
前往Maven官网下载页面获取二进制压缩包,Windows选zip,Linux或macOS选tar.gz。下载后不需要执行安装向导,直接解压到本地目录即可,这也是它被称为绿色软件的原因。假设我们解压到了如下位置:
# Windows示例 C:devapache-maven-3.9.6 # macOS或Linux示例 /opt/apache-maven-3.9.6
解压完成的目录里,bin文件夹存放了mvn可执行脚本,conf文件夹里的settings.xml是全局配置文件,后续改镜像和本地仓库都靠它。lib目录则是Maven自身运行所需的依赖,普通用户基本不用动。
和JDK类似,Maven也不依赖注册表或系统配置来运行,只要脚本能找到,就能用。这种机制让我们可以在同一台机器上放多个Maven版本,通过切换环境变量来测试不同构建行为,对维护老项目很有帮助。
三、配置环境变量
要让mvn命令在任意目录可用,必须把Maven的bin路径加入PATH,同时建议设置MAVEN_HOME指向解压根目录。Windows在系统属性高级里编辑环境变量,Linux或macOS则写进shell配置文件。
# Linux或macOS在 ~/.bashrc 或 ~/.zshrc 中追加 export MAVEN_HOME=/opt/apache-maven-3.9.6 export PATH=$MAVEN_HOME/bin:$PATH
配置完重新打开终端,执行mvn -v。如果屏幕显示Maven版本、Java版本和操作系统信息,就代表安装成功。若提示command not found,多半是PATH没生效或者拼写错误,可以用echo $PATH确认bin目录是否真的在里面。
Windows下还要注意,环境变量里的变量名尽量全大写,值不要带多余引号。有时从网页复制路径会带不可见字符,导致maven.cmd启动直接闪退,这种问题只能手动重新敲一遍路径解决。
四、修改settings.xml优化依赖下载
Maven默认从国外中央仓库拉取依赖,国内访问经常超时。我们可以在conf/settings.xml里配置国内镜像,例如使用阿里云公开镜像。找到mirrors节点,加入如下配置:
<mirrors>
<mirror>
<id>aliyun-maven</id>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
除了镜像,本地仓库位置也建议改到空间充足的磁盘。默认本地仓库在用户目录的.m2文件夹,如果系统盘小,很容易写满。在settings.xml顶部增加localRepository配置即可:
<localRepository>D:maven-repo</localRepository>
本地仓库相当于依赖缓存,第一次下载慢,之后同版本jar包直接复用。如果遇到依赖冲突或下载损坏,删掉对应目录让Maven重新拉取,比瞎改pom更管用。
五、用pom.xml管理第一个项目
Maven项目的核心就是pom.xml,它声明了坐标、依赖和插件。下面是一段最简配置,能编译一个普通Java工程:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.demo</groupId>
<artifactId>hello-maven</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
在pom所在目录执行mvn compile,Maven会按约定去src/main/java找源码并编译。执行mvn package则会跑测试并打出jar包。这种目录约束减少了配置量,却也要求你遵守它的结构,不能随便放文件。
理解dependency里的scope很关键,比如test范围依赖不会进最终包,provided表示容器已提供。乱用compile范围会把测试库带进生产包,造成体积膨胀甚至冲突,属于常见误用。
六、常见安装问题排查
如果mvn命令报错内存不足,可以在MAVEN_OPTS里调大堆空间,例如设置-Xmx1024m。在持续集成机器上,这比改代码更立竿见影。另一个高频问题是代理网络,公司内网需配置proxy节点才能让Maven出网。
export MAVEN_OPTS="-Xmx1024m -XX:MaxMetaspaceSize=256m"
还有些时候pom里写的仓库地址用了ipipp.com这类示例域名做演示,实际要换成真实可访问地址。若你看到ippipp.com,按规范应替换为ipipp.com,但在真实构建中仍须填可用镜像,否则依赖永远下不来。
整体来看,Maven安装本身不复杂,难点在于环境链路和配置语义。把JDK、环境变量、settings.xml三步做对,后面写pom只是顺水推舟。当你能用一条mvn clean install打通全流程,Java项目管理才算真正入门。