Çalışma Alanı Kuralları

Workspace kuralları, genellikle harici bağımlılıkları çekmek için kullanılır. ana deponun dışında bulunan kaynak kodu içerir.

Not: Bazel, yerel çalışma alanı kurallarının yanı sıra, çalışma alanı kurallarının yanı sıra çeşitli Starlark çalışma alanı kuralları, özellikle de arşivleriyle kontrol edebilirsiniz.

Kurallar

bind

bind(name, actual, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

Uyarı: bind() kullanılması önerilmez. "Bağlantıyı kaldırmayı düşünün" bölümüne bakın uzun süreyle ve alternatifleri üzerine konuşacağız. Özellikle repo_mapping depolama alanı özelliklerini kullanmayı düşünün.

Uyarı: select(), bind() içinde kullanılamaz. Ayrıntılar için Yapılandırılabilir Özellikler ile ilgili SSS başlıklı makaleyi inceleyin.

Bir hedefe //external paketinde bir takma ad verir.

//external paketi "normal" değil paket: harici/ dizin yok, bu nedenle bir "sanal paket" olarak düşünülebilir. içerir.

Örnekler

Bir hedefe takma ad vermek için WORKSPACE dosyasında bind simgesini kullanın. Örneğin, adında bir java_library hedefi olduğunu varsayalım //third_party/javacc-v2. Aşağıdakiler WORKSPACE dosyasına eklenerek bu adla başka bir ad verilebilir:

bind(
    name = "javacc-latest",
    actual = "//third_party/javacc-v2",
)

Artık hedefler şuna bağlı olabilir: //external:javacc-latest //third_party/javacc-v2. javacc-v3 yayınlanırsa bind kuralı güncellendi ve //external:javacc-latest öğesine bağlı tüm BUILD dosyaları artık Javacc-v3'e bağımlı olduğu için düzenleme yapılması gerekmez.

Bağlama, harici depolardaki hedefleri çalışma alanınızda kullanılabilir hale getirmek için de kullanılabilir. Örneğin, @my-ssl adlı bir uzak depo varsa WORKSPACE dosyası ve bu dosyanın cc_library hedefi //src:openssl-lib varsa bind kullanarak bu hedef için bir takma ad oluşturun:

bind(
    name = "openssl",
    actual = "@my-ssl//src:openssl-lib",
)

Ardından, bağlı hedef, çalışma alanınızdaki bir BUILD dosyasında aşağıdaki gibi kullanılabilir:

cc_library(
    name = "sign-in",
    srcs = ["sign_in.cc"],
    hdrs = ["sign_in.h"],
    deps = ["//external:openssl"],
)

sign_in.cc ve sign_in.h içinde, //external:openssl, deposuna göre kendi yolu kullanılarak yönlendirilebilir kök. Örneğin, @my-ssl//src:openssl-lib için kural tanımı şunun gibiyse, bu:

cc_library(
    name = "openssl-lib",
    srcs = ["openssl.cc"],
    hdrs = ["openssl.h"],
)

Bu durumda, sign_in.cc öğesinin kapsamı aşağıdaki gibi görünebilir:

#include "sign_in.h"
#include "src/openssl.h"

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

actual

Label; optional

Takma ad verilecek hedef.

Bu hedef mevcut olmalıdır ancak herhangi bir kural türünde (bağlama dahil) olabilir.

Bu özellik atlanırsa //external içinde bu hedefe işaret eden kurallar bu bağımlılık kenarını görmez. Bunun, bind kuralını tamamen atlamaktan farklı olduğunu unutmayın: Bir //external bağımlılığının ilişkili bir bind kuralı olmaması hatadır.

local_repository

local_repository(name, path, repo_mapping)

Yerel dizinden hedeflerin bağlanmasına izin verir. Bu, mevcut deponun bu diğer dizinde tanımlanan hedefleri kullanır. Bağlantı bölümünü inceleyin.

Örnekler

Mevcut deponun, ~/chat-app dizininde rootlanmış bir sohbet istemcisi olduğunu varsayalım. Google , farklı bir depoda tanımlanmış bir SSL kitaplığı kullanmak istiyor: ~/ssl. SSL kitaplığında bir //src:openssl-lib hedefi vardır.

Kullanıcı, ~/chat-app/WORKSPACE adresine aşağıdaki satırları ekleyerek bu hedefe bağımlılık ekleyebilir:

local_repository(
    name = "my-ssl",
    path = "/home/user/ssl",
)

Hedefler, buna bağımlı bir bağımlılık olarak @my-ssl//src:openssl-lib belirtir kitaplığını tanıtır.

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

path

String; required

Yerel deponun dizininin yolu.

Bu, kod deposunun WORKSPACE dosyasını içeren dizinin yolu olmalıdır. Yol, ana deponun WORKSPACE dosyasına göre mutlak veya göreli olabilir.

repo_mapping

Dictionary: String -> String; optional

Yerel depo adından genel depo adına bir sözlük. Bu sayede şunlar üzerinde kontrol sahibi olunabilir: çalışma alanı bağımlılık çözümü sunar.

Örneğin, "@foo": "@bar" girişi, bu deposu "@foo" değerine bağlıdır (örneğin, "@foo//some:target") içeriyorsa bu bağımlılığı dünya genelinde "@bar" ("@bar//some:target") olarak ilan edildi.

new_local_repository

new_local_repository(name, build_file, build_file_content, path, repo_mapping, workspace_file, workspace_file_content)

Yerel bir dizinin Bazel deposuna dönüştürülmesini sağlar. Bu, şu anki durumun depo, dosya sisteminde herhangi bir yerden hedefleri tanımlayabilir ve kullanabilir.

Bu kural, WORKSPACE dosyası ve verilen BUILD dosyasına ve yola yönelik simge bağlantıları içeren bir alt dizin oluşturarak bir Bazel deposu oluşturur. Derleme dosyası, path ile ilgili hedefler oluşturmalıdır. Halihazırda bir WORKSPACE dosyası ve BUILD dosyası içeren dizinler için local_repository kuralı kullanılabilir.

Örnekler

Mevcut deponun, kökü ~/chat-app dizininde olan bir sohbet istemcisi olduğunu varsayalım. Bu istemci, farklı bir dizinde (~/ssl) tanımlanmış bir SSL kitaplığı kullanmak istiyor.

Kullanıcı SSL kitaplığı için BUILD dosyası oluşturarak bağımlılık ekleyebilir (~/chat-app/BUILD.my-ssl) şunları içeren:

java_library(
    name = "openssl",
    srcs = glob(['*.java'])
    visibility = ["//visibility:public"],
)
.

Ardından, ~/chat-app/WORKSPACE adresine aşağıdaki satırları ekleyebilirler:

new_local_repository(
    name = "my-ssl",
    path = "/home/user/ssl",
    build_file = "BUILD.my-ssl",
)

Bu işlem, /home/user/ssl ile sembolik bağlantı oluşturan bir @my-ssl deposu oluşturur. Hedefler, @my-ssl//:openssl bir hedefin eklenmesine eklenerek bu kitaplığa bağlı olabilir ve bildirmeyi konuştuk.

new_local_repository öğesini yalnızca değil, tek bir dosya eklemek için de kullanabilirsiniz dizin oluşturabilirsiniz. Örneğin, /home/kullanıcıadı/Downloads/piano.jar adresinde bir jar dosyanız olduğunu varsayalım. Siz aşağıdakini WORKSPACE dosyanıza ekleyerek sadece o dosyayı derlemenize ekleyebilir:

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

Ayrıca aşağıdaki BUILD.piano dosyasını da oluşturun:

java_import(
    name = "play-music",
    jars = ["piano.jar"],
    visibility = ["//visibility:public"],
)
. Ardından hedefler, piano.jar'ı kullanmak için @piano//:play-music uygulamasına bağlı olabilir.

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

build_file

String; optional

Bu dizin için BUILD dosyası olarak kullanılacak bir dosya.

Build_file veya build_file_content değeri belirtilmelidir.

Bu özellik, ana çalışma alanına bağlı bir etikettir. Dosyanın BUILD olarak adlandırılır ama bazen de devam eder. (BUILD.new-repo-name gibi bir komut dosyası adlandırmanız için (bunu, deponun gerçek BUILD dosyalarından ayırt ediyoruz.)

build_file_content

String; optional

Bu deponun BUILD dosyasının içeriği.

build_file veya build_file_content belirtilmelidir.

path

String; required

Yerel dosya sistemindeki bir yoldur.

Bu değer mutlak olabilir ya da ana deponun WORKSPACE dosyasına göre olabilir.

repo_mapping

Dictionary: String -> String; optional

Yerel depo adından genel depo adına bir sözlük. Bu sayede şunlar üzerinde kontrol sahibi olunabilir: çalışma alanı bağımlılık çözümü sunar.

Örneğin, "@foo": "@bar" girişi, bu deponun "@foo"'e bağımlı olduğu her zaman ("@foo//some:target"'e bağımlılık gibi) bu bağımlılığı aslında global olarak tanımlanmış "@bar" ("@bar//some:target") içinde çözmesi gerektiğini belirtir.

workspace_file

String; optional

Bu depo için WORKSPACE dosyası olarak kullanılacak dosya.

workspace_file veya workspace_file_content özelliklerinden yalnızca biri belirtilebilir ancak ikisi birden belirtilemez.

Bu özellik, ana çalışma alanına göre bir etikettir. Dosyanın WORKSPACE adlı, ancak şeklinde de olabilir. (WORKSPACE.new-repo-name gibi bir dosya kullanılabilir (bunu, deposunun asıl WORKSPACE dosyalarından ayırt edebilirsiniz.)

workspace_file_content

String; optional

Bu deponun WORKSPACE dosyasının içeriği.

workspace_file veya workspace_file_content belirtilebilir ancak ikisi birden belirtilemez.