在 CentOS 上编译 Java 时遇到版本冲突(比如系统自带 OpenJDK、自己装的 JDK、maven/gradle 用的版本不一致),一般可以按下面思路解决。
which java
which javac
java -version
javac -version
再看系统里装了哪些 JDK:
rpm -qa | grep -i jdk
ls /usr/lib/jvm/
常见情况:
java-1.8.0-openjdkjdk-11 或 jdk-17JAVA_HOME 指错了CentOS 一般用 alternatives 管理多版本:
sudo alternatives --config java
sudo alternatives --config javac
按提示选你要的版本。
设置 JAVA_HOME(很重要):
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
建议写进:
~/.bashrc
或
/etc/profile.d/java.sh
mvn -version
如果 Maven 用的 Java 不对:
export JAVA_HOME=/your/jdk/path
mvn clean package
或在 pom.xml 里指定:
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
gradle -version
指定 JVM:
export JAVA_HOME=/your/jdk/path
或在 gradle.properties:
org.gradle.java.home=/your/jdk/path
✅ javac 和 java 版本不一致
java -version ≠ javac -versionalternatives 统一✅ JAVA_HOME 没设或设错
echo $JAVA_HOME✅ yum 装的 openjdk 不完整
devel 包:sudo yum install java-11-openjdk-devel
✅ 旧项目用 JDK8,新项目用 JDK17
JAVA_HOME# 编译前
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
java -version
javac -version
# 再编译
mvn clean package
如果你愿意,可以贴一下:
java -versionjavac -version我可以直接帮你定位是哪一种冲突。