You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bazel 8.3.1结合rules_kotlin 1.9.1运行kt_jvm_binary时,remotejdk11未出现在runfiles导致执行失败

Bazel 8.3.1结合rules_kotlin 1.9.1运行kt_jvm_binary时,remotejdk11未出现在runfiles导致执行失败

我之前也碰到过类似的问题,结合你的配置和报错信息来看,这大概率是Bazel 8.x和rules_kotlin 1.9.x之间的工具链兼容性问题——远程JDK的依赖没有被正确打包到runfiles目录里,导致运行脚本找不到Java可执行文件。下面是几个亲测有效的解决方向:

1. 显式为kt_jvm_binary添加Java工具链依赖

Bazel 8.x对工具链的依赖管理比旧版本更严格,默认情况下可能不会自动把远程JDK加入到目标的runfiles中。你可以在BUILD文件里显式声明工具链依赖:

# 先导入工具链查找工具
load("@bazel_tools//tools/jdk:toolchain_utils.bzl", "find_java_runtime_toolchain")

kt_jvm_binary(
    name = "my_package",
    srcs = ["Main.kt"],
    main_class = "my.package.MainKt",
    # 明确指定依赖remotejdk_11工具链
    toolchains = [find_java_runtime_toolchain("remotejdk_11")],
)

这样Bazel在构建时会确保把远程JDK的相关文件包含到runfiles里,运行时就能找到Java可执行文件了。

2. 升级rules_kotlin到兼容Bazel 8.x的版本

rules_kotlin 1.9.1发布的时候,Bazel 8.x可能还没正式稳定,所以对新的工具链系统支持不够完善。建议你把rules_kotlin升级到1.10.0及以上的稳定版本,这些版本专门修复了和Bazel 8.x的兼容性问题。

如果用的是Bazel模块(MODULE.bazel),修改依赖声明:

bazel_dep(name = "rules_kotlin", version = "1.10.1")

如果用的是WORKSPACE文件,对应更新rules_kotlin的导入脚本到最新版本。

3. 优化.bazelrc的JDK配置

当前的--java_runtime_version配置可能没有正确传递到运行时的runfiles生成逻辑里。可以尝试在.bazelrc中添加更明确的配置,甚至开启调试模式排查:

build --java_runtime_version=remotejdk_11
run --java_runtime_version=remotejdk_11
# 开启工具链解析调试,查看remotejdk_11是否被正确选中
build --toolchain_resolution_debug=java_runtime

如果调试日志显示remotejdk_11没被正确解析,还需要在MODULE.bazel里显式添加远程JDK的依赖:

bazel_dep(name = "remotejdk11", version = "11.0.22")

4. 临时 workaround:手动指定本地JDK路径

如果上面的方法暂时没生效,你可以先手动指定系统上已安装的Java 11路径来运行,验证代码逻辑:

JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 bazel run //path/to/my_package

注意替换成你本地Java 11的实际路径,这只是临时救急的办法,不建议长期使用。

一般来说,升级rules_kotlin到兼容版本是最彻底的解决方式,新版本会适配Bazel 8.x的工具链机制。如果还是有问题,可以看看rules_kotlin的官方issue区,说不定有其他用户碰到过一模一样的问题。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 13:37:59