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

Bazel自定义仓库规则如何实现相对工作区的路径解析

解决方法

要让自定义仓库规则的路径参数和内置local_repository一样相对于工作区解析,只需在规则实现中先拿到工作区根路径,再拼接传入的相对路径即可。

核心实现代码

def _my_repository_impl(ctx):
    # 获取当前工作区根目录的绝对路径
    # 若使用旧版Bazel无WORKSPACE.bazel文件,可替换为 Label("@//:WORKSPACE")
    workspace_root = ctx.path(Label("@//:WORKSPACE.bazel")).dirname
    
    # 拼接得到解析后的绝对路径
    target_path = ctx.path(f"{workspace_root}/{ctx.attr.path}")

    # 后续使用target_path执行你需要的操作,比如拷贝文件、读取配置等
    # 示例:打印解析完成的路径验证结果
    print(f"Resolved path: {target_path}")

my_repository = repository_rule(
    implementation = _my_repository_impl,
    attrs = {
        "path": attr.string(mandatory = True, doc = "相对于工作区根目录的路径"),
    },
)

行为说明

  • 若传入的path本身是绝对路径,拼接后依然会正确识别为绝对路径,和内置规则行为完全一致
  • 若使用Bzlmod管理依赖,将Label("@//:WORKSPACE.bazel")替换为Label("@@//:MODULE.bazel")即可拿到根工作区路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:12:04