
$ mvn --version
zsh: command not found: mvn系统缺少Java开发工具包(JDK)和Maven构建工具。
# 从AWS Corretto下载(或使用Temurin)
curl -L -o ~/jdk.tar.gz "https://corretto.aws/downloads/latest/amazon-corretto-17-aarch64-macos-jdk.tar.gz"
# 解压到指定目录
mkdir -p ~/java-temurin
tar -xzf ~/jdk.tar.gz -C ~/java-temurin --strip-components=1# 下载Maven
curl -L -o ~/maven.zip "https://archive.apache.org/dist/maven/maven-3/3.9.8/binaries/apache-maven-3.9.8-bin.zip"
# 解压
unzip ~/maven.zip -d ~/
mv ~/apache-maven-3.9.8 ~/maven在 ~/.zshrc 中添加:
# Java环境
export JAVA_HOME=$HOME/java-temurin/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
# Maven环境
export MAVEN_HOME=$HOME/maven
export PATH=$MAVEN_HOME/bin:$PATHsource ~/.zshrc
# 验证安装
java -version
mvn -version💡 小贴士:如果使用Intel芯片Mac,请下载x86_64版本;Windows用户可考虑使用Chocolatey或Scoop包管理器。
当你从Git仓库克隆下一个Java项目,满怀期待地执行 mvn clean install 时,却被 zsh: command not found: mvn 泼了一盆冷水——这是每个Java开发者都可能遇到的场景。
本文作为系列第一篇,将极其详细地讲解如何在macOS(ARM64架构)上从零开始配置Java开发环境,包括JDK的选型与安装、Maven的配置、环境变量的原理与设置,以及常见问题的深度剖析。
本文目标:让你不仅知道"怎么配",更理解"为什么这么配"。
在执行任何安装之前,首先需要确认你的Mac芯片类型,这直接决定下载哪个版本的JDK。
# 在终端执行
uname -m输出解读:
arm64 → Apple Silicon芯片(M1/M2/M3/M4系列)x86_64 → Intel芯片为什么这很重要:ARM64和x86_64的JDK版本不通用,下载错误会导致无法执行或性能问题。
# 检查Java版本
java -version
# 检查JAVA_HOME是否已设置
echo $JAVA_HOME
# 检查系统路径中的Java
which java如果已有旧版本(如Java 8或Java 11),建议先确认项目要求。本项目需要 Java 17。
macOS默认从bash切换到了zsh,本文所有配置基于zsh。确认你的Shell类型:
echo $SHELL
# 输出应为 /bin/zsh 或 /bin/bash市面上主流的JDK发行版对比:
发行版 | 提供商 | 特点 | 适用场景 |
|---|---|---|---|
Amazon Corretto | AWS | 免费、长期支持、经过生产环境验证 | 通用首选 |
Eclipse Temurin | Eclipse基金会 | 开源、社区活跃、AdoptOpenJDK继任者 | 社区推荐 |
Oracle OpenJDK | Oracle | 官方版本、无商业支持 | 开发测试 |
Oracle JDK | Oracle | 商业版本、付费支持 | 企业生产 |
Azul Zulu | Azul | 性能优化、多种GC选择 | 特殊场景 |
GraalVM | Oracle | 支持AOT编译、多语言 | 微服务/原生镜像 |
本教程选择 Amazon Corretto 17,原因:
# 创建存放目录
mkdir -p ~/java-temurin
# 下载Corretto 17 ARM64版本(永久有效链接)
curl -L -o ~/jdk-17-arm64.tar.gz \
"https://corretto.aws/downloads/latest/amazon-corretto-17-aarch64-macos-jdk.tar.gz"
# 如果是Intel芯片,使用:
# curl -L -o ~/jdk-17-x64.tar.gz \
# "https://corretto.aws/downloads/latest/amazon-corretto-17-x64-macos-jdk.tar.gz"下载文件说明:
amazon-corretto-17-aarch64-macos-jdk.tar.gz~/Downloads 目录# 方式一:命令行下载后的解压
tar -xzf ~/jdk-17-arm64.tar.gz -C ~/java-temurin --strip-components=1
# 方式二:浏览器下载后的解压
tar -xzf ~/Downloads/amazon-corretto-17-aarch64-macos-jdk.tar.gz \
-C ~/java-temurin --strip-components=1参数解释:
-xzf:解压(x)gzip压缩(z)tar包(f)-C ~/java-temurin:解压到目标目录--strip-components=1:去除顶层目录,直接将内容解压到目标文件夹为什么不安装到系统目录(如/Library/Java)?undefined安装到用户目录
~/的好处:不需要sudo权限 可以同时管理多个版本 卸载时直接删除文件夹即可 不会影响系统其他用户
# 检查目录结构
ls -la ~/java-temurin/
# 应看到 bin/ conf/ include/ jmods/ legal/ lib/ man/ release 等目录
# 验证可执行文件
~/java-temurin/Contents/Home/bin/java -version
# 输出示例:
# openjdk version "17.0.11" 2024-04-16 LTS
# OpenJDK Runtime Environment Corretto-17.0.11.9.1 (build 17.0.11+9-LTS)
# OpenJDK 64-Bit Server VM Corretto-17.0.11.9.1 (build 17.0.11+9-LTS, mixed mode, sharing)Apache Maven是一个项目管理与构建工具,主要功能:
clean → compile → test → package → verify → install → deploy本项目使用Maven 3.9.8,原因:
# 创建目录
mkdir -p ~/maven
# 下载Maven 3.9.8
curl -L -o ~/maven-3.9.8-bin.zip \
"https://archive.apache.org/dist/maven/maven-3/3.9.8/binaries/apache-maven-3.9.8-bin.zip"
# 解压(zip格式用unzip)
unzip ~/maven-3.9.8-bin.zip -d ~/
mv ~/apache-maven-3.9.8/* ~/maven/
rm -rf ~/apache-maven-3.9.8apache-maven-3.9.8-bin.zip 链接~/maven~/maven/
├── bin/ # 可执行脚本(mvn, mvnDebug等)
│ └── mvn # 主命令脚本
├── boot/ # 类加载器
├── conf/ # 配置文件
│ ├── settings.xml # 全局配置文件(重要!)
│ └── toolchains.xml # 工具链配置
├── lib/ # Maven核心库
└── LICENSE, NOTICE... # 法律文件Maven默认从中央仓库(https://repo.maven.apache.org/maven2/)下载依赖,国内访问速度慢且不稳定。
创建或修改 ~/.m2/settings.xml:
mkdir -p ~/.m2在 ~/.m2/settings.xml 中写入:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 配置阿里云镜像 -->
<mirrors>
<mirror>
<id>aliyun-maven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<!-- 备用镜像:华为云 -->
<mirror>
<id>huaweicloud</id>
<mirrorOf>central</mirrorOf>
<name>华为云镜像</name>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
</mirrors>
<!-- 设置本地仓库位置(可选) -->
<localRepository>${user.home}/.m2/repository</localRepository>
<!-- 配置JDK版本(可选,帮助编译时指定版本) -->
<profiles>
<profile>
<id>jdk-17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>17</jdk>
</activation>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
</profile>
</profiles>
</settings>镜像配置说明:
<mirrorOf>central</mirrorOf>:拦截所有对中央仓库的请求<url>:阿里云仓库地址,速度可达10MB/s+环境变量是操作系统级别的命名参数,Shell和应用程序可以通过它们获取配置信息。
变量名 | 作用 | 示例值 |
|---|---|---|
| Java安装根目录 |
|
| Maven安装根目录 |
|
| 可执行文件搜索路径 |
|
| Java类路径 | 通常不需要手动设置 |
macOS下zsh的配置文件加载顺序:
文件 | 加载时机 | 建议用途 |
|---|---|---|
| 每次启动,系统级 | 系统管理员配置,不建议修改 |
| 每次启动,用户级 | 最小化配置,用于PATH等 |
| 登录Shell | 登录时执行一次 |
| 交互式Shell | 最常用,别名、提示符、环境变量 |
| 登录Shell之后 | 登录后执行 |
| 退出Shell时 | 清理操作 |
实用建议:大多数情况下,把环境变量配置在 ~/.zshrc 中即可。
~/.zshrc打开配置文件:
# 使用任意编辑器
vim ~/.zshrc
# 或
nano ~/.zshrc
# 或
code ~/.zshrc # 使用VS Code添加以下内容:
# ============================================
# Java & Maven 环境配置
# 作者: [你的名字]
# 日期: 2026-07-26
# ============================================
# ---------- JDK 17 配置 ----------
export JAVA_HOME=$HOME/java-temurin/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
# ---------- Maven 3.9.8 配置 ----------
export MAVEN_HOME=$HOME/maven
export PATH=$MAVEN_HOME/bin:$PATH
# ---------- 其他可选配置 ----------
# 设置Maven内存(解决大项目编译内存不足)
export MAVEN_OPTS="-Xmx2048m -XX:MaxPermSize=512m"
# 添加自定义别名
alias mci='mvn clean install'
alias mcp='mvn clean package'
alias mcc='mvn clean compile'
alias mvnt='mvn test'
# 打印环境信息(可注释掉)
echo "✅ JAVA_HOME: $JAVA_HOME"
echo "✅ MAVEN_HOME: $MAVEN_HOME"# 方式一:重新加载配置(推荐)
source ~/.zshrc
# 方式二:新开终端窗口(自动加载)
# 验证环境变量
echo $JAVA_HOME
# 输出: /Users/你的用户名/java-temurin/Contents/Home
echo $MAVEN_HOME
# 输出: /Users/你的用户名/maven
echo $PATH
# 应看到 $JAVA_HOME/bin 和 $MAVEN_HOME/bin 在路径中
# 验证命令可用
java -version
javac -version
mvn -versionsource ~/.zshrc 后还是没有效果排查步骤:
# 检查文件是否真的被读取
echo "test" >> ~/.zshrc && source ~/.zshrc
# 如果终端输出 "test",说明读取成功
# 检查是否有语法错误
zsh -n ~/.zshrc
# 查看实际PATH值
echo $PATH | tr ':' '\n' | grep -E 'java|maven'java -version 显示旧版本原因:系统路径 /usr/bin/java 可能指向旧版本。
解决方法:
# 查看java命令的实际位置
which java
# 如果输出 /usr/bin/java,需要调整PATH顺序
# 确保JAVA_HOME/bin在PATH最前面
export PATH=$JAVA_HOME/bin:$PATH
# 注意:$JAVA_HOME/bin 放在 $PATH 前面source ~/.zshrc原因:可能使用的不是zsh,或者配置文件路径不对。
# 确认当前Shell
echo $SHELL
# 如果是bash,应配置 ~/.bash_profile 或 ~/.bashrc
# 如果是zsh,配置 ~/.zshrc
# 设置默认Shell为zsh(可选)
chsh -s /bin/zsh场景 | 需要的Java版本 |
|---|---|
当前项目 | Java 17 |
遗留项目维护 | Java 8 或 Java 11 |
学习新特性 | Java 21 (LTS) |
Android开发 | Java 11 或 17 |
# 使用Homebrew安装
brew install jenv
# 配置jEnv到zshrc
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
source ~/.zshrc# 添加已安装的JDK
jenv add ~/java-temurin/Contents/Home
# 查看已添加的版本
jenv versions
# 设置全局版本
jenv global 17.0
# 设置当前目录版本(进入项目目录后执行)
jenv local 17.0注意:如果使用jEnv,需要移除
~/.zshrc中手动设置的JAVA_HOME,由jEnv自动管理。
# 进入项目目录
cd ~/Desktop/FeiChenERP/backend
# 查看pom.xml确认项目信息
cat pom.xml | grep -E "<groupId>|<artifactId>|<version>" | head -10
# 首次构建(下载所有依赖)
mvn clean compile
# 观察下载过程
# [INFO] Downloading from aliyun-maven: https://maven.aliyun.com/repository/public/...
# 如果看到类似输出,说明镜像配置成功错误信息 | 原因 | 解决方法 |
|---|---|---|
| Java版本不匹配 | 检查项目pom.xml中的 |
| 依赖下载失败 | 检查网络,或切换到备选镜像 |
| 内存不足 | 设置 |
| 插件版本问题 | 更新插件版本或在pom中指定 |
# 跳过测试打包(加快速度)
mvn clean package -DskipTests
# 构建成功后查看
ls -la target/*.jar
# 预期输出:openerp-backend-1.0.0.jar
# 验证jar包是否可执行
java -jar target/openerp-backend-1.0.0.jar --version
# 如果输出版本信息,说明jar包构建成功openerp-backend-1.0.0.jar 的命名结构:
部分 | 来源 | 示例 |
|---|---|---|
|
| pom.xml中定义 |
|
| pom.xml中定义 |
| 打包格式 | Maven默认生成 |
注意:实际文件名可能与你预期的不同(如原以为
openerp-1.0.0.jar),应以target目录实际生成的为准。
zsh: command not found: mvn 完整排查清单# 1. 检查文件是否存在
ls -la ~/maven/bin/mvn
# 2. 检查文件是否可执行
chmod +x ~/maven/bin/mvn
# 3. 检查MAVEN_HOME是否正确
echo $MAVEN_HOME
# 应输出 ~/maven(不含bin)
# 4. 检查PATH是否包含MAVEN_HOME/bin
echo $PATH | grep maven
# 5. 直接执行完整路径测试
~/maven/bin/mvn -version
# 6. 检查zshrc是否正确加载
grep -E "MAVEN_HOME|maven" ~/.zshrc
# 7. 检查是否有其他配置覆盖
grep -r "MAVEN_HOME" ~/.zprofile ~/.zshenv 2>/dev/nullUnable to access jarfile 深度解析# 1. 确认target目录存在
ls -la target/
# 2. 如果target不存在,执行构建
mvn package
# 3. 如果target存在但没有jar包,检查pom.xml的打包配置
grep -A5 "<packaging>" pom.xml
# 4. 检查是否有多个jar包
find target -name "*.jar" -type f
# 5. 检查jar包是否损坏
file target/openerp-backend-1.0.0.jar
# 正常输出: Zip archive data
# 6. 尝试用绝对路径执行
java -jar $(pwd)/target/openerp-backend-1.0.0.jar命令行临时设置(最高优先级)
↓
Shell配置文件 (~/.zshrc, ~/.bashrc)
↓
系统级配置 (/etc/profile, /etc/environment)
↓
默认值(最低优先级)调试技巧:
# 查看所有环境变量
env | sort
# 查看特定变量来源
which java
type java
# 查看命令执行详情
set -x
mvn -version
set +xsetup-java-env.sh:
#!/bin/bash
# Java开发环境一键配置脚本
# 使用方法: chmod +x setup-java-env.sh && ./setup-java-env.sh
set -e
echo "🚀 开始配置Java开发环境..."
# 1. 创建目录
mkdir -p ~/java-temurin ~/maven ~/.m2
# 2. 下载JDK 17
if [ ! -d "$HOME/java-temurin/Contents/Home" ]; then
echo "📥 下载JDK 17..."
curl -L -o /tmp/jdk.tar.gz \
"https://corretto.aws/downloads/latest/amazon-corretto-17-aarch64-macos-jdk.tar.gz"
tar -xzf /tmp/jdk.tar.gz -C ~/java-temurin --strip-components=1
rm /tmp/jdk.tar.gz
fi
# 3. 下载Maven
if [ ! -f "$HOME/maven/bin/mvn" ]; then
echo "📥 下载Maven..."
curl -L -o /tmp/maven.zip \
"https://archive.apache.org/dist/maven/maven-3/3.9.8/binaries/apache-maven-3.9.8-bin.zip"
unzip -q /tmp/maven.zip -d /tmp/maven-extract
mv /tmp/maven-extract/apache-maven-3.9.8/* ~/maven/
rm -rf /tmp/maven.zip /tmp/maven-extract
fi
# 4. 配置环境变量
if ! grep -q "JAVA_HOME" ~/.zshrc; then
echo "📝 配置环境变量..."
cat >> ~/.zshrc << 'EOF'
# Java & Maven Environment
export JAVA_HOME=$HOME/java-temurin/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
export MAVEN_HOME=$HOME/maven
export PATH=$MAVEN_HOME/bin:$PATH
export MAVEN_OPTS="-Xmx2048m"
EOF
fi
# 5. 配置Maven镜像
if [ ! -f ~/.m2/settings.xml ]; then
echo "📝 配置Maven镜像..."
cat > ~/.m2/settings.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<name>阿里云镜像</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
</settings>
EOF
fi
# 6. 激活配置
source ~/.zshrc
echo "✅ 配置完成!"
echo "JDK版本: $(java -version 2>&1 | head -1)"
echo "Maven版本: $(mvn -version 2>&1 | head -1)"# 清理并编译
mvn clean compile
# 清理并打包(跳过测试)
mvn clean package -DskipTests
# 清理并安装到本地仓库
mvn clean install
# 只运行测试
mvn test
# 查看依赖树
mvn dependency:tree
# 查看有效配置
mvn help:effective-pom
# 快速修复依赖问题
mvn dependency:purge-local-repository如果使用IntelliJ IDEA:
File → Project Structure → SDKs+ → Add JDK → 选择 ~/java-temurin/Contents/HomeIntelliJ IDEA → Settings → Build, Execution, Deployment → Build Tools → Maven~/maven~/.m2/settings.xml~/.m2/repositoryRunner-Xmx2048m知识点 | 关键命令/文件 | 核心理解 |
|---|---|---|
JDK安装 |
| 选择Corretto,安装到用户目录 |
Maven安装 |
| 版本3.9.8,配置阿里云镜像 |
环境变量 |
| JAVA_HOME + MAVEN_HOME + PATH |
配置生效 |
| 新开终端自动加载 |
验证安装 |
| 确认版本正确 |
项目构建 |
| 生成可执行jar包 |
本文解决了"工具层"的配置问题,让项目能够编译打包。但启动运行时会遇到:
Communications link failure —— MySQL未安装Connection refused:6379 —— Redis未安装下一篇将详细讲解:
# 拷贝以下命令执行,一次性检查所有配置
echo "=== 系统信息 ===" && uname -a && \
echo "=== Shell ===" && echo $SHELL && \
echo "=== JAVA_HOME ===" && echo $JAVA_HOME && \
echo "=== MAVEN_HOME ===" && echo $MAVEN_HOME && \
echo "=== Java版本 ===" && java -version && \
echo "=== Maven版本 ===" && mvn -version && \
echo "=== PATH中的Java/Maven ===" && which java && which mvn错误码/信息 | 含义 | 快速解决 |
|---|---|---|
| 命令未找到 | 检查PATH配置 |
| 权限不足 |
|
| 网络超时 | 检查代理或更换镜像 |
| 缺少JDK | 检查JAVA_HOME指向正确 |
| JDK版本过低 | 升级到JDK 17+ |
本文档持续更新中,如有问题欢迎讨论交流。
您好,我是肥晨。
欢迎关注我获取前端/AI学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。