Java Kuralları

Kurallar

java_binary

Kural kaynağını görüntüleme
java_binary(name, deps, srcs, data, resources, args, classpath_resources, compatible_with, create_executable, deploy_env, deploy_manifest_lines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, javacopts, jvm_flags, launcher, licenses, main_class, output_licenses, plugins, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, stamp, tags, target_compatible_with, testonly, toolchains, use_launcher, use_testrunner, visibility)

Bir Java arşivi ("jar dosyası") ve kuralla aynı ada sahip bir sarmalayıcı kabuk komut dosyası oluşturur. Sarmalayıcı kabuk komut dosyası, diğerlerinin yanı sıra ikili dosyanın bağlı olduğu her kitaplık için bir jar dosyası içeren bir sınıf yolu kullanır. Sarmalayıcı kabuk komut dosyası çalıştırıldığında, boş olmayan tüm JAVABIN ortam değişkenleri, Bazel'in --java_runtime_version işareti aracılığıyla belirtilen sürüme göre öncelik alır.

Sarmalayıcı komut dosyası, birkaç benzersiz işareti kabul eder. Sarmalayıcı tarafından kabul edilen yapılandırılabilir işaretlerin ve ortam değişkenlerinin listesi için //src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt bölümüne bakın.

Örtülü çıkış hedefleri

  • name.jar: İkili programın doğrudan bağımlılıklarına karşılık gelen sınıf dosyalarını ve diğer kaynakları içeren bir Java arşivi.
  • name-src.jar: Kaynakları ("source jar") içeren bir arşiv.
  • name_deploy.jar: Dağıtıma uygun bir Java arşivi (yalnızca açıkça talep edildiğinde oluşturulur).

    Kuralınız için <name>_deploy.jar hedefini derlediğinizde, java -jar komutuyla veya sarmalayıcı komut dosyasının --singlejar seçeneğiyle çalıştırılmasına olanak tanıyan bir manifest içeren kendi kendine yeten bir jar dosyası oluşturulur. java -jar, JVM işaretlerini ve yerel kitaplıkları yükleme seçeneklerini de ilettiği için sarmalayıcı komut dosyasının kullanılması tercih edilir.

    Yayınlama jar'ı, sınıf yolu için ikili dosyanın sarmalayıcı komut dosyasını baştan sona arayan bir sınıf yükleyici tarafından bulunacak tüm sınıfları içerir. Ayrıca bağımlılıklar için gereken yerel kitaplıkları da içerir. Bunlar, çalışma zamanında otomatik olarak JVM'ye yüklenir.

    Hedefiniz bir başlatıcı özelliği belirtiyorsa _deploy.jar normal bir JAR dosyası yerine yerel bir ikili dosya olur. Bu paket, başlatıcıyı ve kuralınızın tümünü statik bir ikili dosyaya bağlı olan yerel (C++) bağımlılıkları içerir. Gerçek jar dosyasının baytları bu yerel ikili programa eklenerek hem yürütülebilir hem de Java kodunu içeren tek bir ikili blob oluşturulur. Elde edilen jar dosyasını, herhangi bir yerel ikili dosyayı yürüttüğünüz gibi doğrudan yürütebilirsiniz.

  • name_deploy-src.jar: Hedefin geçişli olarak kapatılmasından toplanan kaynakları içeren bir arşiv. Bunlar, jar'larla eşleşen kaynak jar'ın olmadığı durumlar dışında deploy.jar içindeki sınıflarla eşleşir.

srcs içermeyen bir java_binary kuralında deps özelliğine izin verilmez. Bu tür bir kural için runtime_deps tarafından sağlanan bir main_class gerekir.

Aşağıdaki kod snippet'inde sık yapılan bir hata gösterilmektedir:

java_binary(
    name = "DontDoThis",
    srcs = [
        ...,
        "GeneratedJavaFile.java",  # a generated .java file
    ],
    deps = [":generating_rule",],  # rule that generates that file
)

Bunun yerine şunu yapın:

java_binary(
    name = "DoThisInstead",
    srcs = [
        ...,
        ":generating_rule",
    ],
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.


Uygulamanın ana giriş noktası olan (uzantı hariç) kaynak dosyanın adını kullanmanız önerilir. Örneğin, giriş noktanız Main.java ise adınız Main olabilir.
deps

Etiket listesi; varsayılan []

Hedefe bağlanacak diğer kitaplıkların listesi. deps ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.
srcs

Etiketler listesi; varsayılan değer []'dir.

Hedefi oluşturmak için işlenen kaynak dosyaların listesi. Bu özellik neredeyse her zaman gereklidir. İstisnalar için aşağıya bakın.

.java türündeki kaynak dosyalar derlenir. Oluşturulan .java dosyalarında genellikle dosyanın adı yerine, dosyayı oluşturan kuralın adını buraya koymanız önerilir. Bu, hem okunabilirliği artırmakla kalmaz hem de kuralı gelecekteki değişikliklere karşı daha dayanıklı hale getirir: Oluşturan kural gelecekte farklı dosyalar oluşturursa tek bir yeri düzeltmeniz gerekir: oluşturan kuralın outs bölümü. Oluşturma kuralını deps'te listelemeniz gerekmez çünkü bu işlem hiçbir şey yapmaz.

.srcjar türündeki kaynak dosyalar paketten çıkarılır ve derlenir. (Bu, bir genrule ile .java dosyası grubu oluşturmanız gerektiğinde kullanışlıdır.)

Kurallar: Kural (genellikle genrule veya filegroup), yukarıda listelenen dosyalardan herhangi birini oluşturuyorsa bu dosyalar, kaynak dosyalar için açıklandığı şekilde kullanılır.

Bu bağımsız değişken, bir main_class özelliğinin çalışma zamanı sınıf yolunda bir sınıf belirttiği veya runtime_deps bağımsız değişkenini belirttiğiniz durumlar dışında neredeyse her zaman gereklidir.

resources

Etiket listesi; varsayılan []

Java jar dosyasına dahil edilecek veri dosyalarının listesi.

Kaynaklar belirtilirse, derleme tarafından üretilen normal .class dosyalarıyla birlikte kavanozda paketlenir. Jar dosyasının içindeki kaynakların konumu, proje yapısına göre belirlenir. Bazel öncelikle Maven'in standart dizin düzenini (bir "src" dizini ve ardından bir "resources" alt dizini) arar. Bu bulunmazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar. Dolayısıyla, örneğin bir kaynak <workspace root>/x/java/y/java/z adresindeyse kaynağın yolu y/java/z olur. Bu buluşsal kural geçersiz kılınamaz ancak kaynak dosyaları için belirli bir alternatif dizini belirtmek amacıyla resource_strip_prefix özelliği kullanılabilir.

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

classpath_resources

Etiket listesi; varsayılan []

BAŞKA BİR YOL OLMADIĞINDAN BU SEÇENEĞİ KULLANMAYIN)

Java ağacının kökünde bulunması gereken kaynakların listesi. Bu özelliğin tek amacı, kaynaklarının sınıf yolu içinde tam olarak "myconfig.xml" olarak bulunmasını gerektiren üçüncü taraf kitaplıklarını desteklemektir. Ad alanı çakışması tehlikesi nedeniyle, yalnızca ikili dosyalarda izin verilir, kütüphanelerde izin verilmez.

create_executable

Boole; yapılandırılmamış; varsayılan değer True

Kullanımdan kaldırıldı, bunun yerine java_single_jar politikasını kullanın.
deploy_env

Etiket listesi; varsayılan []

