Aturan Workspace digunakan untuk menarik 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, terutama yang akan menangani repositori git atau arsip yang dihosting di web.
Aturan
mengikat
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 "Mempertimbangkan penghapusan binding" untuk diskusi panjang tentang masalah dan alternatifnya. Khususnya, pertimbangkan penggunaan
atribut repositori
repo_mapping
.
Peringatan: select()
tidak dapat digunakan di bind()
. Lihat FAQ Atribut yang Dapat Dikonfigurasi untuk
mengetahui detailnya.
Memberi target alias dalam paket //external
.
Paket //external
bukanlah paket "normal": tidak ada direktori eksternal/direktori,
sehingga dapat dianggap sebagai "paket virtual" yang berisi semua target terikat.
Contoh
Untuk memberikan alias, bind
alias di file WORKSPACE. Misalnya,
ada target java_library
yang disebut
//third_party/javacc-v2
. File ini dapat diberi alias 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 tergantung //external:javacc-latest
sekarang akan bergantung pada javacc-v3 tanpa perlu diedit.
Binding juga dapat digunakan untuk menyediakan target di repositori eksternal bagi 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, di 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 jalurnya yang relatif terhadap 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"], )
Kemudian, tampilan sign_in.cc
mungkin 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 dapat berupa jenis aturan apa pun (termasuk binding). Jika atribut ini dihilangkan, aturan yang mengacu pada target ini di |
repositori_lokal
Lihat sumber aturanlocal_repository(name, path, repo_mapping)
Mengizinkan target dari direktori lokal untuk diikat. Ini berarti repositori saat ini dapat menggunakan target yang ditentukan di direktori lainnya. Lihat bagian binding untuk detail selengkapnya.
Contoh
Misalkan repositori saat ini adalah klien chat, yang di-root di direktori ~/chat-app. Repositori ini ingin menggunakan library SSL yang ditentukan di repositori yang 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 untuk bergantung pada library ini.
Argumen
Atribut | |
---|---|
name |
Nama unik untuk target ini. |
path
|
Jalur ini harus berupa jalur ke direktori yang berisi file WORKSPACE repositori. Jalur ini dapat bersifat absolut atau relatif terhadap file WORKSPACE repositori utama. |
repo_mapping
|
Misalnya, entri |
repositori_lokal_baru
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. Ini berarti repositori saat ini dapat menentukan dan menggunakan target dari mana saja pada sistem file.
Aturan ini membuat repositori Bazel dengan membuat file dan subdirektori WORKSPACE yang berisi
symlink ke file dan jalur BUILD yang diberikan. File build harus membuat target yang relatif terhadap
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. Repositori ini ingin menggunakan library SSL yang ditentukan dalam direktori yang 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 terhubung 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, anggap Anda memiliki file jar di /home/username/Downloads/piano.jar. Anda
dapat menambahkan file tersebut ke build dengan menambahkan kode 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"], )Lalu, target dapat bergantung pada
@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 merupakan label yang relatif terhadap ruang kerja utama. File tidak perlu diberi nama BUILD, tetapi dapat digunakan. (Sesuatu seperti BUILD.new-repo-name mungkin berfungsi dengan baik untuk membedakannya dari file BUILD yang sebenarnya pada repositori.) |
build_file_content
|
Build_file atau build_file_content harus ditentukan. |
path
|
Hal ini dapat bersifat absolut 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 merupakan label yang relatif terhadap ruang kerja utama. File tidak perlu diberi nama WORKSPACE, tetapi dapat digunakan. (Sesuatu seperti WORKSPACE.new-repo-name mungkin berfungsi dengan baik untuk membedakannya dari file WORKSPACE repositori yang sebenarnya.) |
workspace_file_content
|
Workspace_file atau workspace_file_content dapat ditentukan, tetapi tidak keduanya. |