最可靠的方式是调用Runtime.version(),它100%反映Web应用真实运行环境,不受PATH、IDE或JAVA_HOME干扰;配合System.getProperty("java.version")可获取字符串格式版本,二者均在JVM启动时锁定,适用于Tomcat、Jetty、Spring Boot等所有容器场景。

直接在 Java Web 项目运行时获取服务器实际使用的 JDK 版本,最可靠的方式是通过代码调用 JVM 内置 API,而不是依赖命令行或配置文件——因为 Web 容器(如 Tomcat、Jetty)可能使用独立的 JDK 启动,与开发机系统 PATH 或 IDEA 配置完全无关。
在 Servlet 或启动类中打印 Runtime.version()
这是唯一能 100% 反映 Web 应用真实运行环境的方法。把以下代码放在 Servlet 的 init()、doGet() 或 Spring Boot 的 @PostConstruct 方法里:
System.out.println("Java version: " + System.getProperty("java.version"));System.out.println("Runtime version: " + Runtime.version());- 输出示例:
17.0.2+8-86(JDK 17)、21.0.1+12-29(JDK 21)
注意:该值由 JVM 启动时锁定,不受 JAVA_HOME 或 IDE 设置干扰,适用于 Tomcat、WildFly、Spring Boot 内嵌容器等所有场景。
查看 Tomcat 启动日志中的 JVM 信息
Tomcat 在启动时会打印完整的 JVM 参数和版本,这是快速验证的辅助手段:
立即学习“Java免费学习笔记(深入)”;
- 打开
logs/catalina.out(Linux/macOS)或logs/catalina.<date>.log</date>(Windows) - 搜索关键词
JVM Vendor、JVM Version或Server version - 典型日志行:
Server version name: Apache Tomcat/10.1.31+JVM Version: 17.0.2+8-86
如果日志里显示的是 1.8.0_391,说明 Tomcat 正在用 JDK 8 运行;若显示 21.0.1,则确认已升级到 JDK 21。
检查 Tomcat 的 startup.sh 或 startup.bat 中指定的 JAVA_HOME
Tomcat 启动脚本决定了它用哪个 JDK,这个配置优先级高于系统全局变量:
- Linux/macOS:打开
bin/startup.sh,查找JAVA_HOME=行(可能被注释,需取消注释并设为实际路径,如/opt/jdk-21.0.1) - Windows:打开
bin/startup.bat,查找类似set JAVA_HOME=C:\Program Files\Java\jdk-17.0.2 - 未显式设置时,Tomcat 会 fallback 到系统
PATH中第一个java命令,此时需用where java(Win)或which java(Linux/macOS)确认路径
验证 class 文件版本兼容性(防 UnsupportedClassVersionError)
当 Web 应用部署失败并报错 java.lang.UnsupportedClassVersionError,说明编译和运行 JDK 不匹配。可反向确认:
- 进入
WEB-INF/classes/找一个 .class 文件(如MyServlet.class) - 执行:
javap -verbose MyServlet.class | grep "major version" - 对照关系:
major version 61 → JDK 17,65 → JDK 21,52 → JDK 8 - 再用
Runtime.version()查出运行时版本,二者必须 ≥ 编译版本
不复杂但容易忽略


















