如何用现有仓库foo_repo替代http_file类型的external_dependency依赖?
替换http_file生成的仓库为自定义仓库的方案
方案一:通过仓库替换+别名适配
先在你的WORKSPACE中引入
foo_repo:local_repository( name = "foo_repo", path = "/本地/foo_repo路径", )若为Git仓库则改用:
git_repository( name = "foo_repo", remote = "foo_repo的Git地址", commit = "对应提交哈希", )用
override_repository将原external_dependency仓库替换为foo_repo:override_repository( name = "external_dependency", repo = "@foo_repo", )在
foo_repo根目录的BUILD文件中添加别名,适配原@external_dependency//file的目标:alias( name = "file", actual = ":foo.h", # 替换为foo_repo中foo.h的实际目标路径 )
方案二:自定义仓库规则(无需修改foo_repo)
同样先在WORKSPACE中引入
foo_repo(步骤同方案一)。定义自定义仓库规则,生成适配目标的仓库:
def _replace_external_dependency(repository_ctx): # 自动生成BUILD文件,创建指向foo_repo的别名 repository_ctx.file("BUILD.bazel", content = """ alias( name = "file", actual = "@foo_repo//:foo.h", # 替换为foo_repo中foo.h的实际路径 ) """) replace_external_dependency = repository_rule( implementation = _replace_external_dependency, )用自定义规则替换原仓库中的
maybe(http_file...)规则:maybe( replace_external_dependency, name = "external_dependency", )
以上两种方案都能让原代码中引用的@external_dependency//file自动指向foo_repo中的foo.h,无需修改原有依赖引用代码。
内容的提问来源于stack exchange,提问作者Elliott Brossard
相关产品推荐
相关产品推荐

