在 Debian 上如果系统里装了多个 Java 版本(比如 OpenJDK 8 / 11 / 17),编译时关键点是:指定用哪一个 javac,常见有 3 种方式。
ls /usr/lib/jvm/
通常类似:
java-8-openjdk-amd64
java-11-openjdk-amd64
java-17-openjdk-amd64
查看当前默认:
java -version
javac -version
sudo update-alternatives --config java
sudo update-alternatives --config javac
选择对应编号即可。
javac Main.java
✅ 适合:整个终端会话都用同一个 Java 版本
不需要切换系统默认:
/usr/lib/jvm/java-11-openjdk-amd64/bin/javac Main.java
运行:
/usr/lib/jvm/java-11-openjdk-amd64/bin/java Main
✅ 适合:不同项目用不同 JDK
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
javac -version
javac Main.java
可写进:
~/.bashrcbuild.shJAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 mvn package
或在 pom.xml:
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 ./gradlew build
❌ 用 java 17 编译,却用 java 8 运行
✅ 编译和运行 JDK 大版本尽量一致
❌ Debian 默认 javac 和实际 java 不一致
✅ 用 update-alternatives --config 检查
如果你愿意,可以告诉我:
我可以给你精准命令。