Çalışma Alanı Kuralları

Sorun bildirin Kaynağı göster

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

Not: Bazel, yerel çalışma alanı kurallarının yanı sıra, özellikle git depoları veya web'de barındırılan arşivlerle ilgili olanlar olmak üzere çeşitli Starlark çalışma alanı kurallarını da yerleştirir.

Kurallar

bind

Kural kaynağını göster
bind(name, actual, compatible_with, deprecation, distribs, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

Uyarı: bind() kullanılması önerilmez. Sorunları ve alternatifleri hakkında uzun bir tartışma için "Bağlantıyı kaldırmayı düşünün" bölümüne bakın. Özellikle, repo_mapping deposu özelliklerini kullanmayı düşünün.

Uyarı: select(), bind() içinde kullanılamaz. Ayrıntılar için Yapılandırılabilir Özellikler Hakkında SSS bölümüne bakın.

//external paketinde bir hedefe takma ad verir.

//external paketi "normal" bir paket değil: Harici/ dizin yoktur. Bu nedenle, tüm bağlı hedefleri içeren bir "sanal paket" olarak düşünülebilir.

Örnekler

Bir hedefe takma ad vermek için hedefi WORKSPACE dosyasında bind. Örneğin, //third_party/javacc-v2 adında bir java_library hedefi olduğunu varsayalım. Bu alanın diğer adı, WORKSPACE dosyasına aşağıdaki bilgi eklenerek verilebilir:

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

Hedefler artık //third_party/javacc-v2 yerine //external:javacc-latest kaynağına bağlı olabilir. Javacc-v3 yayınlanırsa bind kuralı güncellenebilir ve //external:javacc-latest öğesine bağlı tüm BUILD dosyaları, artık düzenlenmesine gerek kalmadan javacc-v3 dosyasını kullanır.

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

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

Ardından, çalışma alanınızdaki bir BUILD dosyasında bağlı hedef 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 tarafından sunulan üst bilgi dosyalarına başvuru için, depo köklerine göre yolları kullanılır. Örneğin, @my-ssl//src:openssl-lib için kural tanımı şöyle görünüyorsa:

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

Ad; gerekli

Bu hedef için benzersiz bir ad.

actual

Etiket; varsayılan değer None

Diğer 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. //external bağımlılığıyla ilişkili bir bind kuralı yoksa bu bir hatadır.

local_repository

Kural kaynağını göster
local_repository(name, path, repo_mapping)

Yerel dizinden hedeflerin bağlanmasına izin verir. Yani mevcut depo, bu diğer dizinde tanımlanmış hedefleri kullanabilir. Daha fazla bilgi için bağlama bölümüne bakın.

Örnekler

Mevcut deponun, ~/chat-app dizininde bulunan bir sohbet istemcisi olduğunu varsayalım. Farklı bir depoda tanımlanan SSL kitaplığını kullanmak istediğini varsayalım: ~/ssl. SSL kitaplığında bir hedef //src:openssl-lib var.

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

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

Hedefler, bu kitaplığa bağımlı bir bağımlılık olarak @my-ssl//src:openssl-lib belirtir.

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

path

Dize; zorunlu

Yerel depo dizininin yolu.

Bu, deponun WORKSPACE dosyasını içeren dizine giden bir yol olmalıdır. Yol, mutlak ya da ana deponun WORKSPACE dosyasına göre olabilir.

repo_mapping

Sözlük: Dize -> Dize; varsayılan {}

Yerel depo adından genel depo adına bir sözlük. Bu sayede, bu deponun bağımlılıkları için çalışma alanı bağımlılık çözümü üzerinde kontrol sahibi olursunuz.

Örneğin bir "@foo": "@bar" girişi, bu deponun "@foo" öğesine bağlı olduğu her an ("@foo//some:target" bağımlılığı gibi) aslında genel olarak tanımlanan "@bar" ("@bar//some:target") içinde bu bağımlılığı çözmesi gerektiğini belirtir.

new_local_repository

Kural kaynağını göster
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, mevcut deponun dosya sisteminde herhangi bir yerden hedefleri tanımlayıp kullanabileceği anlamına gelir.

Bu kural, bir WORKSPACE dosyası ve belirtilen BUILD dosyası ve yol ile ilgili semboller içeren bir alt dizin oluşturarak Bazel deposu oluşturur. Derleme dosyası, path ile göreli hedefler oluşturmalıdır. Zaten bir WORKSPACE dosyası ve bir BUILD dosyası içeren dizinler için local_repository kuralı kullanılabilir.

Örnekler

Mevcut deponun, ~/chat-app dizininde bulunan bir sohbet istemcisi olduğunu varsayalım. Bu depo, farklı bir dizinde tanımlanmış bir SSL kitaplığı kullanmak istemektedir: ~/ssl.

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

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

Ardından, şu satırları ~/chat-app/WORKSPACE alanına ekleyebilirler:

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

Bu işlem, /home/user/ssl ile sembolik bir şekilde bağlantılı bir @my-ssl deposu oluşturur. Hedefler, hedefin bağımlılıklarına @my-ssl//:openssl ekleyerek bu kitaplığa bağımlı olabilir.

new_local_repository öğesini yalnızca dizinleri değil, tek dosyaları da eklemek için de kullanabilirsiniz. Örneğin, /home/username/Downloads/piano.jar dizininde bir jar dosyanızın olduğunu varsayalım. WORKSPACE dosyanıza aşağıdakini ekleyerek yalnızca bu dosyayı derlemenize ekleyebilirsiniz:

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"],
)
Öyleyse hedefler, piano.jar'ı kullanmak için @piano//:play-music uygulamasına bağlı olabilir.

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

build_file

Ad; varsayılan değer None

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ılması gerekmez ancak kullanılabilir. (BUILD.new-repo-name gibi bir komut, onu deponun gerçek BUILD dosyalarından ayırt etmek için işe yarayabilir.)

build_file_content

Dize; varsayılan değer ""

Bu depo için BUILD dosyasının içeriği.

Build_file veya build_file_content değeri belirtilmelidir.

path

Dize; zorunlu

Yerel dosya sistemindeki bir yoldur.

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

repo_mapping

Sözlük: Dize -> Dize; varsayılan {}

Yerel depo adından genel depo adına bir sözlük. Bu sayede, bu deponun bağımlılıkları için çalışma alanı bağımlılık çözümü üzerinde kontrol sahibi olursunuz.

Örneğin bir "@foo": "@bar" girişi, bu deponun "@foo" öğesine bağlı olduğu her an ("@foo//some:target" bağımlılığı gibi) aslında genel olarak tanımlanan "@bar" ("@bar//some:target") içinde bu bağımlılığı çözmesi gerektiğini belirtir.

workspace_file

Ad; varsayılan değer None

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 bağlı bir etikettir. Dosyanın WORKSPACE olarak adlandırılması gerekmez ancak şöyle adlandırılabilir. (WORKSPACE.new-repo-name gibi bir kod, onu deponun gerçek WORKSPACE dosyalarından ayırt etmek için işe yarayabilir.)

workspace_file_content

Dize; varsayılan değer ""

Bu depo için WORKSPACE dosyasının içeriği.

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