mvn -v报“command not found”本质是shell在$PATH中未找到mvn可执行文件,属操作系统级路径解析失败,需检查MAVEN_HOME配置、PATH是否正确追加$MAVEN_HOME/bin、配置文件是否已source生效,而非Maven自身逻辑问题。

mvn -v 报 command not found,或者输出版本低于 3.8.0,基本可以确定你没装对 Maven——不是没装,就是装了阉割版或旧版。别碰 apt install maven 或 dnf install maven,它们给的不是你要的 Apache Maven。
先确认系统里有没有“真”Maven
运行 mvn -v 看输出,重点盯三处:
– 是否有 Maven home 行,路径是不是指向 /opt/maven、/usr/local/maven 这类手动安装目录;
– 版本号是不是 ≥ 3.8.0(3.9.6 是当前稳定主力);
– Java version 是否匹配(Maven 3.9+ 要求 JDK 11+,JDK 17/21 更稳妥)。
常见假货:
– Ubuntu 桌面版自带的 mvn,Maven home 指向 /usr/share/maven,没 lib/jansi-*.jar,镜像配置也不生效;
– CentOS/RHEL 的 maven-local 包,压根不提供 mvn 命令,是 RPM 构建内部工具;
– which mvn 输出是 /usr/bin/mvn,但 ls -l $(which mvn) 显示它只是个 shell wrapper,背后没真实 bin 目录。
推荐用 SDKMAN! 安装(最省心)
它专为 Java 生态设计,装得干净、切得快、不污染系统 PATH,适合日常开发和多项目并行。
- 执行
curl -s "https://get.sdkman.io" | bash,然后source "$HOME/.sdkman/bin/sdkman-init.sh" - 确认
~/.bashrc或~/.zshrc里有那一行 source,并已执行过source ~/.bashrc -
sdk list maven找带*的稳定版(比如3.9.6),别选4.0.0-alpha类预发布版 -
sdk install maven 3.9.6,再跑mvn -v验证 - 临时切老版本调试?
sdk use maven 3.8.8,关终端就自动恢复
注意:SDKMAN! 默认只对当前 shell 有效;如果新开终端失效,说明 source 没写进 shell 配置文件,或没重新加载。
手动解压安装(离线/内网必需)
核心是三者必须对齐:MAVEN_HOME 路径、PATH 注入位置、文件权限。错一个,mvn 就会报 JAVA_HOME not set(即使 java -version 正常)或找不到 tools.jar。
- 下载官方
bin.tar.gz包(别下-src或.zip),例如:wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz - 解压到统一位置:
sudo tar -xzf apache-maven-3.9.6-bin.tar.gz -C /opt/ && sudo ln -sf /opt/apache-maven-3.9.6 /opt/maven - 写环境变量脚本:
sudo vi /etc/profile.d/maven.sh,内容两行:export MAVEN_HOME=/opt/mavenexport PATH=$MAVEN_HOME/bin:$PATH - 加执行权限并生效:
sudo chmod +x /etc/profile.d/maven.sh && source /etc/profile.d/maven.sh - 验证:
echo $MAVEN_HOME应输出/opt/maven,mvn -v的Maven home也得一致
settings.xml 配错 = 白装(最常被忽略的坑)
Maven 不会报错,但所有依赖都从中央仓慢速下载——你等十分钟才发现镜像根本没生效。
- 优先用用户级配置:
~/.m2/settings.xml(首次运行mvn clean后自动生成,没有就mkdir -p ~/.m2 && cp $MAVEN_HOME/conf/settings.xml ~/.m2/) - 改
<localrepository></localrepository>,比如设为/home/yourname/m2-repo,确保该路径存在且可写(chmod 755 /home/yourname/m2-repo) - 在
<mirrors></mirrors>下加阿里云镜像:<mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>https://maven.aliyun.com/repository/public</url></mirror>
注意:<mirrorOf>central</mirrorOf>只代理中央仓;若想代理全部远程源(含插件库),得写<mirrorOf>*</mirrorOf>,但某些私有插件可能因此拉不到 - 私服认证必须同步配
<servers>和pom.xml里的<distributionManagement>,否则上传会静默失败
真正卡住人的地方从来不是“怎么装”,而是 settings.xml 放错位置、镜像规则写太宽、本地仓库路径没权限、私服账号密码拼错却无提示——这些都不会报错,只会让你反复重试、怀疑人生。


















