在 CentOS 上进行 Java 交叉编译,需要先明确一个核心概念:
Java 本身不直接“交叉编译机器码”,而是编译成与平台无关的字节码(
.class/.jar)
真正决定“跨平台”的是 JVM(Java 运行时),而不是编译器。
所以通常我们说 Java 交叉编译,一般指以下几种情况之一:
这是 Java 的常规用法,不需要特殊配置
# 在 CentOS 上
javac Main.java
java Main
生成的 .class 文件可以在:
只要目标机器有 对应架构的 JVM 即可。
✅ 无需交叉编译
如果你在 CentOS 上用 JDK 17,但目标环境是 JDK 8:
javac -source 8 -target 8 Main.java
或使用(推荐):
javac --release 8 Main.java
⚠️ 注意:
如果你指的是:
把 Java 编译成 Linux ARM / Windows exe / macOS app
那需要使用 AOT 编译器
yum install -y gcc glibc-devel zlib-devel
下载 GraalVM:
https://www.graalvm.org/
native-image Main
native-image \
--cross-compile \
--target aarch64-linux \
Main
⚠️ 需要:
aarch64-linux-gnu-gcc)如果是 Android:
javac + dx / d8如果是 嵌入式 Linux(ARM):
| 需求 | 是否需要交叉编译 | 方法 |
|---|---|---|
| Java 跨平台运行 | ❌ | 直接用 javac |
| 指定 Java 版本 | ⚠️ | --release |
| 生成本地程序 | ✅ | GraalVM |
| Android | ✅ | Android SDK |
| 嵌入式 JVM | ❌ | 编译后在设备运行 |
你可以告诉我:
我可以直接给你 可执行的 CentOS 命令示例。