Maven安装需确保JDK版本匹配(3.9+需JDK 11+)、JAVA_HOME指向JDK根目录并正确配置,推荐手动下载解压Maven并设置M2_HOME;settings.xml以用户级~/.m2/settings.xml优先,国内应配置阿里云镜像,调试时用mvn -X和mvn help:effective-settings验证。

确认系统已装 JDK 且 JAVA_HOME 正确
没配好 JDK,Maven 启动直接报 Exception in thread "main" java.lang.UnsupportedClassVersionError 或直接提示 “No Java runtime present”。Maven 3.9+ 要求 JDK 11+,老版本 Maven(如 3.6.3)最低也需 JDK 8。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 先运行
java -version和javac -version确认输出一致、版本达标 - 检查
JAVA_HOME是否指向 JDK 根目录(不是 JRE),例如:/usr/lib/jvm/java-17-openjdk-amd64 - 在
~/.bashrc或/etc/environment中设置:export JAVA_HOME=/path/to/your/jdk,然后source ~/.bashrc - 别用
update-alternatives --config java改了java命令却忘了同步JAVA_HOME——这是最常被忽略的断点
用 apt 安装(Ubuntu/Debian)还是手动解压(推荐)
apt install maven 最快,但 Ubuntu 22.04 默认源里是 Maven 3.6.3,CentOS Stream 9 是 3.8.6,都偏旧;且 apt 版本不走 M2_HOME,升级/切换版本困难,mvn -v 显示的路径也藏得深。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 去官网 https://maven.apache.org/download.cgi 下载
apache-maven-3.9.7-bin.tar.gz(选-bin.tar.gz,别下-src.zip) - 解压到固定位置,比如
/opt/maven:sudo tar -xzf apache-maven-3.9.7-bin.tar.gz -C /opt/ - 设环境变量:
export M2_HOME=/opt/maven和export PATH=$M2_HOME/bin:$PATH - 验证:
mvn -v输出里必须同时出现 Java 版本和 Maven 版本,且which mvn指向/opt/maven/bin/mvn
settings.xml 放哪?改什么才真正生效
全局配置写在 $M2_HOME/conf/settings.xml,用户级配置放 ~/.m2/settings.xml。后者优先级更高,但很多人改了全局文件却以为自己在改用户配置,结果镜像、代理全不生效。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 首次配置优先编辑
~/.m2/settings.xml(若不存在就mkdir -p ~/.m2 && cp $M2_HOME/conf/settings.xml ~/.m2/) - 国内要用阿里云镜像,就在
<mirrors>块里加:<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>Aliyun Maven</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>
- 改完别忘了
mvn help:effective-settings查看最终生效的配置,它会告诉你实际加载的是哪个settings.xml - 代理、
localRepository路径这些字段,如果在两个settings.xml里都定义了,以用户级为准
执行 mvn clean compile 卡住或报错 Could not transfer artifact
这基本等于网络或镜像没生效:要么 DNS 不通,要么 settings.xml 路径错、格式错(比如 XML 标签没闭合)、镜像 <mirrorOf> 写成了 central 而不是 *,或者公司内网需要额外配置认证。
实操建议:
立即学习“Java免费学习笔记(深入)”;
- 先跑
mvn archetype:generate -DgroupId=test -DartifactId=test-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false,看是否能拉下maven-archetype-quickstart—— 这是最轻量的连通性测试 - 加
-X参数看详细日志:mvn -X clean compile 2>&1 | grep -i "downloading\|transfer",确认请求发到了哪个 URL - 如果用的是私有 Nexus/Artifactory,
<servers>里密码别明文写,用mvn --encrypt-master-password和--encrypt-password加密后填进~/.m2/settings-security.xml - 临时绕过镜像调试:加参数
-Dmaven.repo.local=/tmp/test-repo,避免污染本地仓库
JAVA_HOME 和 M2_HOME 不在一个 shell 会话里生效,最容易让人反复重试却找不到原因。

















