在 CentOS(Linux) 和 Windows 上编译 Java 程序,核心区别主要体现在 环境配置、路径、工具链、权限和部署习惯 上,而不是 Java 源码本身(Java 是跨平台的)。下面从常见角度系统对比一下。
✅ Java 源码层面:几乎没有区别
✅ 编译产物(.class / .jar):完全一样
❗ 区别主要在:环境、命令、路径、权限、工具链
| 项目 | CentOS | Windows |
|---|---|---|
| 安装方式 | yum / dnf / 手动解压 | exe / msi / 解压 |
| 常用命令 | yum install java-17-openjdk-devel |
图形界面安装 |
| 环境变量 | /etc/profile / ~/.bashrc |
系统环境变量 |
yum install java-17-openjdk-devel
java -version
JAVA_HOMEPATH 加入 %JAVA_HOME%\binexport JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH
JAVA_HOME=C:\Java\jdk-17
PATH=%JAVA_HOME%\bin
✅ 区别:Linux 用 shell,Windows 用 GUI / set
javac Hello.java
java Hello
✅ 命令完全一致
| 项目 | CentOS | Windows |
|---|---|---|
| 路径分隔符 | / |
\ |
| classpath 分隔符 | : |
; |
javac -cp lib/a.jar:lib/b.jar Main.java
javac -cp lib/a.jar;lib/b.jar Main.java
⚠️ 这是最常见坑
| 项目 | CentOS | Windows |
|---|---|---|
| 执行脚本 | 需要 chmod +x |
不需 |
| shell 脚本 | 常见 | 少见 |
chmod +x run.sh
./run.sh
Windows 一般直接:
run.bat
| 项目 | CentOS | Windows |
|---|---|---|
| 文件名大小写 | 敏感 | 不敏感 |
import util.Tool; // Util.java 在 Linux 可能找不到
⚠️ Linux 下大小写错误直接编译失败
✅ 命令几乎一样
mvn clean package
gradle build
但:
| 项目 | CentOS | Windows |
|---|---|---|
| 脚本 | mvn |
mvn.cmd |
| 权限 | 可能需要 sudo | 一般不用 |
| 项目 | CentOS | Windows |
|---|---|---|
| 动态库 | .so |
.dll |
| JNI | 编译麻烦 | 编译麻烦 |
✅ Java 本身跨平台,但 JNI 不跨平台
| 项目 | CentOS | Windows |
|---|---|---|
| 常见部署 | jar / service / docker | jar / exe |
| 后台运行 | nohup、systemd |
服务 / bat |
| 日志 | /var/log |
自定义目录 |
:;/\\n\r\n| 场景 | 是否有区别 |
|---|---|
| 纯 Java 源码 | ❌ 无 |
| 编译 jar | ❌ 无 |
| 使用 JNI | ✅ 有 |
| 文件路径 | ✅ 有 |
| 脚本运行 | ✅ 有 |
Java 编译本身在 CentOS 和 Windows 上没有本质区别,区别主要在操作系统环境、路径、权限和部署方式上。
如果你愿意,我可以:
你现在是 学习 / 编译 / 部署 / CI 场景?