Aturan Workspace digunakan untuk mengambil dependensi eksternal, biasanya kode sumber yang terletak di luar repositori utama.
Catatan: selain aturan ruang kerja native, Bazel juga menyematkan berbagai aturan ruang kerja Starlark, khususnya aturan untuk menangani repositori git atau arsip 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 diskusi panjang tentang masalah dan alternatifnya. Secara khusus, pertimbangkan penggunaan
atribut repositori
repo_mapping
.
Peringatan: select()
tidak dapat digunakan di bind()
. Lihat FAQ Atribut yang Dapat Dikonfigurasi untuk
mengetahui detailnya.
Memberikan alias pada target dalam paket //external
.
Paket //external
bukan paket "normal": tidak ada direktori eksternal/,
sehingga dapat dianggap sebagai "paket virtual" yang berisi semua target yang terikat.
Contoh
Untuk memberikan alias pada target, lakukan bind
di file WORKSPACE. Misalnya,
ada target java_library
yang disebut
//third_party/javacc-v2
. Anda dapat menggunakan alias ini dengan menambahkan kode berikut ke file WORKSPACE:
bind( name = "javacc-latest", actual = "//third_party/javacc-v2", )
Sekarang target dapat bergantung pada //external:javacc-latest
, bukan
//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 untuk menggunakan jalurnya yang terkait dengan root repositorinya. 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 penyertaan sign_in.cc
mungkin akan terlihat seperti ini:
#include "sign_in.h" #include "src/openssl.h"
Argumen
Atribut | |
---|---|
name |
Nama; wajib diisi Nama unik untuk target ini. |
actual
|
Label; defaultnya adalah Target ini harus ada, tetapi bisa 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)
Mengizinkan target dari direktori lokal untuk diikat. Artinya, repositori saat ini dapat menggunakan target yang ditentukan dalam direktori lain ini. Lihat bagian binding untuk detail selengkapnya.
Contoh
Misalkan repositori saat ini adalah klien chat, yang di-root pada direktori ~/chat-app. Library tersebut ingin menggunakan library SSL yang ditentukan di repositori berbeda: ~/ssl. Library
SSL memiliki //src:openssl-lib
target.
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 yang akan bergantung pada
library ini.
Argumen
Atribut | |
---|---|
name |
Nama; wajib diisi Nama unik untuk target ini. |
path
|
String; wajib diisi Jalur ke direktori repositori lokal.Ini harus berupa jalur ke direktori yang berisi file WORKSPACE repositori. Jalur dapat bersifat 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 pada 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 yang sesuai dengan
path
. Untuk direktori yang sudah berisi file WORKSPACE dan file BUILD, aturan
local_repository
dapat digunakan.
Contoh
Misalkan repositori saat ini adalah klien chat, yang di-root pada direktori ~/chat-app. Library tersebut ingin menggunakan library SSL yang ditentukan di direktori berbeda: ~/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 melakukan 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 saja ke build dengan menambahkan baris 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"], )Kemudian target dapat bergantung pada
@piano//:play-music
untuk menggunakan piano.jar.
Argumen
Atribut | |
---|---|
name |
Nama; wajib diisi Nama unik untuk target ini. |
build_file
|
Nama; defaultnya adalah Build_file atau build_file_content harus ditentukan. Atribut ini adalah label yang terkait dengan ruang kerja utama. File ini tidak perlu diberi nama BUILD, tetapi bisa diberi nama BUILD. (Sesuatu seperti BUILD.new-repo-name cocok untuk membedakannya dengan file BUILD repositori yang sebenarnya.) |
build_file_content
|
String; defaultnya adalah Build_file atau build_file_content harus ditentukan. |
path
|
String; wajib diisi Jalur pada sistem file lokal.Ini bisa mutlak 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 yang terkait dengan ruang kerja utama. File tidak perlu diberi nama WORKSPACE, tetapi bisa diberi nama. (Sesuatu seperti WORKSPACE.new-repo-name dapat digunakan untuk membedakannya dengan file WORKSPACE aktual repositori.) |
workspace_file_content
|
String; defaultnya adalah Workspace_file atau workspace_file_content dapat ditentukan, tetapi tidak keduanya. |