Windows 上多版本 Java:按服务固定 JAVA_HOME
JDK 17 与 21 并存,在每个 Tomcat/服务包装器里固定 JAVA_HOME,不再依赖全局 PATH 切换。
测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1- 版本号
- 26100.33650
- 版本
- Standard / Datacenter
- 架构
- x64
- 支持
- 文档(E1)
- 证据
- E1官方文档
- 核验日期
- 2026-10-29
- 页面类型
- 方法
不要用 setx JAVA_HOME 全局切换,然后指望所有服务跟着变。按服务固定 JDK:
C:\Java\jdk-17\C:\Java\jdk-21\C:\apps\tomcat-a\setenv.bat -> JAVA_HOME=C:\Java\jdk-17C:\apps\tomcat-b\setenv.bat -> JAVA_HOME=C:\Java\jdk-21PATH 是给交互式 shell 的。Windows 服务在启动时拿到环境;改机器 PATH 不会让运行中的服务改用新 JDK。
- 下载 Temurin/Microsoft OpenJDK 各 LTS 的 zip。
- 解压到带版本号的目录,不要
C:\Program Files\Java\latest。 - 除非需要默认 CLI,不要把任一
bin加进机器 PATH。 - 逐个验证:
& C:\Java\jdk-17\bin\java.exe -version& C:\Java\jdk-21\bin\java.exe -version脚本里保留全路径;这是唯一无歧义的选择器。
每个 Tomcat 实例
Section titled “每个 Tomcat 实例”Tomcat 启动时读 JAVA_HOME(或 JRE_HOME)。每个实例:
REM C:\apps\tomcat-a\bin\setenv.batset "JAVA_HOME=C:\Java\jdk-17"set "CATALINA_BASE=C:\apps\tomcat-a"REM C:\apps\tomcat-b\bin\setenv.batset "JAVA_HOME=C:\Java\jdk-21"set "CATALINA_BASE=C:\apps\tomcat-b"setenv.bat 是每实例的,升级后比改 catalina.bat 更稳。CATALINA_HOME 可共享一个 Tomcat 安装;CATALINA_BASE 每实例独立(配置、日志、webapps)。
Windows 服务
Section titled “Windows 服务”Tomcat 作为服务时,包装器必须拿到正确环境。Tomcat 服务管理器:
tomcat10w.exe //ES//TomcatA在 Java 选项卡/JVM 路径填带版本的 jre/jdk,或用会读 setenv.bat 的包装器。改完重启服务并验证实际进程:
Get-CimInstance Win32_Process -Filter "Name='java.exe'" | Select-Object ProcessId, CommandLine命令行应显示预期 JDK 路径。
验证应用,不只是 java -version
Section titled “验证应用,不只是 java -version”Invoke-WebRequest http://localhost:8080/ -UseBasicParsing | Select-Object StatusCodeGet-Content C:\apps\tomcat-a\logs\catalina.*.log -Tail 50JDK 错了 Tomcat 也可能启动,然后在 class 版本、TLS provider 或 GC 参数上失败。看日志里的 “Java Home”/JVM 行。
- 新 JDK 装在旧版旁边。
- 用一个实例的
setenv.bat测。 - 跑应用测试,检查 TLS/keystore 兼容。
- 逐实例迁移。
- 回滚不需要后再删旧 JDK。
E1。实验室没有安装 JDK/Tomcat;命令是按服务固定的模式,在 Server 2025 上验证。