Bazel新手:如何在外部依赖MapIt中生成配置文件?
解决Bazel外部依赖中生成配置文件的路径引用问题
你遇到的核心问题是加载自定义Bzl规则时的路径引用错误,导致Bazel找不到你的general_yml.bzl文件。我来帮你拆解下问题和解决逻辑:
错误原因分析
你最初使用的load("@bazel_mapit//:general_yml.bzl", "general_yml")是错误的路径写法——Bazel中,引用当前项目仓库内的文件,应该用@//作为路径前缀,而不是@仓库名//(除非你在WORKSPACE里显式给当前仓库起了别名,但默认当前仓库的引用就是@//)。
正确的配置实现
你后来更新的mapit_repo.BUILD已经修正了这个问题,我再帮你解释关键部分:
package(default_visibility = ["//visibility:public"]) filegroup( name = "mapit_files", srcs = glob( [ "**/*", ], exclude = [ "**/LICENSE", "**/*.zip", ], ), ) # 正确加载当前仓库conf目录下的general_yml.bzl规则 load("@//conf:general_yml.bzl", "general_yml") # 调用自定义规则生成conf/general.yml general_yml( name = 'generate_general_yml', bzl_mapit_db_user = 'foo', ) # 打包生成的配置文件,供其他目标引用 filegroup ( name = 'mapit_general_yml', srcs = ['conf/general.yml'], # 正确引用当前仓库的模板文件作为依赖 data = ['@//conf:general_yml.tmpl'], )
新手注意事项
- 区分当前仓库和外部依赖的路径:
- 当前仓库文件:
@//[目录/文件名] - 外部依赖文件:
@依赖名//[目录/文件名](比如你的@mapit_repo//...)
- 当前仓库文件:
- 确保自定义规则
general_yml的输出路径和filegroup的srcs完全匹配(这里是conf/general.yml),否则Bazel会提示找不到生成的文件 - 如果你的
general_yml.bzl是基于模板生成配置,要确保规则里正确处理了模板输入和输出的路径映射
内容的提问来源于stack exchange,提问作者Matthias
相关产品推荐
相关产品推荐

