[Bug] 「系统 java」不识别 JAVA_HOME,环境变量已配置仍报找不到 Java
Author: zipgCreated Sep 18, 2026Updated Sep 18, 2026
Labelsai-priority/P2
现象
用户在「驱动管理 → 内置驱动 → Java 运行时」选择「系统 java」后仍报找不到 Java,最后只能改用「自定义路径」手动指定 java 可执行文件才装上达梦(Dameng)驱动。
用户原话:「自己配 java 运行时就行了。这里应该要能够自动识别我的环境变量才好,我环境变量都配了的。」
根因
crates/dbx-drivers/src/agent_manager.rs 的 resolve_system_java_path() 只扫描 dbx 进程的 PATH,从不读 JAVA_HOME:
fn resolve_system_java_path(path_var: Option<&OsStr>) -> Option<PathBuf> {
let path_var = path_var.map(|p| p.to_owned()).or_else(|| std::env::var_os("PATH"))?;
std::env::split_paths(&path_var)
.map(|dir| dir.join(java_executable_name()))
.find(|candidate| is_executable_file(candidate))
}所以「配了 JAVA_HOME 但没有把 java 加进 PATH」或「PATH 里没有 JAVA_HOME\bin」的环境必定失败。而 JDBC 插件启动脚本 plugins/jdbc/bin/dbx-jdbc-plugin.bat 本来就是 DBX_JAVA_BIN → %JAVA_HOME%\bin\java.exe → where java 的顺序 —— 主程序与插件对「系统 java」的定义不一致。
另外报错只有一句 System Java runtime was not found on PATH. Please install Java or choose a custom Java executable.,没有说明探测过哪些位置,用户无法判断是环境变量没生效、还是路径写错了。
期望行为
- 「系统 java」优先识别
JAVA_HOME(兼容 JDK 根目录 /bin目录 / 直接指向 java 可执行文件三种写法),再回退到PATH; JAVA_HOME失效(路径已删除、目录里没有 java)时不致命,静默回退PATH,避免重新引入 #5517 的「坏 JAVA_HOME 劫持」问题;- 报错说明实际探测过的值(
JAVA_HOME的实际取值 + 检查过的PATH条目数),并提示 dbx 使用的是启动时继承的环境变量、改完环境变量需要重启 dbx。
环境
- 平台:Windows
- 场景:驱动管理安装达梦(Dameng)驱动,需要 Java 运行时
Source: t8y2/dbx