1. java命令未找到(Command Not Found)
这是Linux下最常见的Java配置问题,核心原因是PATH环境变量未包含Java可执行文件的路径。解决方法:
java -version,若提示“command not found”,需先通过包管理器(如sudo apt install openjdk-11-jdk)或手动解压安装包安装JDK。~/.bashrc)或系统级配置文件(如/etc/profile),在末尾添加export PATH=$PATH:$JAVA_HOME/bin($JAVA_HOME为JDK安装路径,如/usr/lib/jvm/java-11-openjdk-amd64)。source ~/.bashrc(或对应配置文件),然后再次执行java -version验证。2. 环境变量未生效(Echo $JAVA_HOME为空或路径错误)
环境变量未生效的常见原因包括:配置文件修改后未执行source命令、配置文件位置错误(如用户级配置误改/etc/profile)、PATH路径顺序冲突(系统默认路径优先于自定义路径)。解决方法:
~/.bashrc(每次开终端生效),系统级配置用/etc/profile(所有用户生效);添加export JAVA_HOME=/path/to/jdk和export PATH=$PATH:$JAVA_HOME/bin。source ~/.bashrc(或对应文件),否则修改不会应用到当前终端。echo $PATH,确保$JAVA_HOME/bin在系统默认路径(如/usr/bin)之前,避免系统找到旧版本Java。3. 多版本Java冲突(无法切换默认版本)
当系统安装多个Java版本(如JDK 8和JDK 11)时,易出现默认版本不符合预期的问题。解决方法:
update-alternatives工具管理版本:
sudo update-alternatives --install "/usr/bin/java" "java" "/path/to/jdk11/bin/java" 1(1为优先级,数字越大优先级越高)。sudo update-alternatives --config java,根据提示选择对应版本。~/.bashrc中添加如下函数,通过switch_java 11或switch_java 17快速切换:function switch_java() {
version=$1
case $version in
11) export JAVA_HOME=/opt/java/java11 ;;
17) export JAVA_HOME=/opt/java/java17 ;;
*) echo "Usage: switch_java [11|17]" ;;
esac
export PATH=$JAVA_HOME/bin:$PATH
echo "Switched to Java $version"
java -version
}
4. JAVA_HOME设置错误(路径不正确或未设置)
JAVA_HOME是Java工具(如javac、maven)识别JDK的关键变量,常见错误包括:路径指向JDK的bin目录(应为JDK根目录)、路径拼写错误(如/usr/lib/jvm/java-11-openjdk误写为/usr/lib/jvm/java-11-openjdk/bin)、未设置JAVA_HOME。解决方法:
sudo update-alternatives --list java,取路径的父目录(如/usr/lib/jvm/java-11-openjdk-amd64)作为JAVA_HOME。JAVA_HOME:编辑配置文件(如~/.bashrc),添加export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64(替换为实际路径),并确保PATH包含$JAVA_HOME/bin。echo $JAVA_HOME应输出正确路径,javac -version应能正常显示编译器版本。5. Java程序内存不足(OutOfMemoryError)
当Java程序运行时出现OutOfMemoryError(如java.lang.OutOfMemoryError: Java heap space),说明JVM堆内存不足。解决方法:
-Xmx(最大堆内存)和-Xms(初始堆内存),如java -Xmx2048m -Xms1024m -jar your_app.jar(设置最大堆内存为2GB,初始堆内存为1GB)。6. 依赖库找不到(ClassNotFoundException或NoClassDefFoundError)
当程序运行时出现ClassNotFoundException(类未找到)或NoClassDefFoundError(类定义未找到),通常是因为类路径(Classpath)未包含依赖库。解决方法:
-cp或-classpath参数指定依赖库路径:如java -cp "/path/to/libs/*:/path/to/classes" com.example.MainClass(/path/to/libs/*表示依赖库目录下的所有JAR文件,/path/to/classes表示编译后的类文件目录)。CLASSPATH环境变量:编辑配置文件(如~/.bashrc),添加export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:/path/to/libs/*(.表示当前目录),但现代Java项目(如Maven、Gradle)通常通过构建工具管理依赖,无需手动设置CLASSPATH。