覆盖 WORKSPACE 中的依赖项
请尽可能在项目中设置一个版本政策, 是您在编译所针对并最终在最终版本 二进制文件对于其他情况,您可以影子依赖项:
myproject/WORKSPACE
workspace(name = "myproject")
local_repository(
name = "A",
path = "../A",
)
local_repository(
name = "B",
path = "../B",
)
A/Workspace
workspace(name = "A")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "testrunner",
urls = ["https://github.com/testrunner/v1.zip"],
sha256 = "...",
)
B/工作区
workspace(name = "B")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "testrunner",
urls = ["https://github.com/testrunner/v2.zip"],
sha256 = "..."
)
依赖项 A
和 B
都依赖于不同版本的 testrunner
。
请在 myproject
中同时为二者提供不同的名称,以免产生冲突
myproject/WORKSPACE
:
workspace(name = "myproject")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "testrunner-v1",
urls = ["https://github.com/testrunner/v1.zip"],
sha256 = "..."
)
http_archive(
name = "testrunner-v2",
urls = ["https://github.com/testrunner/v2.zip"],
sha256 = "..."
)
local_repository(
name = "A",
path = "../A",
repo_mapping = {"@testrunner" : "@testrunner-v1"}
)
local_repository(
name = "B",
path = "../B",
repo_mapping = {"@testrunner" : "@testrunner-v2"}
)
您也可以使用此机制来联接菱形。例如,如果 A
和 B
具有相同的依赖项,但以不同的名称进行调用,则联接这些依赖项
在 myproject/WORKSPACE
中。
从命令行替换代码库
如需从命令行使用本地代码库替换已声明的代码库,请执行以下操作:
使用
--override_repository
标志。使用此标志会更改外部代码库的内容
更改源代码
例如,如需将 @foo
替换成本地目录 /path/to/local/foo
,请使用以下代码:
传递 --override_repository=foo=/path/to/local/foo
标志。
用例包括:
- 调试问题。例如,如需将
http_archive
代码库替换为 以便您更轻松地进行更改 - 供应商开发。如果您处于无法进行网络调用的环境中, 覆盖基于网络的代码库规则以指向本地目录 。
使用代理
Bazel 从 HTTPS_PROXY
和 HTTP_PROXY
中获取代理地址
环境变量,并使用这些变量下载 HTTP
和 HTTPS
文件(如果
指定)。
支持 IPv6
在仅支持 IPv6 的机器上,Bazel 可以原封不动地下载依赖项。不过,
在双栈 IPv4/IPv6 机器上,Bazel 遵循与 Java 相同的惯例,
首选 IPv4(如果已启用)。在某些情况下,例如当 IPv4
网络无法解析/访问外部地址,这可能会导致 Network
unreachable
异常和构建失败。在这些情况下,您可以覆盖
Bazel 的首选使用 IPv6 行为
java.net.preferIPv6Addresses=true
系统
属性。
具体而言:
使用
--host_jvm_args=-Djava.net.preferIPv6Addresses=true
启动 选项,例如将.bazelrc
文件中的下面这行代码:startup --host_jvm_args=-Djava.net.preferIPv6Addresses=true
运行需要连接到互联网(例如 集成测试),请使用
--jvmopt=-Djava.net.preferIPv6Addresses=true
工具 标志。例如,在您的.bazelrc
中包含 文件:build --jvmopt=-Djava.net.preferIPv6Addresses
如果您使用的是
rules_jvm_external
添加依赖项版本 将-Djava.net.preferIPv6Addresses=true
迁移到COURSIER_OPTS
环境 变量为提供 JVM 选项, Coursier。
离线构建
有时您可能希望离线运行构建,例如在
飞机。对于这种简单的用例,使用以下代码预提取所需的代码库:
bazel fetch
或 bazel sync
。如需停用在 Cloud Monitoring 中
请使用 --nofetch
选项。
对于真正的离线版本(即由其他实体提供所有需要的文件),
Bazel 支持 --distdir
选项。此标志会告知 Bazel,首先进行以下检查:
当代码库规则要求 Bazel 执行时,该选项指定的目录
使用 ctx.download
或
ctx.download_and_extract
。修改者
提供了所需文件的哈希总和,则 Bazel 会查找与
第一个网址的基名名称,并使用本地副本(如果哈希值匹配)。
Bazel 本身使用此技术从发行版
工件。
为此,它会收集所有必要的外部
依赖项
一个内部 IP 地址
distdir_tar
。
Bazel 允许在不知道 如果它们向网络发出调用请求,则无法强制执行完全离线的构建。接收者 在离线状态下测试 build 能否正常运行,手动中断网络(如 Bazel 在引导加载程序的引导中执行的操作 测试)。