如何为分别适配Java 8与Java 11的JEE应用指定对应运行版本
多JDK版本下指定应用启动Java版本的解决方案
完全不需要修改系统Path环境变量,可参考以下几种常用方案:
方案1:直接调用对应版本JDK的绝对路径执行启动命令
提前记录本地两个JDK版本安装路径下的java可执行文件地址,启动时直接用完整路径执行即可:
- Windows环境示例路径:
- Java 8:
C:\Program Files\Java\jdk1.8.0_xxx\bin\java.exe - Java 11:
C:\Program Files\Java\jdk-11.0.xxx\bin\java.exe
- Java 8:
- Linux/macOS环境示例路径:
- Java 8:
/usr/lib/jvm/java-8-openjdk-amd64/bin/java - Java 11:
/usr/lib/jvm/java-11-openjdk-amd64/bin/java
- Java 8:
启动应用时直接替换命令里的java为对应版本的完整路径即可:
# 启动适配Java 8的应用(Windows示例) "C:\Program Files\Java\jdk1.8.0_301\bin\java.exe" -jar app-for-java8.war # 启动适配Java 11的应用(Linux示例) /usr/lib/jvm/java-11-openjdk-amd64/bin/java -jar app-for-java11.war
注意:路径中包含空格的话需要用双引号把完整路径包裹起来,避免系统识别错误。
方案2:为每个应用编写专属启动脚本
把对应版本的JDK路径配置写进启动脚本,后续直接运行脚本即可自动匹配对应Java版本,不需要每次手动输入路径:
- Windows环境编写
.bat启动脚本,适配Java 8的应用脚本示例:
@echo off set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_301 set PATH=%JAVA_HOME%\bin;%PATH% java -jar app-for-java8.war
- Linux/macOS环境编写
.sh启动脚本,适配Java 11的应用脚本示例:
#!/bin/bash export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH java -jar app-for-java11.war
脚本编写完成后,Linux/macOS环境需要给脚本添加执行权限chmod +x 启动脚本名.sh,后续直接运行脚本即可启动应用。
方案3:使用JDK版本管理工具
本地安装JDK版本管理工具,可快速切换全局或单应用的JDK版本,不需要手动记录安装路径:
- Windows环境可使用 Chocolatey 安装管理多版本JDK
- Linux/macOS环境可使用 jabba 或 jenv 管理JDK版本,指定版本启动示例:
jenv exec 1.8 java -jar app-for-java8.war
补充说明
你遇到的java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException异常是Java 11移除了EE模块导致的,除了指定JDK 8启动外,也可以在Java 11启动时添加JAXB相关依赖包解决,但直接指定对应JDK版本启动是兼容性最好、成本最低的方案。
内容的提问来源于stack exchange,提问作者thomas
相关产品推荐
相关产品推荐

