环境变量是Java运行的基础,JAVA_HOME(指向JDK安装路径)和PATH(包含Java可执行文件路径)设置不当是最常见的配置失败原因。例如,未正确设置JAVA_HOME会导致依赖该变量的应用无法找到Java解释器;PATH中未包含$JAVA_HOME/bin会使系统无法识别java、javac等命令。此外,修改环境变量后未执行source命令(如source /etc/environment或source ~/.bashrc)使更改生效,也会导致“java命令无效”的问题。
若系统中安装了多个Java版本(如OpenJDK 8、11、17共存),可能导致命令冲突(如java命令指向错误的版本)或版本不兼容(如高版本编译的类文件无法在低版本JVM上运行)。例如,使用java -version显示的版本与项目要求的版本不符,或javac编译时提示“UnsupportedClassVersionError”。需通过update-alternatives --config java命令管理版本,选择默认使用的Java版本。
安装过程中网络中断、磁盘空间不足或软件源问题,可能导致JDK文件缺失(如rt.jar、tools.jar未解压)或损坏。此时,java -version可能无法执行,或提示“NoClassDefFoundError”等错误。解决方法是重新安装JDK:sudo apt update && sudo apt install --reinstall default-jdk。
Java应用启动时,若应用目录、JAR包或日志文件的读写权限不足,会导致“Permission denied”错误。例如,以普通用户身份运行java -jar app.jar时,若app.jar没有执行权限(chmod +x app.jar可修复),或应用需要写入日志目录但用户无权限(chown修改所有者可解决)。此外,若通过systemd启动服务,需确保ExecStart指定的用户有完整权限。
pom.xml或build.gradle中的依赖未正确下载(如仓库配置错误、网络问题),会导致编译失败(如“Could not resolve dependencies”)。需执行mvn clean install或gradle clean build清理并重新下载依赖。libx11、数据库连接需要libaio、JNI调用需要.so文件)。若缺少这些库,会提示“libxxx not found”或“UnsatisfiedLinkError”。可通过ldd命令检查依赖(如ldd libexample.so),用apt安装缺失的库(如sudo apt install libx11-dev)。.class文件,魔数为0x34)无法在低版本JVM(如JDK 11,魔数为0x33)上运行,会提示“UnsupportedClassVersionError”。需确保编译版本与运行版本一致(如用JDK 11编译,JDK 11运行)。java -jar "my app.jar"中的空格未用引号包裹,或java -jar app漏了.jar后缀,会导致“无法找到或加载主类”错误。正确写法应为java -Xmx512m -Xms256m -jar app.jar(指定堆内存大小)。config.yml、application.properties)路径不正确,会提示“Could not read config file”。需检查配置文件是否存在,或通过-D参数指定路径(如java -jar app.jar -Dconfig.path=/opt/app/config.yml)。服务型Java应用(如Spring Boot、Tomcat)需要绑定特定端口(如8080),若端口已被其他进程占用(如ss -tlnp | grep 8080显示端口被占用),会提示“Address already in use: bind”。需停止占用端口的进程(如kill -9 <PID>),或修改应用配置文件中的端口号。