如何在Bazel的pkg_tar中添加本地文件?
解决Bazel 5.4.1中new_local_repository文件加入pkg_tar的方法
步骤1:配置new_local_repository并暴露文件
在WORKSPACE里定义new_local_repository时,要在其附带的BUILD片段中把需要打包的文件暴露出来,用exports_files或filegroup都可以:
WORKSPACE配置示例:
new_local_repository( name = "my_local_files", path = "/path/to/your/local/dir", build_file_content = """ # 单个或少量文件直接用exports_files exports_files(["config.ini", "assets/icon.png"]) # 文件多的话用filegroup批量管理 filegroup( name = "all_assets", srcs = glob(["**/*"]), visibility = ["//visibility:public"], ) """, )
步骤2:在pkg_tar中引用这些文件
在项目的BUILD文件里,直接通过仓库名引用暴露的文件,加入pkg_tar的files或srcs参数即可:
BUILD配置示例:
load("@rules_pkg//:pkg.bzl", "pkg_tar") pkg_tar( name = "app_tarball", # 单个文件引用方式 files = [ "@my_local_files//:config.ini", "@my_local_files//:assets/icon.png", ], # 批量引用filegroup的方式 # srcs = ["@my_local_files//:all_assets"], package_dir = "opt/my_app", # 指定文件在tar包内的存放路径 )
关键注意点
- 必须保证
new_local_repository里的文件规则设置了visibility = ["//visibility:public"],否则你的pkg_tar规则无法访问到这些文件。 - 用
glob(["**/*"])配合filegroup是批量引入本地目录所有文件最优雅的方式,不用逐个列举路径。
内容的提问来源于stack exchange,提问作者Lemonorn
相关产品推荐
相关产品推荐

