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

Bazel无法找到@local_jdk仓库的问题解决求助

Bazel找不到@local_jdk的解决办法

问题情况

跟着在线教程把Java JNI头文件加到cc_library里时,一直报这个错:

no such package '@@[unknown repo 'local_jdk' requested from @@]//': The repository '@@[unknown repo 'local_jdk' requested from @@]' could not be resolved: No repository visible as '@local_jdk' from main repository

我的BUILD文件代码是这样的:

cc_library(
    name = "cpp_library",
    hdrs = [
        "@local_jdk//:jni_header",
        ":generate_cplus_headers"],
    srcs = _CPP_srcs,
    includes = ["headers"],
    toolchains = ["@bazel_tools//tools/jdk:jdk", "@bazel_tools//tools/jdk:current_java_runtime"]
)

使用环境:

  • Bazel 8
  • MacOS(Intel)
  • Java 21

解决步骤

1. 手动配置JDK仓库

Bazel 8不会自动配置@local_jdk仓库,得在WORKSPACE文件里手动添加配置,有两种方法可选:

方法一:用Bazel自带的JDK规则

直接在WORKSPACE里添加这段代码:

load("@bazel_tools//tools/jdk:default_java_toolchain.bzl", "default_java_toolchain")
default_java_toolchain(name = "local_jdk")

# 注册工具链
register_toolchains("@bazel_tools//tools/jdk:toolchain")

方法二:自定义JDK路径(适合指定特定Java版本)

如果你的Java 21安装路径不是默认位置,先在WORKSPACE里引入管理JVM依赖的rules_jvm_external:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "rules_jvm_external",
    sha256 = "d5a0845c516e34b47154580bda2457420f6f79f74f4a5c558047b30543498c81",
    strip_prefix = "rules_jvm_external-5.3.0",
    url = "https://github.com/bazelbuild/rules_jvm_external/archive/refs/tags/v5.3.0.zip",
)

load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps")
rules_jvm_external_deps()

load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")
rules_jvm_external_setup()

然后注册你的本地Java 21路径,把下面的path换成你实际的安装路径(比如/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home):

register_local_jdk(
    name = "local_jdk",
    path = "你的Java 21安装路径",
)

2. 直接替换BUILD里的依赖引用

嫌配置麻烦的话,直接把BUILD里的@local_jdk//:jni_header换成@bazel_tools//tools/jdk:jni_header,用Bazel自带的JNI头文件依赖,不用额外配置local_jdk仓库,修改后的BUILD文件:

cc_library(
    name = "cpp_library",
    hdrs = [
        "@bazel_tools//tools/jdk:jni_header",
        ":generate_cplus_headers"],
    srcs = _CPP_srcs,
    includes = ["headers"],
    toolchains = ["@bazel_tools//tools/jdk:toolchain"]
)

3. 检查配置是否生效

运行下面的命令,要是能返回JDK相关的目标,说明配置成功了:

bazel query @local_jdk//...

内容的提问来源于stack exchange,提问作者rkesters

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:35:10