ワークスペース ルールは、外部依存関係(通常はメイン リポジトリの外部にあるソースコード)を pull するために使用されます。
注: Bazel には、ネイティブ ワークスペース ルールのほかに、さまざまな Starlark ワークスペース ルールも埋め込まれています。特に、ウェブでホストされている git リポジトリやアーカイブを処理するルールが埋め込まれています。
ルール
バインド
ルールソースを表示bind(name, actual, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
警告: bind()
の使用はおすすめしません。問題と代替方法について詳しくは、bind の削除を検討するをご覧ください。特に、repo_mapping
リポジトリ属性の使用を検討してください。
警告: select()
は bind()
で使用できません。詳しくは、構成可能な属性に関するよくある質問をご覧ください。
//external
パッケージでターゲットにエイリアスを付与します。
//external
パッケージは「通常の」パッケージではありません。external/ ディレクトリがないため、バインドされたすべてのターゲットを含む「仮想パッケージ」と見なすことができます。
例
ターゲットにエイリアスを設定するには、WORKSPACE ファイルで bind
します。たとえば、//third_party/javacc-v2
という java_library
ターゲットがあるとします。これは、WORKSPACE ファイルに次のように追加することでエイリアスを設定できます。
bind( name = "javacc-latest", actual = "//third_party/javacc-v2", )
ターゲットが //third_party/javacc-v2
ではなく //external:javacc-latest
に依存できるようになりました。javacc-v3 がリリースされると、bind
ルールを更新でき、//external:javacc-latest
に依存するすべての BUILD ファイルは、編集することなく javacc-v3 に依存するようになります。
バインディングを使用すると、外部リポジトリのターゲットをワークスペースで使用することもできます。たとえば、WORKSPACE ファイルにインポートされた @my-ssl
という名前のリモート リポジトリがあり、cc_library ターゲット //src:openssl-lib
がある場合、bind
を使用してこのターゲットのエイリアスを作成できます。
bind( name = "openssl", actual = "@my-ssl//src:openssl-lib", )
次に、ワークスペースの BUILD ファイルで、バインドされたターゲットを次のように使用できます。
cc_library( name = "sign-in", srcs = ["sign_in.cc"], hdrs = ["sign_in.h"], deps = ["//external:openssl"], )
sign_in.cc
と sign_in.h
内で、//external:openssl
によって公開されるヘッダー ファイルは、リポジトリのルートからの相対パスを使用して参照できます。たとえば、@my-ssl//src:openssl-lib
のルール定義が次のようなものであるとします。
cc_library( name = "openssl-lib", srcs = ["openssl.cc"], hdrs = ["openssl.h"], )
sign_in.cc
のインクルードは次のようになります。
#include "sign_in.h" #include "src/openssl.h"
引数
属性 | |
---|---|
name |
名前: 必須 このターゲットの名前。 |
actual
|
ラベル(デフォルトは このターゲットは存在する必要がありますが、任意のタイプのルール(bind を含む)にできます。 この属性が省略されている場合、 |
local_repository
ルールソースを表示local_repository(name, path, repo_mapping)
ローカル ディレクトリのターゲットをバインドできます。つまり、現在のリポジトリは、この他のディレクトリで定義されたターゲットを使用できます。詳細については、バインディング セクションをご覧ください。
例
現在のリポジトリが、~/chat-app ディレクトリをルートとするチャット クライアントであるとします。このリポジトリでは、別のリポジトリ(~/ssl)で定義されている SSL ライブラリを使用したいとします。SSL ライブラリにターゲット //src:openssl-lib
があります。
ユーザーは、~/chat-app/WORKSPACE に次の行を追加することで、このターゲットへの依存関係を追加できます。
local_repository( name = "my-ssl", path = "/home/user/ssl", )
ターゲットは、このライブラリに依存する依存関係として @my-ssl//src:openssl-lib
を指定します。
引数
属性 | |
---|---|
name |
名前: 必須 このターゲットの名前。 |
path
|
文字列(必須) ローカル リポジトリのディレクトリのパス。これは、リポジトリの WORKSPACE ファイルを含むディレクトリへのパスにする必要があります。パスは、メイン リポジトリの WORKSPACE ファイルに対する絶対パスまたは相対パスにすることができます。 |
repo_mapping
|
辞書: 文字列 -> 文字列。デフォルトは たとえば、エントリ |
new_local_repository
ルールソースを表示new_local_repository(name, build_file, build_file_content, path, repo_mapping, workspace_file, workspace_file_content)
ローカル ディレクトリを Bazel リポジトリに変換できます。つまり、現在のリポジトリは、ファイル システムのどこからでもターゲットを定義して使用できます。
このルールは、指定された BUILD ファイルとパスへのシンボリック リンクを含む WORKSPACE ファイルとサブディレクトリを作成して、Bazel リポジトリを作成します。ビルドファイルは、path
を基準にしてターゲットを作成する必要があります。WORKSPACE ファイルと BUILD ファイルがすでに含まれているディレクトリの場合は、local_repository
ルールを使用できます。
例
現在のリポジトリが、~/chat-app ディレクトリをルートとするチャット クライアントであるとします。このリポジトリでは、別のディレクトリ(~/ssl)で定義されている SSL ライブラリを使用したいとします。
ユーザーは、SSL ライブラリの BUILD ファイル(~/chat-app/BUILD.my-ssl)を作成し、次の内容を追加することで依存関係を追加できます。
java_library( name = "openssl", srcs = glob(['*.java']) visibility = ["//visibility:public"], )
次に、~/chat-app/WORKSPACE に次の行を追加します。
new_local_repository( name = "my-ssl", path = "/home/user/ssl", build_file = "BUILD.my-ssl", )
これにより、/home/user/ssl にシンボリック リンクする @my-ssl
リポジトリが作成されます。ターゲットは、ターゲットの依存関係に @my-ssl//:openssl
を追加することで、このライブラリに依存できます。
new_local_repository
を使用して、ディレクトリだけでなく単一のファイルを含めることもできます。たとえば、/home/username/Downloads/piano.jar に jar ファイルがあるとします。WORKSPACE ファイルに次のように追加すると、そのファイルのみをビルドに追加できます。
new_local_repository( name = "piano", path = "/home/username/Downloads/piano.jar", build_file = "BUILD.piano", )
次の BUILD.piano ファイルを作成します。
java_import( name = "play-music", jars = ["piano.jar"], visibility = ["//visibility:public"], )ターゲットは
@piano//:play-music
に依存して piano.jar を使用できます。
引数
属性 | |
---|---|
name |
名前: 必須 このターゲットの名前。 |
build_file
|
名前。デフォルトは build_file または build_file_content のいずれかを指定する必要があります。 この属性は、メイン ワークスペースを基準とするラベルです。ファイルの名前は BUILD にする必要はありませんが、そうすることもできます。(リポジトリの実際の BUILD ファイルと区別するために、BUILD.new-repo-name などの名前を付けるとよいでしょう)。 |
build_file_content
|
文字列。デフォルトは build_file または build_file_content のいずれかを指定する必要があります。 |
path
|
文字列(必須) ローカル ファイル システム上のパス。メイン リポジトリの WORKSPACE ファイルに対する絶対パスまたは相対パスにすることができます。 |
repo_mapping
|
辞書: 文字列 -> 文字列。デフォルトは たとえば、エントリ |
workspace_file
|
名前。デフォルトは workspace_file または workspace_file_content のいずれかを指定できます。両方は指定できません。 この属性は、メイン ワークスペースを基準とするラベルです。ファイルの名前は WORKSPACE にする必要はありませんが、そうすることもできます。(リポジトリの実際の WORKSPACE ファイルと区別するために、WORKSPACE.new-repo-name などの名前を付けるとよいでしょう)。 |
workspace_file_content
|
文字列。デフォルトは workspace_file または workspace_file_content のいずれかを指定できます。両方は指定できません。 |