版本选择建议
- 优先选择LTS版本:Java 8、Java 11、Java 17。其中,Java 8生态最广、遗留系统兼容性好;Java 11在语言与性能上较8有显著改进,仍是许多企业的主流;Java 17为较新的LTS,带来如模式匹配、密封类等语言特性,适合新项目或计划长期演进的场景。若项目或框架明确需要某版本,应以其要求为准;同时兼顾安全更新周期与社区/厂商支持。
快速决策表
| 场景 |
推荐版本 |
说明 |
| 维护老项目、依赖大量历史库 |
Java 8 |
生态最广、兼容性最好 |
| 平衡新特性与稳定性 |
Java 11 |
LTS,企业常用,改进明显 |
| 新项目、希望用新语言特性 |
Java 17 |
LTS,含模式匹配、密封类等 |
| 框架有明确版本要求 |
以框架要求为准 |
例如部分版本需Java 8+ |
| 短期特性验证或尝鲜 |
非LTS版本 |
不建议生产使用 |
说明:上表的版本取舍基于LTS优先、生态兼容与可获得的安全更新等原则。
在CentOS上落地与切换
- 安装编译器(安装-devel包才会包含javac)
- 安装Java 8:sudo yum install java-1.8.0-openjdk-devel -y
- 安装Java 11:sudo yum install java-11-openjdk-devel -y
- 安装Java 17:sudo yum install java-17-openjdk-devel -y
- 查看与切换版本
- 查看:java -version、javac -version
- 多版本切换:使用alternatives
- 注册:alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk/bin/java 100
- 交互选择:alternatives --config java
- 配置环境变量(推荐写入**/etc/profile.d/java.sh**)
- 示例:export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
- 示例:export PATH=$JAVA_HOME/bin:$PATH
- 使生效:source /etc/profile.d/java.sh
- 验证:java -version、javac -version 应一致指向目标版本。
兼容性与风险控制
- 明确项目与依赖的目标字节码版本(例如需要编译到1.8),避免高版本JDK编译后在低版本运行时出现UnsupportedClassVersionError。
- 使用Maven/Gradle时,在构建配置中显式声明source/target/release,与运行时JDK保持一致或兼容。
- 排查依赖冲突(如同一库多版本),必要时用工具做API兼容性检查,并在CI/CD中加入版本与兼容性校验环节,变更后在测试环境充分回归。