CentOS Java编译与运行版本不兼容排查与修复
一、快速判断与定位
java -version、javac -version。若不一致,优先统一版本。对于构建工具,需在配置中显式设置编译级别与目标级别。which java、which javac 与 readlink -f $(which java) 追踪实际可执行文件路径。二、常见根因与对应修复
maven-compiler-plugin 配置 source/target)。java/javac,并正确设置 JAVA_HOME 指向目标 JDK(如 /usr/lib/jvm/java-11-openjdk)。source/target 与 toolchain,确保与运行环境一致。setenv.sh 中的 JAVA_HOME,确保与编译版本一致。三、在 CentOS 上的标准修复步骤
sudo yum install java-1.8.0-openjdk-develsudo yum install java-11-openjdk-develsudo alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk/bin/java 2sudo alternatives --config java(按编号选择)/etc/profile.d/java.sh)echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk' | sudo tee /etc/profile.d/java.shecho 'export PATH=$JAVA_HOME/bin:$PATH' | sudo tee -a /etc/profile.d/java.shsource /etc/profile.d/java.shjava -version、javac -version、echo $JAVA_HOME 输出应一致且指向目标 JDK。<properties> 或编译器插件中):
<maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target>build.gradle 的 java 插件中):
java { sourceCompatibility = JavaVersion.VERSION_11; targetCompatibility = JavaVersion.VERSION_11 }bin/setenv.sh、catalina.sh 或 systemd 服务中的 JAVA_HOME 与启动用户环境,确保与编译版本一致。四、常见场景与命令清单
source/target=1.8)。java -version 与 javac -version 不一致,或 which java 指向 /usr/bin/java -> /etc/alternatives/java -> ... 的旧路径。alternatives --config java 切换默认,或在 /etc/profile.d/java.sh 中正确设置 JAVA_HOME 与 PATH 并 source 生效。