Workspace のルール

Workspace ルールは、外部依存関係を pull するために使用されます。 ソースコードの外に出ることもできません。

注: Bazel には、ネイティブ ワークスペース ルールの他にもさまざまな Starlark のワークスペース ルール、特に対処すべきもの ウェブ上にホストされた Git リポジトリやアーカイブです。

ルール

バインド

bind(name, actual, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

警告: bind() の使用はおすすめしません。バインドの削除を検討するをご覧ください。長期間 議論が交わされます。特に、kubectl の repo_mapping リポジトリ属性をご覧ください。

警告: select()bind() では使用できません。詳しくは、構成可能な属性に関するよくある質問をご覧ください。 ご覧ください。

//external パッケージでターゲットにエイリアスを付与します。

//external パッケージが「normal」ではないpackage: external/ ディレクトリがありません。 「仮想パッケージ」と考えることができます。すべてのバインドされたターゲットが含まれます。

ターゲットにエイリアスを付与するには、WORKSPACE ファイルでそのエイリアスを bind します。たとえば java_library ターゲットが //third_party/javacc-v2。これは、次の行を WORKSPACE ファイル:

bind(
    name = "javacc-latest",
    actual = "//third_party/javacc-v2",
)

ターゲットが次のものではなく //external:javacc-latest に依存するようになりました。 //third_party/javacc-v2。javacc-v3 がリリースされている場合は、bind ルールを //external:javacc-latest に依存するすべての BUILD ファイルが更新され、 javacc-v3 に依存するため編集する必要はありません。

Bind は、外部リポジトリ内のターゲットをワークスペースで使用できるようにするためにも使用できます。 たとえば、@my-ssl という名前のリモート リポジトリが WORKSPACE ファイルで、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.ccsign_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

Name; required

このターゲットの一意の名前。

actual

Label; optional

エイリアスを設定するターゲット。

このターゲットは存在する必要がありますが、どのようなタイプのルール(バインドを含む)でも使用できます。

この属性を省略すると、//external でこのターゲットを参照するルール 依存関係のエッジが見当たらないだけですこれは bind ルールの完全形: //external 依存関係がある場合はエラーになる 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

Name; required

このターゲットの一意の名前。

path

String; required

ローカル リポジトリのディレクトリのパス。

リポジトリのディレクトリを含むディレクトリへのパスを指定する必要があります。 WORKSPACE ファイル。パスは、メイン リポジトリの絶対パスまたは相対パスで指定できます。 WORKSPACE ファイル。

repo_mapping

Dictionary: String -> String; optional

ローカル リポジトリ名からグローバル リポジトリ名への辞書。これにより このリポジトリの依存関係を解決できます。

たとえば、エントリ "@foo": "@bar" は、このインスタンスが リポジトリが "@foo" に依存している( "@foo//some:target" など)を宣言すると、その依存関係は グローバルに宣言された "@bar""@bar//some:target")。

new_local_repository

new_local_repository(name, build_file, build_file_content, path, repo_mapping, workspace_file, workspace_file_content)

ローカル ディレクトリを Bazel リポジトリに変換できるようにします。つまり、現在の ファイル システム上のどこからでもターゲットを定義して使用できます。

このルールでは、以下を含む 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

Name; required

このターゲットの一意の名前。

build_file

String; optional

このディレクトリのビルド ファイルとして使用するファイル。

build_file または build_file_content を指定する必要があります。

この属性は、メイン ワークスペースに対する相対的なラベルです。このファイルは必ずしも BUILD という名前ですが、その名前にすることもできます。(BUILD.new-repo-name のような名前が リポジトリの実際の BUILD ファイルと区別する必要があります)。

build_file_content

String; optional

このリポジトリの BUILD ファイルの内容。

build_file または build_file_content を指定する必要があります。

path

String; required

ローカル ファイル システム上のパス。

メイン リポジトリの WORKSPACE ファイルの絶対パスまたは相対パスを指定できます。

repo_mapping

Dictionary: String -> String; optional

ローカル リポジトリ名からグローバル リポジトリ名への辞書。これにより このリポジトリの依存関係を解決できます。

たとえば、エントリ "@foo": "@bar" は、このインスタンスが リポジトリが "@foo" に依存している( "@foo//some:target" など)を宣言すると、その依存関係は グローバルに宣言された "@bar""@bar//some:target")。

workspace_file

String; optional

このリポジトリの WORKSPACE ファイルとして使用するファイル。

workspace_file または workspace_file_content のいずれかを指定できます。両方は指定できません。

この属性は、メイン ワークスペースに対する相対的なラベルです。このファイルは必ずしも WORKSPACE としていますが、その可能性もあります。(たとえば WORKSPACE.new-repo-name が、 リポジトリの実際の WORKSPACE ファイルと区別する必要があります)。

workspace_file_content

String; optional

このリポジトリの WORKSPACE ファイルの内容。

workspace_file または workspace_file_content のいずれかを指定できます。両方は指定できません。