Aturan Workspace

Laporkan masalah Lihat sumber Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Aturan ruang kerja digunakan untuk menarik dependensi eksternal, biasanya kode sumber yang berada di luar repositori utama.

Catatan: selain aturan ruang kerja bawaan, Bazel juga menyematkan berbagai aturan ruang kerja Starlark, khususnya aturan yang menangani repositori atau arsip git yang dihosting di web.

Aturan

mengikat

Lihat sumber aturan
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 mengetahui pembahasan 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.

Memberi target alias dalam paket //external.

Paket //external bukanlah paket "normal": tidak ada direktori/ eksternal, sehingga dapat dianggap sebagai "paket virtual" yang berisi semua target terikat.

Contoh

Untuk memberi target alias, bind target tersebut dalam file WORKSPACE. Misalnya, anggap ada target java_library yang disebut //third_party/javacc-v2. Hal 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 yang bergantung pada //external:javacc-latest kini akan bergantung pada javacc-v3 tanpa perlu diedit.

Bind 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 relatifnya ke 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, 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 None

Target yang akan diberi alias.

Target ini harus ada, tetapi dapat berupa jenis aturan apa pun (termasuk bind).

Jika atribut ini tidak disertakan, aturan yang merujuk ke target ini di //external tidak akan melihat tepi dependensi ini. Perhatikan bahwa hal ini berbeda dengan menghapus aturan bind sepenuhnya: akan terjadi error jika dependensi //external tidak memiliki aturan bind terkait.

local_repository

Lihat sumber aturan
local_repository(name, path, repo_mapping)

Memungkinkan target dari direktori lokal diikat. Artinya, repositori saat ini dapat menggunakan target yang ditentukan di direktori lain ini. Lihat bagian binduntuk mengetahui detail selengkapnya.

Contoh

Misalkan repositori saat ini adalah klien chat, yang berakar di direktori ~/chat-app. Klien 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.

Ini harus berupa jalur ke direktori yang berisi file WORKSPACE repositori. Jalur dapat bersifat absolut atau relatif terhadap file WORKSPACE repositori utama.

repo_mapping

Dictionary: String -> String; default-nya adalah {}

Kamus dari nama repositori lokal ke nama repositori global. Hal ini memungkinkan kontrol atas penyelesaian dependensi ruang kerja untuk dependensi repositori ini.

Misalnya, entri "@foo": "@bar" menyatakan bahwa, untuk setiap waktu saat repositori ini bergantung pada "@foo" (seperti dependensi pada "@foo//some:target"), repositori tersebut harus menyelesaikan dependensi tersebut dalam "@bar" ("@bar//some:target") yang dideklarasikan secara global.

new_local_repository

Lihat sumber aturan
new_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 link simbolis 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

Misalkan repositori saat ini adalah klien chat, yang berakar di direktori ~/chat-app. Repositori tersebut 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 membuat 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 kode berikut ke file WORKSPACE:

new_local_repository(
    name = "piano",
    path = "/home/username/Downloads/piano.jar",
    build_file = "BUILD.piano",
)

Lalu, buat 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

Nama unik untuk target ini.

build_file

Nama; defaultnya adalah None

File yang akan digunakan sebagai file BUILD untuk direktori ini.

build_file atau build_file_content harus ditentukan.

Atribut ini adalah label yang relatif terhadap ruang kerja utama. File tidak harus bernama BUILD, tetapi bisa saja. (Sesuatu seperti BUILD.new-repo-name mungkin berfungsi dengan baik untuk membedakannya dari file BUILD sebenarnya di repositori.)

build_file_content

String; default-nya adalah ""

Konten untuk file BUILD untuk repositori ini.

build_file atau build_file_content harus ditentukan.

path

String; wajib

Jalur di sistem file lokal.

Jalur ini dapat bersifat absolut atau relatif terhadap file WORKSPACE repositori utama.

repo_mapping

Dictionary: String -> String; default-nya adalah {}

Kamus dari nama repositori lokal ke nama repositori global. Hal ini memungkinkan kontrol atas penyelesaian dependensi ruang kerja untuk dependensi repositori ini.

Misalnya, entri "@foo": "@bar" menyatakan bahwa, untuk setiap waktu saat repositori ini bergantung pada "@foo" (seperti dependensi pada "@foo//some:target"), repositori tersebut harus menyelesaikan dependensi tersebut dalam "@bar" ("@bar//some:target") yang dideklarasikan secara global.

workspace_file

Nama; defaultnya adalah None

File yang akan digunakan sebagai file WORKSPACE untuk repositori ini.

workspace_file atau workspace_file_content dapat ditentukan, tetapi tidak keduanya.

Atribut ini adalah label yang relatif terhadap ruang kerja utama. File tidak harus diberi nama WORKSPACE, tetapi bisa saja. (Sesuatu seperti WORKSPACE.new-repo-name mungkin berfungsi dengan baik untuk membedakannya dari file WORKSPACE repositori yang sebenarnya.)

workspace_file_content

String; default-nya adalah ""

Konten untuk file WORKSPACE untuk repositori ini.

workspace_file atau workspace_file_content dapat ditentukan, tetapi tidak keduanya.