#9542·dbx

[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.rsresolve_system_java_path() 只扫描 dbx 进程的 PATH从不读 JAVA_HOME

rust
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 运行时