Aturan ruang kerja digunakan untuk menarik dependensi eksternal, biasanya kode sumber yang berada di luar repositori utama.
Catatan: selain aturan ruang kerja native, Bazel juga menyematkan berbagai aturan ruang kerja Starlark, khususnya aturan untuk menangani repositori atau arsip git yang dihosting di web.
Aturan
bind
Lihat sumber aturanbind(name, actual, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
Peringatan: penggunaan bind() tidak direkomendasikan. Lihat "Pertimbangkan untuk menghapus pengikatan" untuk mengetahui diskusi panjang
tentang masalah dan alternatifnya. Secara khusus, pertimbangkan penggunaan
repo_mapping
atribut repositori.
Peringatan: select() tidak dapat digunakan di bind(). Lihat FAQ Atribut yang Dapat Dikonfigurasi untuk
mengetahui detailnya.
Memberikan alias target dalam paket //external.
Paket //external bukanlah paket "normal": tidak ada direktori external/,
sehingga dapat dianggap sebagai "paket virtual" yang berisi semua target terikat.
Contoh
Untuk memberikan alias target, bind di file WORKSPACE. Misalnya,
anggaplah ada target java_library yang disebut
//third_party/javacc-v2. Target ini dapat diberi alias dengan menambahkan hal berikut ke file
WORKSPACE:
bind(
name = "javacc-latest",
actual = "//third_party/javacc-v2",
)
Sekarang target dapat bergantung pada //external:javacc-latest alih-alih
//third_party/javacc-v2. Jika javacc-v3 dirilis, aturan bind dapat diperbarui dan semua file BUILD yang bergantung pada //external:javacc-latest kini akan bergantung pada javacc-v3 tanpa perlu diedit.
Pengikatan juga dapat digunakan untuk membuat target di repositori eksternal tersedia untuk ruang kerja Anda.
Misalnya, jika ada repositori jarak jauh bernama @my-ssl yang diimpor dalam file WORKSPACE dan memiliki target cc_library //src:openssl-lib, Anda dapat membuat alias untuk target ini menggunakan bind:
bind(
name = "openssl",
actual = "@my-ssl//src:openssl-lib",
)
Kemudian, dalam file BUILD di ruang kerja Anda, target terikat dapat digunakan sebagai berikut:
cc_library(
name = "sign-in",
srcs = ["sign_in.cc"],
hdrs = ["sign_in.h"],
deps = ["//external:openssl"],
)
Dalam sign_in.cc dan sign_in.h, file header yang diekspos oleh
//external:openssl dapat dirujuk menggunakan jalur relatif terhadap root repositori. Misalnya, jika definisi aturan untuk @my-ssl//src:openssl-lib terlihat seperti
ini:
cc_library(
name = "openssl-lib",
srcs = ["openssl.cc"],
hdrs = ["openssl.h"],
)
Maka, include sign_in.cc mungkin terlihat seperti ini:
#include "sign_in.h" #include "src/openssl.h"
Argumen
| Atribut | |
|---|---|
name |
Nama; wajib Nama unik untuk target ini. |
actual
|
Label; defaultnya adalah Target ini harus ada, tetapi dapat berupa jenis aturan apa pun (termasuk pengikatan). Jika atribut ini dihilangkan, aturan yang merujuk ke target ini di |
local_repository
Lihat sumber aturanlocal_repository(name, path, repo_mapping)
Memungkinkan target dari direktori lokal terikat. Artinya, repositori saat ini dapat menggunakan target yang ditentukan di direktori lain ini. Lihat bagian pengikatanuntuk mengetahui detail selengkapnya.
Contoh
Misalnya, repositori saat ini adalah klien chat, yang berakar di direktori ~/chat-app. Repositori ini
ingin menggunakan library SSL yang ditentukan di repositori lain: ~/ssl. Library SSL memiliki target //src:openssl-lib.
Pengguna dapat menambahkan dependensi pada target ini dengan menambahkan baris berikut ke ~/chat-app/WORKSPACE:
local_repository(
name = "my-ssl",
path = "/home/user/ssl",
)
Target akan menentukan @my-ssl//src:openssl-lib sebagai dependensi untuk bergantung pada library ini.
Argumen
| Atribut | |
|---|---|
name |
Nama; wajib Nama unik untuk target ini. |
path
|
String; wajib Jalur ke direktori repositori lokal.Jalur ini harus berupa jalur ke direktori yang berisi file WORKSPACE repositori. Jalur dapat berupa absolut atau relatif terhadap file WORKSPACE repositori utama. |
repo_mapping
|
Kamus: String -> String; defaultnya adalah Misalnya, entri |
new_local_repository
Lihat sumber aturannew_local_repository(name, build_file, build_file_content, path, repo_mapping, workspace_file, workspace_file_content)
Memungkinkan direktori lokal diubah menjadi repositori Bazel. Artinya, repositori saat ini dapat menentukan dan menggunakan target dari mana saja di sistem file.
Aturan ini membuat repositori Bazel dengan membuat file WORKSPACE dan subdirektori yang berisi symlink ke file BUILD dan jalur yang diberikan. File build harus membuat target relatif terhadap path. Untuk direktori yang sudah berisi file WORKSPACE dan file BUILD, aturan
local_repository dapat digunakan.
Contoh
Misalnya, repositori saat ini adalah klien chat, yang berakar di direktori ~/chat-app. Repositori ini ingin menggunakan library SSL yang ditentukan di direktori lain: ~/ssl.
Pengguna dapat menambahkan dependensi dengan membuat file BUILD untuk library SSL (~/chat-app/BUILD.my-ssl) yang berisi:
java_library(
name = "openssl",
srcs = glob(['*.java'])
visibility = ["//visibility:public"],
)
Kemudian, mereka dapat menambahkan baris berikut ke ~/chat-app/WORKSPACE:
new_local_repository(
name = "my-ssl",
path = "/home/user/ssl",
build_file = "BUILD.my-ssl",
)
Tindakan ini akan membuat repositori @my-ssl yang symlink ke /home/user/ssl.
Target dapat bergantung pada library ini dengan menambahkan @my-ssl//:openssl ke dependensi target.
Anda juga dapat menggunakan new_local_repository untuk menyertakan file tunggal, bukan hanya direktori. Misalnya, Anda memiliki file jar di /home/username/Downloads/piano.jar. Anda dapat menambahkan file tersebut ke build dengan menambahkan hal berikut ke file WORKSPACE:
new_local_repository(
name = "piano",
path = "/home/username/Downloads/piano.jar",
build_file = "BUILD.piano",
)
Dan membuat file BUILD.piano berikut:
java_import(
name = "play-music",
jars = ["piano.jar"],
visibility = ["//visibility:public"],
)
@piano//:play-music untuk menggunakan piano.jar.
Argumen
| Atribut | |
|---|---|
name |
Nama; wajib Nama unik untuk target ini. |
build_file
|
Nama; defaultnya adalah build_file atau build_file_content harus ditentukan. Atribut ini adalah label relatif terhadap ruang kerja utama. File tidak harus diberi nama BUILD, tetapi dapat diberi nama demikian. (Nama seperti BUILD.new-repo-name mungkin berguna untuk membedakannya dari file BUILD sebenarnya di repositori). |
build_file_content
|
String; defaultnya adalah build_file atau build_file_content harus ditentukan. |
path
|
String; wajib Jalur di sistem file lokal.Jalur ini dapat berupa absolut atau relatif terhadap file WORKSPACE repositori utama. |
repo_mapping
|
Kamus: String -> String; defaultnya adalah Misalnya, entri |
workspace_file
|
Nama; defaultnya adalah workspace_file atau workspace_file_content dapat ditentukan, tetapi tidak keduanya. Atribut ini adalah label relatif terhadap ruang kerja utama. File tidak harus diberi nama WORKSPACE, tetapi dapat diberi nama demikian. (Nama seperti WORKSPACE.new-repo-name mungkin berguna untuk membedakannya dari file WORKSPACE sebenarnya di repositori). |
workspace_file_content
|
String; defaultnya adalah workspace_file atau workspace_file_content dapat ditentukan, tetapi tidak keduanya. |