在 Debian 上编译 Java 时,常见的“兼容性问题”主要集中在 JDK 版本、Java 版本不一致、工具链配置、以及库依赖 等方面。下面按实际场景给你一个排查与解决方案清单。
Debian 不同版本默认 JDK 不同:
| Debian 版本 | 默认 JDK |
|---|---|
| Debian 10 (Buster) | OpenJDK 11 |
| Debian 11 (Bullseye) | OpenJDK 11 / 17 |
| Debian 12 (Bookworm) | OpenJDK 17 |
如果你的代码:
✅ 解决方案
# 查看当前 JDK
java -version
javac -version
# 安装指定版本
sudo apt install openjdk-17-jdk
设置默认版本:
sudo update-alternatives --config java
sudo update-alternatives --config javac
现象:
error: invalid source release 11
✅ 原因
✅ 解决方案 显式指定版本:
javac -source 1.8 -target 1.8 Hello.java
⚠️ 不推荐直接用 -target,更好的是:
javac --release 8 Hello.java
Unsupported class file major version
✅ 检查 Maven 使用的 JDK
mvn -v
✅ 在 pom.xml 中指定 Java 版本
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
或更规范:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
✅ 推荐做法
JAVA_HOME 明确指定export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
写入:
~/.bashrc
例如:
java.lang.UnsupportedClassVersionError
✅ 原因
✅ 解决
--release如果是 JNI / C++ 混合编译:
sudo apt install build-essential
sudo apt install openjdk-17-jdk
JNI 头文件路径:
$JAVA_HOME/include
$JAVA_HOME/include/linux
lsb_release -a
java -version
javac -version
mvn -v
gradle -v
| 场景 | 推荐 |
|---|---|
| 老项目 | Debian + OpenJDK 8 |
| 企业项目 | Debian + OpenJDK 11 |
| 新项目 | Debian 12 + OpenJDK 17 |
你可以直接贴出:
java -versionpom.xml我可以 精准定位是哪一类兼容性问题,并给你最小修改方案。