Bu ikili programın dağıtım ortamını temsil eden diğer java_binary hedeflerinin listesi. Başka bir java_binary tarafından yüklenecek bir eklenti oluştururken bu özelliği ayarlayın.
Bu özelliğin ayarlanması, bu ikili programın çalışma zamanı sınıf yolundan (ve dağıtım jar'ından) ve bu ikili program ile deploy_env politikasında belirtilen hedefler arasında paylaşılan tüm bağımlılıkları hariç tutar.
deploy_manifest_lines

Dize listesi; varsayılan değer []'tir.

*_deploy.jar hedefi için oluşturulan META-INF/manifest.mf dosyasına eklenecek satırların listesi. Bu özelliğin içeriği, "Değişken yap" değişikliğine tabi değildir.
javacopts

Dize listesi; varsayılan değer []'tir.

Bu kitaplık için ek derleyici seçenekleri. "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir.

jvm_flags

Dize listesi; varsayılan değer []'tir.

Bu ikili dosyanın çalıştırılması için oluşturulan sarmalayıcı komut dosyasına yerleştirilecek işaretlerin listesi. $(location) ve "Değişken yap" değişikliği ile Bourne kabuk belirtkeleme'ye tabidir.

Java ikili programı için sarmalayıcı komut dosyası, bir CLASSPATH tanımı içerir (tüm bağımlı jar'ları bulmak için) ve doğru Java yorumlayıcısını çağırır. Sarmalayıcı komut dosyası tarafından oluşturulan komut satırı, ana sınıfın adını ve ardından bir "$@" içerir. Böylece sınıf adından sonra diğer bağımsız değişkenleri iletebilirsiniz. Bununla birlikte, JVM tarafından ayrıştırılması amaçlanan bağımsız değişkenler, komut satırında sınıf adından önce belirtilmelidir. jvm_flags içeriği, sınıf adı listelenmeden önce sarmalayıcı komut dosyasına eklenir.

Bu özelliğin *_deploy.jar çıkışları üzerinde etkisi olmadığını unutmayın.

launcher

Etiket; varsayılan değer None

JDK'da yer alan normal bin/java programı yerine Java programınızı çalıştırmak için kullanılacak bir ikili program belirtin. Hedef bir cc_binary olmalıdır. Java Invocation API'yi uygulayan tüm cc_binary, bu özelliğin değeri olarak belirtilebilir.

Varsayılan olarak, Bazel normal JDK başlatıcıyı (bin/Java veya java.exe) kullanır.

İlgili --java_launcher Bazel işareti yalnızca launcher özelliği belirtilmemiş olan java_binary ve java_test hedeflerini etkiler.

Yerel (C++, SWIG, JNI) bağımlılıklarınızın, JDK başlatıcıyı mı yoksa başka bir başlatıcıyı mı kullandığınıza bağlı olarak farklı şekilde oluşturulacağını unutmayın:

  • Normal JDK başlatıcıyı (varsayılan) kullanıyorsanız yerel bağımlılıklar {name}_nativedeps.so adlı paylaşılan bir kitaplık olarak oluşturulur. Burada {name}, bu java_binary kuralının name özelliğidir. Kullanılmayan kod, bu yapılandırmada bağlayıcı tarafından kaldırılmaz.
  • Başka bir başlatıcı kullanıyorsanız yerel (C++) bağımlılıkları {name}_nativedeps adlı bir ikili programa statik olarak bağlanır. Burada {name}, bu java_binary kuralının name özelliğidir. Bu durumda, bağlayıcı, kullanılmadığını düşündüğü kodları elde edilen ikili programdan kaldırır. Diğer bir deyişle, cc_library hedefi alwayslink = 1 değerini belirtmedikçe yalnızca JNI aracılığıyla erişilen herhangi bir C++ kodu bağlanmayabilir.

Varsayılan JDK başlatıcı dışında herhangi bir başlatıcı kullanılırken *_deploy.jar çıkışının biçimi değişir. Ayrıntılar için ana java_binary belgelerine bakın.

main_class

Dize; varsayılan değer ""'tir

Giriş noktası olarak kullanılacak main() yöntemine sahip sınıfın adı. Bu seçeneği kullanan kurallar için srcs=[...] listesi gerekmez. Böylece, bu özellikle bir veya daha fazla main() yöntemi içeren Java kitaplığından yürütülebilir bir dosya oluşturulabilir.

Bu özelliğin değeri bir kaynak dosya değil, sınıf adıdır. Sınıf, çalışma zamanında kullanılabilir olmalıdır: Bu kural tarafından (srcs kaynağından) derlenebilir veya doğrudan ya da geçişli bağımlılıklarla (runtime_deps veya deps aracılığıyla) sağlanabilir. Sınıf yoksa ikili program çalışma zamanında başarısız olur. Derleme zamanı kontrolü yapılmaz.

plugins

Etiket listesi; varsayılan []

Derleme zamanında çalışacak Java derleyicisi eklentileri. Bu özellikte belirtilen her java_plugin, bu kural oluşturulduğunda çalışır. Bir kitaplık, exported_plugins kullanan bağımlılıklardan da eklentileri devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın ortaya çıkan jar dosyasına dahil edilir.
resource_jars

Etiketler listesi; varsayılan değer []'dir.

Desteği sonlandırıldı: Bunun yerine java_import ve deps veyaworkspace_deps öğelerini kullanın.
resource_strip_prefix

Dize; varsayılan değer ""

Java kaynaklarından çıkarılacak yol ön eki.

Belirtilirse bu yol ön eki, resources özelliğindeki her dosyadan çıkarılır. Bu, kaynak dosyasının bu dizinde olmamasıyla ilgili bir hatadır. Belirtilmezse (varsayılan) kaynak dosyasının yolu, Java paketinin kaynak dosyalarıyla aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt adresindeki bir kaynak dosya foo/bar/a.txt adresinde bulunur.

runtime_deps

Etiketler listesi; varsayılan değer []'dir.

Son ikili program veya yalnızca çalışma zamanında test için kullanılacak kitaplıklar. Normal deps gibi bu komutlar da çalışma zamanı sınıf yolunda görünür ancak bunlardan farklı olarak derleme zamanı sınıf yolunda görünmez. Yalnızca çalışma zamanında ihtiyaç duyulan bağımlılar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps içinde görünen hedefleri yoksaymalıdır.
stamp

Tam sayı; varsayılan değer -1'tür

Derleme bilgilerinin ikili dosyaya kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile, derleme bilgilerini her zaman ikili programda damgalayın. İkili dosya ve ona bağlı tüm yayın sonrası işlemler için uzaktan önbelleğe alma işlemini potansiyel olarak sonlandırdığından bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu, iyi bir derleme sonucu önbelleğe alma sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi, --[no]stamp işareti tarafından kontrol edilir.

Damgalanmış ikili dosyalar, bağımlılıkları değişmediği sürece yeniden oluşturulmaz.

use_launcher

Boole; varsayılan değer True'tir

İkili programın özel bir başlatıcı kullanıp kullanmayacağı.

Bu özellik false (yanlış) değerine ayarlanırsa Başlatıcı özelliği ve ilgili --java_launcher işareti bu hedef için yoksayılır.

use_testrunner

Boole; varsayılan değer False'tir

Java programının ana giriş noktası olarak test çalıştırıcı (varsayılan olarak com.google.testing.junit.runner.BazelTestRunner) sınıfını kullanın ve test sınıfını test çalıştırıcıya bazel.test_suite sistem özelliğinin değeri olarak sağlayın. Bunu varsayılan davranışı (java_test kuralları için test çalıştırıcısı ile java_binary kurallarında kullanmamak) geçersiz kılmak için kullanabilirsiniz. Bunu yapmak istemeyeceksiniz. Bir kullanım, başka bir kural tarafından çağrılan AllTest kuralları içindir (örneğin, testleri çalıştırmadan önce bir veritabanı oluşturmak için). AllTest kuralının java_binary olarak tanımlanması gerekir ancak ana giriş noktası olarak test çalıştırıcıyı kullanmaya devam etmelidir. Test çalıştırıcı sınıfının adı, main_class özelliğiyle geçersiz kılınabilir.

java_import

Kural kaynağını göster
java_import(name, deps, data, compatible_with, constraints, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, proguard_specs, restricted_to, runtime_deps, srcjar, tags, target_compatible_with, testonly, visibility)

Bu kural, önceden derlenmiş .jar dosyalarının java_library ve java_binary kuralları için kitaplık olarak kullanılmasına olanak tanır.

Örnekler

    java_import(
        name = "maven_model",
        jars = [
            "maven_model/maven-aether-provider-3.2.3.jar",
            "maven_model/maven-model-3.2.3.jar",
            "maven_model/maven-model-builder-3.2.3.jar",
        ],
    )

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

Hedefe bağlanacak diğer kitaplıkların listesi. java_library.deps sayfasına göz atın.
constraints

Dize listesi; yapılandırılamaz; varsayılan değer []

Java kitaplığı olarak bu kurala uygulanan ekstra kısıtlamalar.
exports

Etiket listesi; varsayılan []

Bu kuralın kullanıcılarına sunulacak hedefler. java_library.exports'u inceleyin.
jars

Etiket listesi; zorunlu

Bu hedefe bağlı Java hedeflerine sağlanan JAR dosyalarının listesi.

Boole; varsayılan değer False

Bu kitaplığı yalnızca derleme için kullanın, çalışma zamanında kullanmayın. Kitaplık, yürütme sırasında çalışma zamanı ortamı tarafından sağlanacaksa kullanışlıdır. Bunun gibi kitaplıklara örnek olarak IDE eklentileri için IDE API'leri veya standart JDK üzerinde çalışan her şey için tools.jar verilebilir.
proguard_specs

Etiketler listesi; varsayılan değer []'dir.

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak spesifikasyonlar açıklanır. Belirtilenler, bu kitaplığa bağlı tüm android_binary hedeflerine eklenir. Buraya dahil edilen dosyalarda yalnızca idempotent kurallar (ör. -dontnote, -dontwarn, assumenosideeffects ve -keep ile başlayan kurallar) bulunmalıdır. Diğer seçenekler, tautolojik olmayan birleştirmelerden emin olmak için yalnızca android_binary'nın proguard_specs dosyasında görünebilir.
runtime_deps

Etiket listesi; varsayılan []

Son ikili program veya yalnızca çalışma zamanında test için kullanılacak kitaplıklar. java_library.runtime_deps bölümüne bakın.
srcjar

Etiket; varsayılan değer None

Derlenmiş JAR dosyalarının kaynak kodunu içeren bir JAR dosyası.

java_library

Kural kaynağını göster
java_library(name, deps, srcs, data, resources, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exported_plugins, exports, features, javacopts, licenses, neverlink, plugins, proguard_specs, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, tags, target_compatible_with, testonly, visibility)

Bu kural, kaynakları bir .jar dosyasında derler ve bağlar.

Örtülü çıkış hedefleri

  • libname.jar: Sınıf dosyalarını içeren bir Java arşivi.
  • libname-src.jar: Kaynakları içeren bir arşiv ("kaynak jar").

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiketler listesi; varsayılan değer []'dir.

Bu kitaplığa bağlanacak kitaplıkların listesi. Çoğu derleme kuralı tarafından tanımlanan tipik özellikler sayfasında deps ile ilgili genel yorumlara göz atın.

deps içinde listelenen java_library kuralları tarafından derlenen jar'lar, bu kuralın derleme zamanı sınıf yolunda yer alır. Ayrıca, deps, runtime_deps ve exports sınıflarının geçirgen kapatması, çalışma zamanındaki sınıf yolu üzerinde olacaktır.

Buna karşılık, data özelliğindeki hedefler çalıştırma dosyalarına dahil edilir ancak ne derleme zamanı ne de çalışma zamanı sınıf yolunda yer alır.

srcs

Etiket listesi; varsayılan []

Hedefi oluşturmak için işlenen kaynak dosyaların listesi. Bu özellik neredeyse her zaman gereklidir. İstisnalar için aşağıya bakın.

.java türündeki kaynak dosyalar derlenir. Oluşturulan .java dosyalarında genellikle dosyanın adı yerine, dosyayı oluşturan kuralın adını buraya koymanız önerilir. Bu, hem okunabilirliği artırmakla kalmaz hem de kuralı gelecekteki değişikliklere karşı daha dayanıklı hale getirir: Oluşturan kural gelecekte farklı dosyalar oluşturursa tek bir yeri düzeltmeniz gerekir: oluşturan kuralın outs bölümü. Oluşturma kuralını deps'te listelemeniz gerekmez çünkü bu işlem hiçbir şey yapmaz.

.srcjar türündeki kaynak dosyalar paketten çıkarılır ve derlenir. (Bu, bir genrule ile .java dosyası grubu oluşturmanız gerektiğinde kullanışlıdır.)

Kurallar: Kural (genellikle genrule veya filegroup) yukarıda listelenen dosyalardan herhangi birini oluşturursa bu dosyalar kaynak dosyalar için açıklandığı şekilde kullanılır.

Bu bağımsız değişken, bir main_class özelliğinin çalışma zamanı sınıf yolunda bir sınıf belirttiği veya runtime_deps bağımsız değişkenini belirttiğiniz durumlar dışında neredeyse her zaman gereklidir.

data

Etiketler listesi; varsayılan değer []'dir.

Çalışma zamanında bu kitaplığın ihtiyaç duyduğu dosyaların listesi. Çoğu derleme kuralı tarafından tanımlanan tipik özellikler sayfasında data ile ilgili genel yorumlara göz atın.

Bir java_library oluştururken Bazel bu dosyaları herhangi bir yere koymaz. data dosyaları oluşturulmuşsa Bazel bunları oluşturur. Bu java_library dosyalarına bağlı bir test oluştururken Bazel, data dosyalarını çalıştırma dosyalarına kopyalar veya bağlar.

resources

Etiketler listesi; varsayılan değer []'dir.

Java jar'a dahil edilecek veri dosyalarının listesi.

Kaynaklar belirtilirse, derleme tarafından üretilen normal .class dosyalarıyla birlikte kavanozda paketlenir. Jar dosyasının içindeki kaynakların konumu proje yapısına göre belirlenir. Bazel öncelikle Maven'in standart dizin düzenini (bir "src" dizini ve ardından bir "resources" alt dizini) arar. Bu bulunmazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar. Dolayısıyla, örneğin bir kaynak <workspace root>/x/java/y/java/z adresindeyse kaynağın yolu y/java/z olur. Bu buluşsal kural geçersiz kılınamaz ancak kaynak dosyaları için belirli bir alternatif dizini belirtmek amacıyla resource_strip_prefix özelliği kullanılabilir.

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

exported_plugins

Etiketler listesi; varsayılan değer []'dir.

Doğrudan bu kitaplığa bağımlı olan kitaplıklara aktarılacak java_plugin'lerin (ör. ek açıklama işleyiciler) listesi.

Belirtilen java_plugin listesi, doğrudan bu kitaplığa bağlı olan herhangi bir kitaplığa, sanki o kitaplık bu etiketleri plugins içinde açıkça bildirmiş gibi uygulanır.

exports

Etiket listesi; varsayılan []

Dışa aktarılan kitaplıklar.

Kurallar burada listelendiğinde, üst kurallar bu kurallara açıkça bağlıymış gibi üst kurallar tarafından kullanılabilir. Bu durum, normal (dışa aktarılmamış) deps için geçerli değildir.

Özet: X kuralı, aralarında deps kenarıyla başlayıp sıfır veya daha fazla exports kenarının devam ettiği bir bağımlılık yolu varsa Y'deki koda erişebilir. Bunu açıklamak için bazı örneklere göz atalım.

A'nın B'ye, B'nin ise C'ye bağlı olduğunu varsayın. Bu durumda C, A'nın geçişli bir bağımlılığıdır. Bu nedenle, C'nin kaynaklarını değiştirip A'yı yeniden oluşturmak her şeyi doğru şekilde yeniden oluşturur. Ancak A, C sınıfındaki sınıfları kullanamaz. Bunun için A'nın deps özelliğinde C'yi bildirmesi gerekir veya B, C'yi (B'nin) exports özelliğinde bildirerek A'nın (ve A'ya bağlı olabilecek her şeyin) işini kolaylaştırabilir.

Dışa aktarılan kitaplıkların kapatılması, tüm doğrudan üst kural için kullanılabilir. Biraz farklı bir örnek ele alalım: A, B'ye bağlıdır, B, C ve D'ye bağlıdır ve C'yi de dışa aktarır ancak D'yi dışa aktarmaz. Artık A, C'ye erişebilir ancak D'ye erişemez. Bu durumda, C ve D bazı kitaplıkları dışa aktardıysa, sırasıyla C' ve D'yi dışa aktardığında A yalnızca C'ye erişebilir, D'ye erişemez.

Önemli: Dışa aktarılan kurallar normal bir bağımlılık değildir. Önceki örneğe devam edersek B, C'yi dışa aktarır ve C'yi de kullanmak isterse bunu kendi deps içinde listelemesi gerekir.

javacopts

Dize listesi; varsayılan değer: []

Bu kitaplık için ek derleyici seçenekleri. "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ya iletilir.

Boole; varsayılan değer False'tir

Bu kitaplığın çalışma zamanında değil yalnızca derleme için kullanılıp kullanılmayacağı. Kitaplık, yürütme sırasında çalışma zamanı ortamı tarafından sağlanacaksa kullanışlıdır. Bu tür kitaplıklara örnek olarak IDE eklentileri için IDE API'leri veya standart bir JDK'de çalışan her şey için tools.jar verilebilir.

neverlink = 1, Java Dil Spesifikasyonu'nun izin verdiği şekilde (ör. String veya temel türlerin static final sabitleridir). Bu nedenle, tercih edilen kullanım alanı, çalışma zamanı kitaplığının derleme kitaplığıyla aynı olmasıdır.

Çalışma zamanı kitaplığı, derleme kitaplığından farklıysa yalnızca JLS'nin derleyicilerin satır içi olmasını engellediği (ve JLS'nin gelecekteki tüm sürümleri için geçerli olması gereken) yerlerde farklı olmasına dikkat etmelisiniz.

plugins

Etiketler listesi; varsayılan değer []'dir.

Derleme zamanında çalışacak Java derleyicisi eklentileri. Bu özellikte belirtilen her java_plugin, bu kural oluşturulduğunda çalışır. Bir kitaplık, exported_plugins kullanan bağımlılıklardan eklentiler de devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın ortaya çıkan jar dosyasına dahil edilir.
proguard_specs

Etiket listesi; varsayılan []

Proguard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak spesifikasyonlar açıklanır. Belirtilirse bu kitaplığa bağlı olarak herhangi bir android_binary hedefine eklenir. Buraya dahil edilen dosyaların yalnızca idempotent kuralları, yani -dontnote, -dontwarn, kindnosideeffects ve -keep ile başlayan kuralları olmalıdır. Diğer seçenekler, tautolojik olmayan birleştirmelerden emin olmak için yalnızca android_binary'nın proguard_specs dosyasında görünebilir.
resource_jars

Etiketler listesi; varsayılan değer []'dir.

Desteği sonlandırıldı: Bunun yerine java_import ve deps veya runtime_deps kullanın.
resource_strip_prefix

Dize; varsayılan değer ""

Java kaynaklarından çıkarılacak yol ön eki.

Belirtilen bu yol öneki, resources özelliğindeki her dosyadan kaldırılır. Bir kaynak dosyasının bu dizinin altında olmaması hatadır. Belirtilmemişse (varsayılan) kaynak dosyaların Java paketiyle aynı mantıka göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt konumundaki bir kaynak dosya foo/bar/a.txt konumunda bulunur.

runtime_deps

Etiketler listesi; varsayılan değer []'dir.

Yalnızca son ikili dosyada kullanılacak veya çalışma zamanında test edilecek kitaplıklar. Normal deps gibi, bunlar da çalışma zamanı sınıf yolu üzerinde görünür ancak bunların aksine derleme zamanı sınıf yolu üzerinde görünmez. Yalnızca çalışma zamanında ihtiyaç duyulan bağımlılar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps'te görünen hedefleri yoksamalıdır.

java_lite_proto_library

Kural kaynağını göster
java_lite_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

java_lite_proto_library, .proto dosyalarından Java kodu oluşturur.

deps, proto_library kurallarına yönlendirmelidir.

Örnek:

java_library(
    name = "lib",
    deps = [":foo"],
)

java_lite_proto_library(
    name = "foo",
    deps = [":bar"],
)

proto_library(
    name = "bar",
)

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

deps

Etiketler listesi; varsayılan değer []'dir.

Java kodu oluşturmak için kullanılacak proto_library kurallarının listesi.

java_proto_library

Kural kaynağını göster
java_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

java_proto_library, .proto dosyadan Java kodu oluşturur.

deps, proto_library kuralına işaret etmelidir.

Örnek:

java_library(
    name = "lib",
    deps = [":foo_java_proto"],
)

java_proto_library(
    name = "foo_java_proto",
    deps = [":foo_proto"],
)

proto_library(
    name = "foo_proto",
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

Java kodu oluşturulacak proto_library kurallarının listesi.

java_test

Kural kaynağını görüntüleme
java_test(name, deps, srcs, data, resources, args, classpath_resources, compatible_with, create_executable, deploy_manifest_lines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, launcher, licenses, local, main_class, plugins, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, use_testrunner, visibility)

java_test() kuralı bir Java testi derler. Test, test kodunuzun etrafındaki ikili bir sarmalayıcıdır. Ana sınıf derlenmek yerine test çalıştırıcısının ana yöntemi çağrılır.

Dolaylı çıkış hedefleri

  • name.jar: Bir Java arşivi.
  • name_deploy.jar: Dağıtıma uygun bir Java arşivi. (Yalnızca açıkça talep edildiğinde oluşturulur.) Daha fazla bilgi için java_binary tarafından oluşturulan name_deploy.jar çıktısının açıklamasına bakın.

java_binary() bağımsız değişkenleri bölümüne bakın. Bu kural, tüm test kurallarında ortak olan tüm özellikleri ("*_test") de destekler.

Örnekler

java_library(
    name = "tests",
    srcs = glob(["*.java"]),
    deps = [
        "//java/com/foo/base:testResources",
        "//java/com/foo/testing/util",
    ],
)

java_test(
    name = "AllTests",
    size = "small",
    runtime_deps = [
        ":tests",
        "//util/mysql",
    ],
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiketler listesi; varsayılan değer []'dir.

Hedefe bağlanacak diğer kitaplıkların listesi. deps ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.
srcs

Etiket listesi; varsayılan []

Hedefi oluşturmak için işlenen kaynak dosyaların listesi. Bu özellik neredeyse her zaman gereklidir; aşağıdaki istisnaları inceleyin.

.java türündeki kaynak dosyalar derlenir. Oluşturulan .java dosyalarında genellikle dosyanın adı yerine, dosyayı oluşturan kuralın adını buraya koymanız önerilir. Bu, hem okunabilirliği artırmakla kalmaz hem de kuralı gelecekteki değişikliklere karşı daha dayanıklı hale getirir: Oluşturan kural gelecekte farklı dosyalar oluşturursa tek bir yeri düzeltmeniz gerekir: oluşturan kuralın outs bölümü. Oluşturma kuralını deps'te listelemeniz gerekmez çünkü bu işlem hiçbir şey yapmaz.

.srcjar türündeki kaynak dosyalar paketten çıkarılır ve derlenir. (Bu, bir genrule ile .java dosyası grubu oluşturmanız gerektiğinde kullanışlıdır.)

Kurallar: Kural (genellikle genrule veya filegroup), yukarıda listelenen dosyalardan herhangi birini oluşturuyorsa bu dosyalar, kaynak dosyalar için açıklandığı şekilde kullanılır.

Bir main_class özelliği, çalışma zamanındaki sınıf yolu içinde bir sınıf belirtmediği veya runtime_deps bağımsız değişkenini belirtmediğiniz sürece bu bağımsız değişken neredeyse her zaman gereklidir.

resources

Etiketler listesi; varsayılan değer []'dir.

Java jar'a dahil edilecek veri dosyalarının listesi.

Kaynaklar belirtilirse, derleme tarafından üretilen normal .class dosyalarıyla birlikte kavanozda paketlenir. Jar dosyasının içindeki kaynakların konumu proje yapısına göre belirlenir. Bazel önce Maven'in standart dizin düzenini (ardından "kaynaklar" dizininin torunu) arar. Bu bulunamazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar. Dolayısıyla, örneğin bir kaynak <workspace root>/x/java/y/java/z adresindeyse kaynağın yolu y/java/z olur. Bu sezgisel kural geçersiz kılınamaz ancak resource_strip_prefix özelliği, kaynak dosyalar için belirli bir alternatif dizin belirtmek üzere kullanılabilir.

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

classpath_resources

Etiketler listesi; varsayılan değer []'dir.

BAŞKA BİR YOL OLMADIĞINDAN BU SEÇENEĞİ KULLANMAYIN)

Java ağacının kökünde bulunması gereken kaynakların listesi. Bu özelliğin tek amacı, kaynaklarının sınıf yolu içinde tam olarak "myconfig.xml" olarak bulunmasını gerektiren üçüncü taraf kitaplıklarını desteklemektir. Ad alanı çakışması tehlikesi nedeniyle, yalnızca ikili dosyalarda izin verilir, kütüphanelerde izin verilmez.

create_executable

Boole; yapılandırılamaz; varsayılan değer True'dir.

Desteği sonlandırıldı. Bunun yerine java_single_jar kullanın.
deploy_manifest_lines

Dize listesi; varsayılan değer []'tir.

*_deploy.jar hedefi için oluşturulan META-INF/manifest.mf dosyasına eklenecek satırların listesi. Bu özelliğin içeriği, "Değişken yap" değişikliğine tabi değildir.
javacopts

Dize listesi; varsayılan değer: []

Bu kitaplık için ek derleyici seçenekleri. "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ya iletilir.

jvm_flags

Dize listesi; varsayılan değer []'tir.

Bu ikili dosyanın çalıştırılması için oluşturulan sarmalayıcı komut dosyasına yerleştirilecek işaretlerin listesi. $(location) ve "Değişken oluştur" yerine koyma işlemine ve Bourne kabuğu jetonuna tabidir.

Java ikili programı için sarmalayıcı komut dosyası, bir CLASSPATH tanımı içerir (tüm bağımlı jar'ları bulmak için) ve doğru Java yorumlayıcısını çağırır. Sarmalayıcı komut dosyası tarafından oluşturulan komut satırı, ana sınıfın adını ve ardından bir "$@" içerir. Böylece sınıf adından sonra diğer bağımsız değişkenleri iletebilirsiniz. Bununla birlikte, JVM tarafından ayrıştırılması amaçlanan bağımsız değişkenler, komut satırında sınıf adından önce belirtilmelidir. jvm_flags içeriği, sınıf adı listelenmeden önce sarmalayıcı komut dosyasına eklenir.

Bu özelliğin *_deploy.jar çıkışları üzerinde etkisi olmadığını unutmayın.

launcher

Etiket; varsayılan değer None'dir.

JDK'ye dahil edilen normal bin/java programı yerine Java programınızı çalıştırmak için kullanılacak bir ikili dosya belirtin. Hedef bir cc_binary olmalıdır. Java Invocation API'yi uygulayan herhangi bir cc_binary, bu özellik için bir değer olarak belirtilebilir.

Varsayılan olarak, Bazel normal JDK başlatıcıyı (bin/Java veya java.exe) kullanır.

İlgili --java_launcher Bazel işareti yalnızca launcher özelliği belirtilmemiş olan java_binary ve java_test hedeflerini etkiler.

Yerel (C++, SWIG, JNI) bağımlılıklarınızın, JDK başlatıcıyı mı yoksa başka bir başlatıcıyı mı kullandığınıza bağlı olarak farklı şekilde oluşturulacağını unutmayın:

  • Normal JDK başlatıcıyı (varsayılan) kullanıyorsanız yerel bağımlılıklar {name}_nativedeps.so adlı paylaşılan bir kitaplık olarak oluşturulur. Burada {name}, bu java_binary kuralının name özelliğidir. Kullanılmayan kod, bu yapılandırmada bağlayıcı tarafından kaldırılmaz.
  • Başka bir başlatıcı kullanıyorsanız yerel (C++) bağımlılıkları {name}_nativedeps adlı bir ikili programa statik olarak bağlanır. Burada {name}, bu java_binary kuralının name özelliğidir. Bu durumda, bağlayıcı, kullanılmadığını düşündüğü kodları elde edilen ikili programdan kaldırır. Diğer bir deyişle, cc_library hedefi alwayslink = 1 değerini belirtmedikçe yalnızca JNI aracılığıyla erişilen herhangi bir C++ kodu bağlanmayabilir.

Varsayılan JDK başlatıcı dışında herhangi bir başlatıcı kullanılırken *_deploy.jar çıkışının biçimi değişir. Ayrıntılar için ana java_binary belgelerine bakın.

main_class

Dize; varsayılan değer ""

Giriş noktası olarak kullanılacak main() yöntemine sahip sınıfın adı. Bu seçeneği kullanan kurallar için srcs=[...] listesi gerekmez. Böylece, bu özellikle bir veya daha fazla main() yöntemi içeren Java kitaplığından yürütülebilir bir dosya oluşturulabilir.

Bu özelliğin değeri bir kaynak dosya değil, sınıf adıdır. Sınıf, çalışma zamanında kullanılabilir olmalıdır: Bu kural tarafından derlenebilir (srcs'ten) veya doğrudan ya da geçişli bağımlılıklarla sağlanabilir (runtime_deps veya deps aracılığıyla). Sınıf kullanılamıyorsa ikili kod çalışma zamanında başarısız olur; derleme zamanında kontrol yapılmaz.

plugins

Etiketler listesi; varsayılan değer []'dir.

Derleme zamanında çalışacak Java derleyici eklentileri. Bu özellikte belirtilen her java_plugin, bu kural oluşturulduğunda çalışır. Bir kitaplık, exported_plugins kullanan bağımlılıklardan da eklentileri devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın oluşturulan jar dosyasına dahil edilir.
resource_jars

Etiketler listesi; varsayılan değer []'dir.

Desteği sonlandırıldı: Bunun yerine java_import ve deps veya runtime_deps kullanın.
resource_strip_prefix

Dize; varsayılan değer ""

Java kaynaklarından çıkarılacak yol ön eki.

Belirtilen bu yol ön eki, resources özelliğindeki her dosyadan kaldırılır. Bir kaynak dosyasının bu dizinin altında olmaması hatalıdır. Belirtilmezse (varsayılan) kaynak dosyasının yolu, Java paketinin kaynak dosyalarıyla aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt konumundaki bir kaynak dosya foo/bar/a.txt konumunda bulunur.

runtime_deps

Etiketler listesi; varsayılan değer []'dir.

Son ikili program veya yalnızca çalışma zamanında test için kullanılacak kitaplıklar. Normal deps gibi, bunlar da çalışma zamanı sınıf yolu üzerinde görünür ancak bunların aksine derleme zamanı sınıf yolu üzerinde görünmez. Yalnızca çalışma zamanında gereken bağımlılıklar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps'te görünen hedefleri yoksamalıdır.
stamp

Tam sayı; varsayılan değer 0'tür

Derleme bilgilerinin ikili dosyaya kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile derleme bilgilerini her zaman ikili dosyaya damgalayın. Potansiyel olarak ikili program ve buna bağlı tüm aşağı akış işlemleri için uzaktan önbelleğe almayı sonlandıracağından bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu, iyi bir derleme sonucu önbelleğe alma sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi, --[no]stamp işareti tarafından kontrol edilir.

Bağımlılıkları değişmediği sürece damgalı ikili programlar yeniden oluşturulmaz.

test_class

Dize; varsayılan değer ""'tir

Test çalıştırıcısı tarafından yüklenecek Java sınıfı.

Varsayılan olarak, bu bağımsız değişken tanımlanmazsa eski mod kullanılır ve bunun yerine test bağımsız değişkenleri kullanılır. --nolegacy_bazel_java_test işaretini, ilk bağımsız değişkende yedek olmayacak şekilde ayarlayın.

Bu özellik, bu test tarafından çalıştırılacak Java sınıfının adını belirtir. Bunun ayarlanması nadiren gerekir. Bu bağımsız değişken atlanırsa hedefin name ve kaynak-köke göreli yolu kullanılarak tahmin edilir. Test bilinen bir kaynak kökü dışındaysa test_class ayarlanmazsa Bazel hata bildirir.

JUnit3 için test sınıfının junit.framework.TestCase alt sınıfı olması ya da junit.framework.Test (veya Test alt sınıfını) döndüren herkese açık bir statik suite() yöntemi olması gerekir. JUnit4 için, sınıfa org.junit.runner.RunWith ek açıklaması eklenmelidir.

Bu özellik, birkaç java_test kuralının aynı Test öğesini (TestCase, TestSuite, ...) paylaşmasına olanak tanır. Genellikle ek bilgiler aktarılır (ör.jvm_flags=['-Dkey=value'] aracılığıyla). Böylece, testlerin farklı bir alt kümesini çalıştırmak gibi her durumda davranış farklı olur. Bu özellik, javatests ağacı dışında Java testlerinin kullanılmasına da olanak tanır.

use_launcher

Boole; varsayılan değer True'tir

İkilinin özel bir başlatıcı kullanıp kullanmayacağı.

Bu özellik false (yanlış) değerine ayarlanırsa Başlatıcı özelliği ve ilgili --java_launcher işareti bu hedef için yoksayılır.

use_testrunner

Boole; varsayılan değer True

Java programının ana giriş noktası olarak test çalıştırıcı (varsayılan olarak com.google.testing.junit.runner.BazelTestRunner) sınıfını kullanın ve test sınıfını test çalıştırıcıya bazel.test_suite sistem özelliğinin değeri olarak sağlayın. Bu özelliği, java_test kuralları için test çalıştırıcıyı kullanma ve java_binary kuralları için kullanmama şeklindeki varsayılan davranışı geçersiz kılmak amacıyla kullanabilirsiniz. Bunu yapmak istemeyeceksiniz. Bir kullanım, başka bir kural tarafından çağrılan AllTest kuralları içindir (örneğin, testleri çalıştırmadan önce bir veritabanı oluşturmak için). AllTest kuralının java_binary olarak tanımlanması gerekir ancak ana giriş noktası olarak test çalıştırıcıyı kullanmaya devam etmelidir. Test çalıştırıcı sınıfının adı, main_class özelliğiyle geçersiz kılınabilir.

java_package_configuration

Kural kaynağını göster
java_package_configuration(name, data, compatible_with, deprecation, distribs, features, javacopts, licenses, packages, restricted_to, tags, target_compatible_with, testonly, visibility)

Bir paket grubuna uygulanacak yapılandırma. Yapılandırmalar java_toolchain.javacopts'lere eklenebilir.

Örnek:

java_package_configuration(
    name = "my_configuration",
    packages = [":my_packages"],
    javacopts = ["-Werror"],
)

package_group(
    name = "my_packages",
    packages = [
        "//com/my/project/...",
        "-//com/my/project/testing/...",
    ],
)

java_toolchain(
    ...,
    package_configuration = [
        ":my_configuration",
    ]
)

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

data

Etiket listesi; varsayılan []

Çalışma zamanında bu yapılandırma için gereken dosyaların listesi.
javacopts

Dize listesi; varsayılan değer []'tir.

Java derleyici işaretleri.
packages

Etiketler listesi; varsayılan değer []'dir.

Yapılandırmanın uygulanması gereken package_group grubu.

java_plugin

Kural kaynağını görüntüleme
java_plugin(name, deps, srcs, data, resources, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, generates_api, javacopts, licenses, neverlink, output_licenses, plugins, processor_class, proguard_specs, resource_jars, resource_strip_prefix, restricted_to, tags, target_compatible_with, testonly, visibility)

java_plugin, Bazel tarafından çalıştırılan Java derleyicisi için eklentileri tanımlar. Şu anda desteklenen tek eklenti türü ek açıklama işlemcileridir. java_library veya java_binary kuralları, plugins özelliği aracılığıyla eklentileri çalıştırabilir. java_library ayrıca exported_plugins kullanarak eklentileri doğrudan kendisine bağımlı olan kitaplıklara otomatik olarak aktarabilir.

Dolaylı çıkış hedefleri

  • libname.jar: Java arşivi.

Bağımsız değişkenler, processor_class bağımsız değişkeninin eklenmesi dışında java_library ile aynıdır.

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

Bu kitaplığa bağlanacak kitaplıkların listesi. deps ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.

deps içinde listelenen java_library kuralları tarafından derlenen jar'lar, bu kuralın derleme zamanı sınıf yolunda yer alır. Ayrıca, deps, runtime_deps ve exports sınıflarının geçirgen kapatması, çalışma zamanındaki sınıf yolu üzerinde olacaktır.

Buna karşılık, data özelliğindeki hedefler çalışma dosyalarına dahil edilir ancak derleme zamanındaki veya çalışma zamanındaki sınıf yolu listesine dahil edilmez.

srcs

Etiketler listesi; varsayılan değer []'dir.

Hedefi oluşturmak için işlenen kaynak dosyaların listesi. Bu özellik neredeyse her zaman gereklidir; aşağıdaki istisnaları inceleyin.

.java türündeki kaynak dosyalar derlenir. Oluşturulan .java dosyalarında genellikle dosyanın adı yerine, dosyayı oluşturan kuralın adını buraya koymanız önerilir. Bu, hem okunabilirliği artırmakla kalmaz hem de kuralı gelecekteki değişikliklere karşı daha dayanıklı hale getirir: Oluşturan kural gelecekte farklı dosyalar oluşturursa tek bir yeri düzeltmeniz gerekir: oluşturan kuralın outs bölümü. Oluşturma kuralını deps'te listelemeniz gerekmez çünkü bu işlem hiçbir şey yapmaz.

.srcjar türündeki kaynak dosyalar paketten çıkarılır ve derlenir. (Bu, bir genrule ile .java dosyası grubu oluşturmanız gerektiğinde kullanışlıdır.)

Kurallar: Kural (genellikle genrule veya filegroup), yukarıda listelenen dosyalardan herhangi birini oluşturuyorsa bu dosyalar, kaynak dosyalar için açıklandığı şekilde kullanılır.

Bu bağımsız değişken, bir main_class özelliğinin çalışma zamanı sınıf yolunda bir sınıf belirttiği veya runtime_deps bağımsız değişkenini belirttiğiniz durumlar dışında neredeyse her zaman gereklidir.

data

Etiket listesi; varsayılan []

Bu kitaplığın çalışma zamanında ihtiyaç duyduğu dosyaların listesi. Çoğu derleme kuralı tarafından tanımlanan tipik özellikler sayfasında data ile ilgili genel yorumlara göz atın.

Bir java_library oluştururken Bazel bu dosyaları herhangi bir yere koymaz. data dosyaları oluşturulmuşsa Bazel bunları oluşturur. Bu java_library öğesine dayalı bir test oluştururken Bazel, data dosyalarını çalıştırma dosyaları alanına kopyalar veya bağlar.

resources

Etiketler listesi; varsayılan değer []'dir.

Java jar'a dahil edilecek veri dosyalarının listesi.

Kaynaklar belirtilirse derleme işlemiyle oluşturulan normal .class dosyalarıyla birlikte jar dosyasına dahil edilir. Jar dosyasının içindeki kaynakların konumu, proje yapısına göre belirlenir. Bazel önce Maven'in standart dizin düzenini (ardından "kaynaklar" dizininin torunu) arar. Bu bulunamazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar. Dolayısıyla, örneğin bir kaynak <workspace root>/x/java/y/java/z adresindeyse kaynağın yolu y/java/z olur. Bu buluşsal kural geçersiz kılınamaz ancak kaynak dosyaları için belirli bir alternatif dizini belirtmek amacıyla resource_strip_prefix özelliği kullanılabilir.

Kaynaklar kaynak dosyalar veya oluşturulan dosyalar olabilir.

generates_api

Boole; varsayılan değer False'tir

Bu özellik, API kodu oluşturan ek açıklama işlemcilerini işaretler.

Bir kural API oluşturan bir ek açıklama işleyici kullanıyorsa buna bağlı diğer kurallar, oluşturulan koda yalnızca derleme işlemleri, oluşturan kuraldan sonra planlanmışsa atıfta bulunabilir. Bu özellik, --java_header_compilation etkinleştirildiğinde Bazel'a planlama kısıtlamaları kullanma talimatı verir.

UYARI: Bu özellik derleme performansını etkiler. Özelliği yalnızca gerektiğinde kullanın.

javacopts

Dize listesi; varsayılan değer: []

Bu kitaplık için ek derleyici seçenekleri. "Değişken oluşturma" değişikliğine ve Bourne kabuk belirtkelemeye tabidir.

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'a iletilir.

Boole; varsayılan değer False'tir

Bu kitaplığın çalışma zamanında değil yalnızca derleme için kullanılıp kullanılmayacağı. Kitaplık, yürütme sırasında çalışma zamanı ortamı tarafından sağlanacaksa kullanışlıdır. Bu tür kitaplıklara örnek olarak IDE eklentileri için IDE API'leri veya standart bir JDK'de çalışan her şey için tools.jar verilebilir.

neverlink = 1, Java Dil Spesifikasyonu'nun izin verdiği şekilde (ör. String veya temel türlerin static final sabitleridir). Bu nedenle, tercih edilen kullanım alanı, çalışma zamanı kitaplığının derleme kitaplığıyla aynı olmasıdır.

Çalışma zamanı kitaplığı, derleme kitaplığından farklıysa yalnızca JLS'nin derleyicilerin satır içi olmasını engellediği (ve JLS'nin gelecekteki tüm sürümleri için geçerli olması gereken) yerlerde farklı olmasına dikkat etmelisiniz.

output_licenses

Lisans türü; varsayılan değer: ["none"]

common attributes adresine göz atın.
plugins

Etiketler listesi; varsayılan değer []'dir.

Derleme zamanında çalışacak Java derleyicisi eklentileri. Bu özellikte belirtilen her java_plugin, bu kural derlendiğinde çalıştırılır. Bir kitaplık, exported_plugins kullanan bağımlılıklardan eklentiler de devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın oluşturulan jar dosyasına dahil edilir.
processor_class

Dize; varsayılan değer ""'tir

İşlemci sınıfı, Java derleyicinin ek açıklama işlemcisine giriş noktası olarak kullanması gereken sınıfın tam nitelikli türüdür. Belirtilmezse bu kural Java derleyicinin ek açıklama işlemesine bir ek açıklama işlemcisi ile katkıda bulunmaz ancak çalışma zamanı sınıf yolu, derleyicinin ek açıklama işlemci yoluna dahil edilir. (Bunun temel amacı, Java.util.ServiceLoader kullanılarak ek açıklama işlemci yolundan yüklenen Error Prone eklentilerinin kullanımıdır.)
proguard_specs

Etiketler listesi; varsayılan değer []'dir.

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Bunlar, Proguard tarafından kullanılacak özellik grubunu açıklar. Belirtilirse bu kitaplığa bağlı olarak herhangi bir android_binary hedefine eklenir. Buraya dahil edilen dosyaların yalnızca idempotent kuralları, yani -dontnote, -dontwarn, kindnosideeffects ve -keep ile başlayan kuralları olmalıdır. Diğer seçenekler, tautolojik olmayan birleştirmelerden emin olmak için yalnızca android_binary'nın proguard_specs dosyasında görünebilir.
resource_jars

Etiketler listesi; varsayılan değer []'dir.

Desteği sonlandırıldı: Bunun yerine java_import ve deps veya runtime_deps kullanın.
resource_strip_prefix

Dize; varsayılan değer ""

Java kaynaklarından çıkarılacak yol ön eki.

Belirtilirse bu yol ön eki, resources özelliğindeki her dosyadan çıkarılır. Bu, kaynak dosyasının bu dizinde olmamasıyla ilgili bir hatadır. Belirtilmemişse (varsayılan) kaynak dosyaların Java paketiyle aynı mantıka göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt konumundaki bir kaynak dosya foo/bar/a.txt konumunda bulunur.

java_runtime

Kural kaynağını görüntüleme
java_runtime(name, srcs, compatible_with, default_cds, deprecation, distribs, features, hermetic_srcs, java, java_home, lib_ct_sym, lib_modules, licenses, restricted_to, tags, target_compatible_with, testonly, version, visibility)

Java çalışma zamanının yapılandırmasını belirtir.

Örnek:

java_runtime(
    name = "jdk-9-ea+153",
    srcs = glob(["jdk9-ea+153/**"]),
    java_home = "jdk9-ea+153",
)

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

srcs

Etiketler listesi; varsayılan değer []'dir.

Çalışma zamanındaki tüm dosyalar.
default_cds

Etiket; varsayılan değer None

Hermetik java_runtime için varsayılan CDS arşivi. Hermetik, bir java_binary hedefi için etkinleştirildiğinde ve hedef, classlist özelliğini belirterek kendi CDS arşivini sağlamazsa java_runtime varsayılan CDS, hermetik dağıtım JAR'de paketlenir.
hermetic_srcs

Etiketler listesi; varsayılan değer []'dir.

Hermetik dağıtımlar için çalışma zamanında gerekli olan dosyalar.
java

Etiket; varsayılan değer None'dir.

Java yürütülebilir dosyasının yolu.
java_home

Dize; varsayılan değer ""

Çalışma zamanının kök yolu. "Make" değişkeni yerine geçmeye tabidir. Bu yol mutlak ise kural, iyi bilinen bir yola sahip hermetik olmayan bir Java çalışma zamanını belirtir. Bu durumda, srcs ve java özellikleri boş olmalıdır.
lib_ct_sym

Etiket; varsayılan değer None

--release ile derleme için gereken lib/ct.sym dosyası. Belirtilmemişse ve srcs içinde yolu /lib/ct.sym ile biten tam olarak bir dosya varsa bu dosya kullanılır.
lib_modules

Etiket; varsayılan değer None

Hermetik dağıtımlar için gerekli olan lib/modules dosyası.
version

Tam sayı; varsayılan değer 0'tür

Java çalışma zamanının özellik sürümü. Yani Runtime.version().feature() tarafından döndürülen tam sayı.

java_toolchain

Kural kaynağını göster
java_toolchain(name, android_lint_data, android_lint_jvm_opts, android_lint_opts, android_lint_package_configuration, android_lint_runner, bootclasspath, compatible_with, deprecation, deps_checker, distribs, features, forcibly_disable_header_compilation, genclass, header_compiler, header_compiler_direct, ijar, jacocorunner, java_runtime, javabuilder, javabuilder_data, javabuilder_jvm_opts, javac_supports_multiplex_workers, javac_supports_worker_multiplex_sandboxing, javac_supports_workers, javacopts, jvm_opts, licenses, oneversion, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, proguard_allowlister, resourcejar, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, tools, turbine_data, turbine_jvm_opts, visibility, xlint)

Java derleyici yapılandırmasını belirtir. Kullanılacak araç zinciri, --java_toolchain bağımsız değişkeni aracılığıyla değiştirilebilir. Java derleyicinizi ayarlamak istemiyorsanız genellikle bu tür kurallar yazmamalısınız.

Örnekler

Basit bir örnek şöyle olabilir:

java_toolchain(
    name = "toolchain",
    source_version = "7",
    target_version = "7",
    bootclasspath = ["//tools/jdk:bootclasspath"],
    xlint = [ "classfile", "divzero", "empty", "options", "path" ],
    javacopts = [ "-g" ],
    javabuilder = ":JavaBuilder_deploy.jar",
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

android_lint_data

Etiketler listesi; varsayılan değer []'dir.

android_lint_jvm_opts içinde etiket genişletmesi için kullanılabilen araçların etiketleri.
android_lint_jvm_opts

Dize listesi; varsayılan değer []'tir.

Android Lint çağrılırken JVM için bağımsız değişkenlerin listesi.
android_lint_opts

Dize listesi; varsayılan değer: []

Android Lint bağımsız değişkenlerinin listesi.
android_lint_package_configuration

Etiket listesi; varsayılan []

Belirtilen paket gruplarına uygulanması gereken Android Lint yapılandırması.
android_lint_runner

Etiket; varsayılan değer None

Varsa Android Lint çalıştırıcısının etiketi.
bootclasspath

Etiket listesi; varsayılan []

Java hedef önyükleme sınıf yolu girişleri. javac'ın -bootclasspath işaretine karşılık gelir.
deps_checker

Etiketler listesi; varsayılan değer []'dir.

ImportDepsChecker dağıtım jar'ının etiketi.
forcibly_disable_header_compilation

Boole; varsayılan değer False'tir

JDK 7 Bazel gibi, bu özelliği desteklemeyen platformlarda başlık derlemesini devre dışı bırakmak için --java_header_compilation değerini geçersiz kılar.
genclass

Etiketler listesi; zorunlu

GenClass dağıtım jar'ının etiketi.
header_compiler

Etiketler listesi; varsayılan değer []'dir.

Başlıktan teklif almanın derleyicisinin etiketi. --java_header_compilation etkinleştirilirse gereklidir.
header_compiler_direct

Etiketler listesi; varsayılan değer []'dir.

API oluşturan ek açıklama işleyicileri içermeyen doğrudan sınıf yolu işlemleri için kullanılacak başlık derleyicinin isteğe bağlı etiketi.

Bu araç, ek açıklama işlemeyi desteklemez.

ijar

Etiketler listesi; zorunlu

ijar yürütülebilir dosyasının etiketi.
jacocorunner

Etiket; varsayılan değer None

JacocoCoverageRunner dağıtım jar'ının etiketi.
java_runtime

Etiket; zorunlu

Bu araç setiyle kullanılacak java_runtime. Yürütme yapılandırmasında varsayılan olarak java_runtime değerine ayarlanır.
javabuilder

Etiket listesi; zorunlu

JavaBuilder dağıtım jar'ının etiketi.
javabuilder_data

Etiketler listesi; varsayılan değer []'dir.

javabuilder_jvm_opts adresinde etiket genişletme için kullanılabilecek verilerin etiketleri.
javabuilder_jvm_opts

Dize listesi; varsayılan değer: []

JavaBuilder çağrılırken JVM için bağımsız değişkenlerin listesi.
javac_supports_multiplex_workers

Boole; varsayılan değer True

JavaBuilder Multiplex kalıcı çalışanı olarak çalıştırmayı destekliyorsa doğru, desteklenmiyorsa false'tur.
javac_supports_worker_multiplex_sandboxing

Boole; varsayılan değer False

JavaBuilder Multiplex korumalı alan kullanımını destekliyorsa doğru değerini, desteklemiyorsa false (yanlış) değerini alır.
javac_supports_workers

Boole; varsayılan değer True

JavaBuilder kalıcı çalışan olarak çalıştırmayı destekliyorsa doğru, desteklenmiyorsa false (yanlış) değerini alır.
javacopts

Dize listesi; varsayılan değer []'tir.

Java derleyicisi için ekstra bağımsız değişkenlerin listesi. Olası Java derleyici işaretlerinin kapsamlı listesi için lütfen Java derleyici belgelerine bakın.
jvm_opts

Dize listesi; varsayılan değer []'tir.

Java derleyicisi çağrılırken JVM için bağımsız değişkenlerin listesi. Bu seçeneğe yönelik olası işaretlerin kapsamlı listesi için lütfen Java sanal makine belgelerine bakın.
oneversion

Etiket; varsayılan değer None

Tek sürümlü yaptırım ikili programının etiketi.
oneversion_allowlist_for_tests

Etiket; varsayılan değer None

Testler için tek sürüm izin verilenler listesinin etiketi.
oneversion_whitelist

Etiket; varsayılan değer None'dir.

Tek sürümlü beyaz listenin etiketi.
package_configuration

Etiket listesi; varsayılan []

Belirtilen paket gruplarına uygulanması gereken yapılandırma.
proguard_allowlister

Etiket; varsayılan değer "@bazel_tools//tools/jdk:proguard_whitelister"

Proguard izin verilenler listesi ekleyenin etiketi.
resourcejar

Etiketler listesi; varsayılan değer []'dir.

Yürütülebilir kaynak jar oluşturucunun etiketi.
singlejar

Etiketler listesi; zorunlu

SingleJar dağıtım jar'ının etiketi.
source_version

Dize; varsayılan değer ""'tir

Java kaynak sürümü (ör. "6" veya "7"). Java kaynak kodunda hangi kod yapılarına izin verileceğini belirtir.
target_version

Dize; varsayılan değer ""'tir

Java hedef sürümü (ör. "6" veya "7"). Sınıfın hangi Java çalışma zamanı için derleneceğini belirtir.
timezone_data

Etiket; varsayılan değer None

Saat dilimi verilerini içeren bir kaynak jar'ının etiketi. Ayarlanırsa saat dilimi verileri tüm java_binary kurallarının dolaylı çalışma zamanı bağımlılığı olarak eklenir.
tools

Etiketler listesi; varsayılan değer []'dir.

jvm_opts öğesinde etiket genişletme için kullanılabilecek araçların etiketleri.
turbine_data

Etiket listesi; varsayılan []

turbine_jvm_opts parametresinde etiket genişletmesi için kullanılabilen verilerin etiketleri.
turbine_jvm_opts

Dize listesi; varsayılan değer []'tir.

Türbin çağrılırken JVM için bağımsız değişkenlerin listesi.
xlint

Dize listesi; varsayılan değer: []

Varsayılan listeye eklenecek veya varsayılan listeden kaldırılacak uyarıların listesi. Öne çıkarmak için başına tire işareti koyar. Daha fazla bilgi için lütfen -Xlint seçenekleriyle ilgili Javac belgelerine bakın.