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 yang akan ditangani dengan repositori git atau arsip yang dihosting di web.
Aturan
pengikatan
bind(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 waktu yang lama
diskusi tentang isu dan alternatifnya. Secara khusus, pertimbangkan penggunaan
repo_mapping
atribut repositori.
Peringatan: select()
tidak dapat digunakan di bind()
. Lihat FAQ Atribut yang Dapat Dikonfigurasi untuk
detailnya.
Memberikan alias pada target dalam paket //external
.
Paket //external
bukan paket "normal" paket: tidak ada direktori eksternal/,
sehingga dapat dianggap sebagai
"paket virtual" yang berisi semua target terikat.
Contoh
Untuk memberikan alias pada target, lakukan bind
di file WORKSPACE. Misalnya,
anggap ada target java_library
yang disebut
//third_party/javacc-v2
. Fungsi ini dapat diberi alias dengan menambahkan baris berikut ke kolom
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 berupa
diperbarui dan semua file BUILD, bergantung pada //external:javacc-latest
, sekarang 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 di
File WORKSPACE dan memiliki target cc_library //src:openssl-lib
, Anda dapat
buat 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 repositorinya
{i>root<i}. 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 unik untuk target ini. |
actual
|
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
local_repository(name, path, repo_mapping)
Mengizinkan target dari direktori lokal untuk diikat. Ini berarti bahwa repositori saat ini dapat menggunakan target yang ditentukan dalam direktori lain ini. Lihat bind untuk detail selengkapnya.
Contoh
Misalkan repositori saat ini adalah klien chat, yang di-root di direktori ~/chat-app. Ini
ingin menggunakan library SSL yang didefinisikan dalam repositori berbeda: ~/ssl. Tujuan
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 yang diperlukan
library.
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
path
|
Ini harus berupa jalur ke direktori yang berisi ID repositori WORKSPACE. Jalurnya bisa absolut atau relatif terhadap repositori utama WORKSPACE. |
repo_mapping
|
Misalnya, entri |
new_local_repository
new_local_repository(name, build_file, build_file_content, path, repo_mapping, workspace_file, workspace_file_content)
Memungkinkan direktori lokal diubah menjadi repositori Bazel. Ini berarti bahwa saat ini repositori dapat menentukan dan menggunakan target dari mana saja di sistem file.
Aturan ini membuat repositori Bazel dengan membuat file WORKSPACE dan subdirektori yang berisi
{i>symlink<i} ke file BUILD
dan jalur yang diberikan. File build harus membuat target 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 di direktori ~/chat-app. Ini 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 elemen
dependensi.
Anda juga dapat menggunakan new_local_repository
untuk menyertakan satu file, bukan hanya
direktori. Misalnya, Anda memiliki file jar di /home/username/Downloads/piano.jar. Anda
dapat menambahkan file itu saja ke build Anda dengan menambahkan berikut ini ke file WORKSPACE Anda:
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 unik untuk target ini. |
build_file
|
Build_file atau build_file_content harus ditentukan. Atribut ini adalah label yang terkait dengan ruang kerja utama. File tersebut tidak perlu bernama BUILD, tapi bisa jadi. (Sesuatu seperti BUILD.new-repo-name mungkin cocok untuk membedakannya dari file BUILD repositori yang sebenarnya.) |
build_file_content
|
Build_file atau build_file_content harus ditentukan. |
path
|
Ini bisa mutlak atau relatif terhadap file WORKSPACE repositori utama. |
repo_mapping
|
Misalnya, entri |
workspace_file
|
Workspace_file atau workspace_file_content dapat ditentukan, tetapi tidak keduanya. Atribut ini adalah label yang terkait dengan ruang kerja utama. File tersebut tidak perlu bernama WORKSPACE, tetapi bisa saja. (Sesuatu seperti WORKSPACE.new-repo-name mungkin cocok untuk membedakannya dari file WORKSPACE aktual repositori.) |
workspace_file_content
|
Workspace_file atau workspace_file_content dapat ditentukan, tetapi tidak keduanya. |