WORKSPACE での依存関係のシャドーイング
可能な限り、プロジェクトにはバージョン ポリシーを 1 つだけ設定してください。 必要であり、最終的に バイナリです。それ以外の場合は、依存関係をシャドーイングできます。
自分のプロジェクト/WORKSPACE
workspace(name = "myproject")
local_repository(
name = "A",
path = "../A",
)
local_repository(
name = "B",
path = "../B",
)
A/ワークスペース
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
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
例外やビルドエラーが発生する可能性があります。そのような場合は
java.net.preferIPv6Addresses=true
システム
プロパティをご覧ください。
詳細は以下のとおりです。
--host_jvm_args=-Djava.net.preferIPv6Addresses=true
起動を使用する オプションを追加します。たとえば、.bazelrc
ファイルに次の行を追加します。startup --host_jvm_args=-Djava.net.preferIPv6Addresses=true
インターネットに接続する必要がある Java ビルド ターゲット( 使用する場合は、
--jvmopt=-Djava.net.preferIPv6Addresses=true
ツール フラグを使用します。たとえば、.bazelrc
ファイル:build --jvmopt=-Djava.net.preferIPv6Addresses
rules_jvm_external
を使用している場合 使用します。また、環境変数に-Djava.net.preferIPv6Addresses=true
からCOURSIER_OPTS
環境へ 変数を使用して、VM の JVM オプションを指定 Coursier。
オフライン ビルド
モバイル デバイスを使用して移動する場合など、ビルドをオフラインで実行したい場合もあります。
あります。このようなシンプルなユースケースでは、必要なリポジトリを
bazel fetch
または bazel sync
。追加のリポジトリの取得を無効にするには、
--nofetch
オプションを使用します。
真のオフライン ビルドで、別のエンティティが必要なすべてのファイルを提供する場合、
Bazel は --distdir
オプションをサポートしています。このフラグは、Bazel に最初に調査するように指示します。
リポジトリ ルールが Bazel に指示した場合に、このオプションで指定したディレクトリです。
ctx.download
または
ctx.download_and_extract
。方法
必要なファイルのハッシュ合計を提供すると、Bazel は
最初の URL のベース名を返し、ハッシュが一致する場合はローカルコピーを使用します。
Bazel 自体もこの手法を使用して、ディストリビューションからオフラインでブートストラップします。
アーティファクトです。
そのために、必要な外部リソースをすべて収集し、
依存関係
内部で
distdir_tar
。
Bazel では、リポジトリ ルール内の任意のコマンドを、知らないうちに実行できる ネットワークに対して呼び出しを行うと、完全にオフラインのビルドを適用できません。宛先 ビルドがオフラインで正しく機能するかどうかをテストし、ネットワーク Bazel はブートストラップで実行します。 テスト)。