Java能运行不等于开发环境配好:缺javac、未设JAVA_HOME、PATH未包含$JAVA_HOME/bin,会导致编译失败、IDE报错、Maven找不到JDK;需确认安装的是JDK而非仅JRE,并正确配置环境变量。

java 能跑起来,不等于开发环境就装好了。缺 javac、没 JAVA_HOME、PATH 没配对 bin 目录——这些都会导致编译失败、IDE 报错、Maven 找不到 JDK。
确认系统是否已装 JDK(而非仅 JRE)
很多 Linux 发行版预装的是 openjdk-11-jre 或类似运行时包,它不带 javac 编译器。
执行以下命令检查:
java -version<br>which javac
如果 which javac 无输出,或报 command not found,说明只有 JRE,不能用于开发。
立即学习“Java免费学习笔记(深入)”;
- Ubuntu/Debian 系:用
apt list --installed | grep jdk查看实际安装的包名,留意是否含-jdk(如openjdk-17-jdk),而非-jre - CentOS/RHEL 系:用
rpm -qa | grep java,确认有java-17-openjdk-devel这类带devel的包
用包管理器安装完整 JDK(推荐方式)
除非有强兼容性要求(比如必须用 Oracle JDK 8),否则直接用系统包管理器最稳,自动处理依赖和路径。
Ubuntu/Debian(含 Deepin):
sudo apt update<br>sudo apt install openjdk-17-jdk
CentOS/RHEL 8+:
sudo dnf install java-17-openjdk-devel
RHEL/CentOS 7:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
sudo yum install java-17-openjdk-devel
装完立刻验证:
javac -version # 必须有输出<br>echo $JAVA_HOME # 此时通常为空,下一步才设
注意:openjdk-17-jdk 在 Ubuntu 中会把 JDK 安装到 /usr/lib/jvm/java-17-openjdk-amd64/(ARM 架构是 -aarch64),路径要跟实际一致,别硬抄网上过时教程的 java-11 或 jdk1.8。
正确配置 JAVA_HOME 和 PATH
JAVA_HOME 必须指向 JDK 根目录(不是 bin 子目录),且 PATH 要包含 $JAVA_HOME/bin,否则 javac 不可用。
先确认 JDK 实际路径:
ls /usr/lib/jvm/ | grep openjdk
假设输出是 java-17-openjdk-amd64,则:
- 临时生效(测试用):
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64,然后export PATH=$JAVA_HOME/bin:$PATH - 永久生效(推荐改用户级):
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' >> ~/.bashrc,再echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc,最后source ~/.bashrc - 别往
/etc/environment里硬写死JAVA_HOME——它不支持变量展开,$JAVA_HOME/bin会被当字面量,PATH 就废了
验证:echo $JAVA_HOME 应输出路径;javac -version 和 java -version 输出版本号且一致。
为什么 java -version 成功但 Maven/IDE 仍报错?
常见于三个地方没对齐:
- Maven 默认读
$JAVA_HOME,如果你只配了PATH没设JAVA_HOME,它会 fallback 到系统默认(可能指向旧 JDK) - IDE(如 IntelliJ)启动时读的是登录 shell 的环境,若你用图形界面直接点图标启动,
~/.bashrc可能没加载——得改~/.profile或 IDE 内置的 JDK 路径设置 -
update-alternatives系统被干扰:某些发行版用它管理多 JDK,默认选中的可能是 JRE。运行sudo update-alternatives --config java和--config javac,确保两者指向同一 JDK 的java和javac
最保险的做法:所有工具都明确依赖 JAVA_HOME,而不是靠 PATH 碰运气。
JAVA_HOME 路径写错、javac 不在 PATH 里、不同工具看到的环境不一致——这三个点卡住的人最多,而且错误信息往往不直接告诉你问题在哪。

















