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)

Java arşivi ("jar dosyası") ve kuralın adıyla aynı olan bir sarmalayıcı kabuk komut dosyası oluşturur. Sarmalayıcı kabuk komut dosyası, diğer şeylerin yanı sıra ikilinin 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ılırken, Bazel'in --java_runtime_version işaretiyle belirtilen sürüm yerine boş olmayan JAVABIN ortam değişkenleri kullanılır.

Sarmalayıcı komut dosyası, birkaç benzersiz işaret 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: İkilinin 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 istenirse oluşturulur).

    Kuralınız için <name>_deploy.jar hedefinin oluşturulması java -jar komutuyla veya sarmalama komut dosyasının --singlejar seçeneğiyle çalıştırılmasına olanak tanıyan bir manifest içeren bağımsız bir JAR dosyası oluşturur. Sarmalayıcı komut dosyasını kullanmak, java -jar'ya tercih edilir. Çünkü bu komut dosyası, JVM işaretlerini ve yerel kitaplıkları yükleme seçeneklerini de iletir.

    Dağıtım JAR'ı, sınıf yolunu ikilinin sarmalayıcı komut dosyasından baştan sona arayan bir sınıf yükleyici tarafından bulunabilecek 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 JVM'ye otomatik olarak yüklenir.

    Hedefiniz bir başlatıcı özelliği belirtiyorsa _deploy.jar, normal bir JAR dosyası yerine yerel bir ikili dosya olur. Bu, başlatıcıyı ve kuralınızın yerel (C++) bağımlılıklarını içerir. Tüm bağımlılıklar statik bir ikiliye bağlanır. 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. Oluşan jar dosyasını, yerel ikili dosyaları çalıştırdığınız gibi doğrudan çalıştırabilirsiniz.

  • name_deploy-src.jar: Hedefin geçişli kapanışından toplanan kaynakları içeren bir arşiv. Bunlar, kavanozların eşleşen kaynak kavanozunun olmadığı durumlar hariç olmak üzere, deploy.jar içindeki sınıflarla eşleşir.

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

Aşağıdaki kod snippet'inde yaygın 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 şunları 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 kaynak dosyanın adını (uzantı hariç) kullanmak iyi bir uygulamadır. Örneğin, giriş noktanızın adı Main.java ise adınız Main olabilir.
deps

Etiket 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 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 söz konusu olduğunda, dosyanın adını değil, oluşturma kuralının adını buraya girmeniz önerilir. Bu sayede yalnızca okunabilirlik iyileştirilmekle kalmaz, kural gelecekteki değişikliklere karşı daha dirençli hale gelir: Üretim kuralı gelecekte farklı dosyalar üretirse yalnızca tek bir yeri düzeltmeniz gerekir: üretim kuralının outs kısmı. Üretim kuralı, işlem yapmadığı için deps içinde listelenmemelidir.

.srcjar türündeki kaynak dosyalar açılır ve derlenir. (Bu, genrule ile bir dizi .java dosyası 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çıklanan şekilde kullanılır.

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

resources

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

Bir Java jar'ına dahil edilecek veri dosyalarının listesi.

Kaynaklar belirtilmişse derleme tarafından oluşturulan normal .class dosyalarıyla birlikte JAR'a paketlenir. Jar dosyasındaki kaynakların konumu proje yapısı tarafından belirlenir. Bazel önce Maven'in standart dizin düzenini (bir "src" dizini ve ardından bir "resources" dizini torunu) arar. Bu bulunamazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar (örneğin, bir kaynak <workspace root>/x/java/y/java/z konumundaysa kaynağın yolu y/java/z olur). Bu sezgisel yöntem geçersiz kılınamaz ancak kaynak dosyaları için belirli bir alternatif dizin belirtmek üzere resource_strip_prefix özelliği kullanılabilir.

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

classpath_resources

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

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

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

create_executable

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

Bu politikanın desteği sonlandırıldı. Lütfen bunun yerine java_single_jar politikasını kullanın.
deploy_env

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

Bu ikili için 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ği ayarlamak, bu ikili dosyanın çalışma zamanı sınıf yolundaki (ve dağıtım JAR'ındaki) tüm bağımlılıkları hariç tutar. Bu bağımlılıklar, bu ikili dosya ile deploy_env içinde belirtilen hedefler arasında paylaşılır.
deploy_manifest_lines

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

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

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

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

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

jvm_flags

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

Bu ikiliyi çalıştırmak için oluşturulan sarmalayıcı komut dosyasına yerleştirilecek işaretlerin listesi. $(location) ve "Make variable" yerine koyma ve Bourne shell belirteçleştirme işlemlerine tabidir.

Bir Java ikilisi için sarmalayıcı komut dosyası, 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 "$@" karakterini içerir. Böylece, sınıf adından sonra diğer bağımsız değişkenleri iletebilirsiniz. Ancak JVM tarafından ayrıştırılması amaçlanan bağımsız değişkenler, komut satırındaki 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 çıktıları üzerinde hiçbir etkisi olmadığını unutmayın.

launcher

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

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

Bazel, varsayılan olarak 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 statik olarak {name}_nativedeps adlı bir ikiliye bağlanır. Burada {name}, bu java_binary kuralının name özelliğidir. Bu durumda, bağlayıcı, sonuçtaki ikiliden kullanılmadığını düşündüğü tüm kodları kaldırır. Bu nedenle, yalnızca JNI üzerinden erişilen C++ kodu, söz konusu cc_library hedefi alwayslink = 1 belirtmediği sürece bağlanmayabilir.

Varsayılan JDK başlatıcısı dışında bir başlatıcı kullanıldığında *_deploy.jar çıktısı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önteminin bulunduğu sınıfın adı. Bir kural bu seçeneği kullanıyorsa srcs=[...] listesine ihtiyacı yoktur. Bu nedenle, bu özellik sayesinde, bir veya daha fazla main() yöntemi içeren bir Java kitaplığından yürütülebilir bir dosya oluşturulabilir.

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

plugins

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

Derleme sırasında çalıştırılacak Java derleyici eklentileri. Bu özellik içinde belirtilen her java_plugin, bu kural her oluşturulduğunda çalıştırılır. Kitaplıklar, exported_plugins kullanan bağımlılıklardan da eklentileri devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın ortaya çıkan JAR'ına dahil edilir.
resource_jars

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

Kullanımdan kaldı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 öneki, resources özelliğindeki her dosyadan kaldırılır. Kaynak dosyasının bu dizinde olmaması hatadır. Belirtilmezse (varsayılan), kaynak dosyanın yolu, kaynak dosyaların Java paketiyle aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt konumundaki bir kaynak dosya, foo/bar/a.txt konumunda yer alır.

runtime_deps

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

Yalnızca son ikili dosyada veya çalışma zamanında test için kullanılabilir hale getirilecek kitaplıklar. Normal deps gibi bunlar 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 gereken bağımlılıklar 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

Derleme bilgilerinin ikili dosyaya kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: Derleme bilgileri, --nostamp derlemelerinde bile her zaman ikiliye damgalanır. Bu ayardan kaçınılmalıdır. Bu ayar, ikili dosya ve buna bağlı tüm aşağı akış işlemleri için uzaktan önbelleğe almayı devre dışı bırakabilir.
  • 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şaretiyle kontrol edilir.

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

use_launcher

Boole değeri; varsayılan değer True'dır.

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

Bu özellik yanlış olarak ayarlanırsa bu hedef için launcher özelliği ve ilgili --java_launcher işareti yoksayılır.

use_testrunner

Boole değeri; varsayılan değer False'dır.

Test çalıştırıcı (varsayılan olarak com.google.testing.junit.runner.BazelTestRunner) sınıfını Java programı için ana giriş noktası olarak kullanın ve test sınıfını bazel.test_suite sistem özelliğinin değeri olarak test çalıştırıcıya sağlayın. Bu ayarı, java_test kuralları için test çalıştırıcıyı kullanmak ve java_binary kuralları için kullanmamak olan varsayılan davranışı geçersiz kılmak için kullanabilirsiniz. Bu işlemi yapmanız pek olası değildir. Bir kullanım alanı, AllTest başka bir kural tarafından çağrılan kurallar içindir (örneğin, testleri çalıştırmadan önce bir veritabanı oluşturmak için). AllTest kuralı java_binary olarak bildirilmelidir 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örüntüleme
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 izin verir.

Ö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; zorunlu

Bu hedef için benzersiz bir ad.

deps

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

Hedefe bağlanacak diğer kitaplıkların listesi. java_library.deps konusuna bakın.
constraints

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

Bu kurala Java kitaplığı olarak uygulanan ek kısıtlamalar.
exports

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

Bu kuralın kullanıcılarına sunulacak hedefler. java_library.exports konusuna bakın.
jars

Etiketlerin listesi; zorunlu

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

Boole değeri; varsayılan değer False'dır.

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 bir JDK'da çalışan her şey için tools.jar verilebilir.
proguard_specs

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

Proguard spesifikasyonu olarak kullanılacak dosyalar. Bu dosyalar, ProGuard tarafından kullanılacak özellikler grubunu tanımlar. Belirtilmişse bu kitaplığa bağlı olarak herhangi bir android_binary hedefine eklenirler. Burada yer alan dosyalar yalnızca idempotent kurallar içermelidir. Bu kurallar şunlardır: -dontnote, -dontwarn, assumenosideeffects ve -keep ile başlayan kurallar. Diğer seçenekler, çelişkili olmayan birleştirme işlemleri için yalnızca android_binary'nın proguard_specs dosyasında görünebilir.
runtime_deps

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

Yalnızca son ikili dosyada veya çalışma zamanında test için kullanılabilir hale getirilecek kitaplıklar. java_library.runtime_deps bölümüne bakın.
srcjar

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

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

java_library

Kural kaynağını görüntüleme
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ı derleyip .jar dosyasına bağlar.

Örtülü çıkış hedefleri

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

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

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

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 oluşturulan JAR'lar, bu kuralın derleme zamanı sınıf yolunda yer alır. Ayrıca, deps, runtime_deps ve exports öğelerinin geçişli kapanımı, çalışma zamanı sınıf yolunda olacaktır.

Buna karşılık, data özelliğindeki hedefler runfiles'a dahil edilir ancak derleme zamanı veya çalışma zamanı sınıf yoluna dahil edilmez.

srcs

Etiket 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 söz konusu olduğunda, dosyanın adını değil, oluşturma kuralının adını buraya girmeniz önerilir. Bu sayede yalnızca okunabilirlik iyileştirilmekle kalmaz, kural gelecekteki değişikliklere karşı daha dirençli hale gelir: Üretim kuralı gelecekte farklı dosyalar üretirse yalnızca tek bir yeri düzeltmeniz gerekir: üretim kuralının outs kısmı. Üretim kuralı, işlem yapmadığı için deps içinde listelenmemelidir.

.srcjar türündeki kaynak dosyalar açılır ve derlenir. (Bu, genrule ile bir dizi .java dosyası 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çıklanan şekilde kullanılır.

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

data

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

Bu kitaplığın çalışma zamanında ihtiyaç duyduğu dosyaların listesi. data ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.

Bazel, java_library oluştururken bu dosyaları herhangi bir yere yerleştirmez. data dosyaları oluşturulmuş dosyalarsa Bazel bunları oluşturur. Bu java_library öğesine bağlı bir test oluştururken Bazel, data dosyalarını runfiles alanına kopyalar veya bağlar.

resources

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

Bir Java jar'ına dahil edilecek veri dosyalarının listesi.

Kaynaklar belirtilmişse derleme tarafından oluşturulan normal .class dosyalarıyla birlikte JAR'a paketlenir. Jar dosyasındaki kaynakların konumu proje yapısı tarafından belirlenir. Bazel önce Maven'in standart dizin düzenini (bir "src" dizini ve ardından bir "resources" dizini torunu) arar. Bu bulunamazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar (örneğin, bir kaynak <workspace root>/x/java/y/java/z konumundaysa kaynağın yolu y/java/z olur). Bu sezgisel yöntem geçersiz kılınamaz ancak kaynak dosyaları için belirli bir alternatif dizin belirtmek üzere resource_strip_prefix özelliği kullanılabilir.

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

exported_plugins

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

Bu kitaplığa doğrudan bağımlı kitaplıklara aktarılacak java_plugin listesi (ör. ek açıklama işlemcileri).

Belirtilen java_plugin listesi, bu kitaplığa doğrudan bağımlı olan tüm kitaplıklara, bu kitaplıklar plugins içinde bu etiketleri açıkça tanımlamış gibi uygulanır.

exports

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

Dışa aktarılan kitaplıklar.

Burada listelenen kurallar, üst kurallar tarafından açıkça kullanılıyormuş gibi üst kurallarda kullanılabilir. Bu durum, normal (dışa aktarılmamış) deps için geçerli değildir.

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

A'nın B'ye ve B'nin C'ye bağlı olduğunu varsayalım. Bu durumda, C, A'nın geçişli bağımlılığıdır. Bu nedenle, C'nin kaynaklarını değiştirmek ve A'yı yeniden oluşturmak her şeyi doğru şekilde yeniden oluşturur. Ancak A, C'deki sınıfları kullanamaz. Buna izin vermek için A'nın deps içinde C'yi bildirmesi veya B'nin exports özelliğinde C'yi bildirerek A'nın (ve A'ya bağlı olabilecek her şeyin) işini kolaylaştırması gerekir.

Dışa aktarılan kitaplıkların kapatılması, tüm doğrudan üst kurallar 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 dışa aktarır ancak D'yi dışa aktarmaz. Artık A, C'ye erişebilir ancak D'ye erişemez. Şimdi, C ve D bazı kitaplıkları (sırasıyla C' ve D') dışa aktardıysa A yalnızca C'ye erişebilir ancak D'ye erişemez.

Önemli: Dışa aktarılan bir kural normal bir bağımlılık değildir. Önceki örnekten devam edersek B, C'yi dışa aktarıyor ve C'yi de kullanmak istiyorsa C'yi kendi deps listesinde de belirtmelidir.

javacopts

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

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

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

Boole değeri; varsayılan değer False'dır.

Bu kitaplığın yalnızca derleme için kullanılıp çalışma zamanında kullanılmaması gerekip gerekmediği. 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'da çalışan her şey için tools.jar verilebilir.

neverlink = 1, derleyicinin bu kitaplıktaki materyalleri, Java Dil Spesifikasyonu'nun izin verdiği şekilde (ör. static final sabitleri (String veya temel türler). Bu nedenle, çalışma zamanı kitaplığı derleme kitaplığıyla aynı olduğunda tercih edilen kullanım alanı söz konusudur.

Çalışma zamanı kitaplığı derleme kitaplığından farklıysa yalnızca JLS'nin derleyicilerin satır içi yapmasını yasakladığı yerlerde farklı olduğundan emin olmanız gerekir (bu, JLS'nin gelecekteki tüm sürümleri için geçerli olmalıdır).

plugins

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

Derleme sırasında çalıştırılacak Java derleyici eklentileri. Bu özellik içinde belirtilen her java_plugin, bu kural her oluşturulduğunda çalıştırılır. Kitaplıklar, exported_plugins kullanan bağımlılıklardan da eklentileri devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın ortaya çıkan JAR'ına dahil edilir.
proguard_specs

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

Proguard spesifikasyonu olarak kullanılacak dosyalar. Bu dosyalar, ProGuard tarafından kullanılacak özellikler grubunu tanımlar. Belirtilmişse bu kitaplığa bağlı olarak herhangi bir android_binary hedefine eklenirler. Burada yer alan dosyalar yalnızca idempotent kurallar içermelidir. Bu kurallar şunlardır: -dontnote, -dontwarn, assumenosideeffects ve -keep ile başlayan kurallar. Diğer seçenekler, çelişkili olmayan birleştirme işlemleri için yalnızca android_binary'nın proguard_specs dosyasında görünebilir.
resource_jars

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

Kullanımdan kaldı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 öneki, resources özelliğindeki her dosyadan kaldırılır. Kaynak dosyasının bu dizinde olmaması hatadır. Belirtilmezse (varsayılan), kaynak dosyanın yolu, kaynak dosyaların Java paketiyle aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt konumundaki bir kaynak dosya, foo/bar/a.txt konumunda yer alır.

runtime_deps

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

Yalnızca son ikili dosyada veya çalışma zamanında test için kullanılabilir hale getirilecek kitaplıklar. Normal deps gibi bunlar 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 gereken bağımlılıklar burada listelenmelidir. Bağımlılık analizi araçları, hem runtime_deps hem de deps içinde görünen hedefleri yoksaymalıdır.

java_lite_proto_library

Kural kaynağını görüntüleme
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ını işaret etmelidir.

Ö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; zorunlu

Bu hedef için benzersiz bir ad.

deps

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

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

java_proto_library

Kural kaynağını görüntüleme
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 dosyalarından Java kodu oluşturur.

deps, proto_library kurallarını 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 değer []'dir.

Java kodu oluşturmak için 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ı, Java testini derler. Test, test kodunuzun etrafındaki ikili sarmalayıcıdır. Derlenen ana sınıf yerine test çalıştırıcının ana yöntemi çağrılır.

Örtülü çıkış hedefleri

  • name.jar: Java arşivi.
  • name_deploy.jar: Dağıtıma uygun bir Java arşivi. (Yalnızca açıkça istenirse oluşturulur.) Daha fazla bilgi için java_binary'den gelen name_deploy.jar çıkışının açıklamasını inceleyin.

java_binary() bağımsız değişkenleri ile ilgili bölüme 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

Etiket 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 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 söz konusu olduğunda, dosyanın adını değil, oluşturma kuralının adını buraya girmeniz önerilir. Bu sayede yalnızca okunabilirlik iyileştirilmekle kalmaz, kural gelecekteki değişikliklere karşı daha dirençli hale gelir: Üretim kuralı gelecekte farklı dosyalar üretirse yalnızca tek bir yeri düzeltmeniz gerekir: üretim kuralının outs kısmı. Üretim kuralı, işlem yapmadığı için deps içinde listelenmemelidir.

.srcjar türündeki kaynak dosyalar açılır ve derlenir. (Bu, genrule ile bir dizi .java dosyası 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çıklanan şekilde kullanılır.

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

resources

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

Bir Java jar'ına dahil edilecek veri dosyalarının listesi.

Kaynaklar belirtilmişse derleme tarafından oluşturulan normal .class dosyalarıyla birlikte JAR'a paketlenir. Jar dosyasındaki kaynakların konumu proje yapısı tarafından belirlenir. Bazel önce Maven'in standart dizin düzenini (bir "src" dizini ve ardından bir "resources" dizini torunu) arar. Bu bulunamazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar (örneğin, bir kaynak <workspace root>/x/java/y/java/z konumundaysa kaynağın yolu y/java/z olur). Bu sezgisel yöntem geçersiz kılınamaz ancak kaynak dosyaları için belirli bir alternatif dizin belirtmek üzere resource_strip_prefix özelliği kullanılabilir.

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

classpath_resources

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

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

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

create_executable

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

Bu politikanın desteği sonlandırıldı. Lütfen bunun yerine java_single_jar politikasını kullanın.
deploy_manifest_lines

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

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

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

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

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

jvm_flags

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

Bu ikiliyi çalıştırmak için oluşturulan sarmalayıcı komut dosyasına yerleştirilecek işaretlerin listesi. $(location) ve "Make variable" yerine koyma ve Bourne shell belirteçleştirme işlemlerine tabidir.

Bir Java ikilisi için sarmalayıcı komut dosyası, 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 "$@" karakterini içerir. Böylece, sınıf adından sonra diğer bağımsız değişkenleri iletebilirsiniz. Ancak JVM tarafından ayrıştırılması amaçlanan bağımsız değişkenler, komut satırındaki 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 çıktıları üzerinde hiçbir etkisi olmadığını unutmayın.

launcher

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

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

Bazel, varsayılan olarak 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 statik olarak {name}_nativedeps adlı bir ikiliye bağlanır. Burada {name}, bu java_binary kuralının name özelliğidir. Bu durumda, bağlayıcı, sonuçtaki ikiliden kullanılmadığını düşündüğü tüm kodları kaldırır. Bu nedenle, yalnızca JNI üzerinden erişilen C++ kodu, söz konusu cc_library hedefi alwayslink = 1 belirtmediği sürece bağlanmayabilir.

Varsayılan JDK başlatıcısı dışında bir başlatıcı kullanıldığında *_deploy.jar çıktısı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önteminin bulunduğu sınıfın adı. Bir kural bu seçeneği kullanıyorsa srcs=[...] listesine ihtiyacı yoktur. Bu nedenle, bu özellik sayesinde, bir veya daha fazla main() yöntemi içeren bir Java kitaplığından yürütülebilir bir dosya oluşturulabilir.

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

plugins

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

Derleme sırasında çalıştırılacak Java derleyici eklentileri. Bu özellik içinde belirtilen her java_plugin, bu kural her oluşturulduğunda çalıştırılır. Kitaplıklar, exported_plugins kullanan bağımlılıklardan da eklentileri devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın ortaya çıkan JAR'ına dahil edilir.
resource_jars

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

Kullanımdan kaldı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 öneki, resources özelliğindeki her dosyadan kaldırılır. Kaynak dosyasının bu dizinde olmaması hatadır. Belirtilmezse (varsayılan), kaynak dosyanın yolu, kaynak dosyaların Java paketiyle aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt konumundaki bir kaynak dosya, foo/bar/a.txt konumunda yer alır.

runtime_deps

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

Yalnızca son ikili dosyada veya çalışma zamanında test için kullanılabilir hale getirilecek kitaplıklar. Normal deps gibi bunlar 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 gereken bağımlılıklar 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 0

Derleme bilgilerinin ikili dosyaya kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: Derleme bilgileri, --nostamp derlemelerinde bile her zaman ikiliye damgalanır. Bu ayardan kaçınılmalıdır. Bu ayar, ikili dosya ve buna bağlı tüm aşağı akış işlemleri için uzaktan önbelleğe almayı devre dışı bırakabilir.
  • 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şaretiyle kontrol edilir.

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

test_class

Dize; varsayılan değer ""

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

Varsayılan olarak, bu bağımsız değişken tanımlanmamışsa eski mod kullanılır ve bunun yerine test bağımsız değişkenleri kullanılır. İlk bağımsız değişkene geri dönmemek için --nolegacy_bazel_java_test işaretini ayarlayın.

Bu özellik, bu test tarafından çalıştırılacak bir Java sınıfının adını belirtir. Bu ayarın yapılması nadiren gerekir. Bu bağımsız değişken atlanırsa hedefteki name ve kaynağa göre kök yolu kullanılarak çıkarım yapılır. Test bilinen bir kaynak kökünün dışında bulunuyorsa test_class ayarlanmamışsa Bazel hata bildirir.

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

Bu özellik, birkaç java_test kuralının aynı Test'yi paylaşmasına olanak tanır (TestCase, TestSuite, ...). Genellikle, davranışının her durumda farklı olması için (ör.testlerin farklı bir alt kümesini çalıştırmak gibi) ek bilgiler (ör. jvm_flags=['-Dkey=value'] aracılığıyla) iletilir. Bu özellik, javatests ağacı dışındaki Java testlerinin de kullanılmasını sağlar.

use_launcher

Boole değeri; varsayılan değer True'dır.

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

Bu özellik yanlış olarak ayarlanırsa bu hedef için launcher özelliği ve ilgili --java_launcher işareti yoksayılır.

use_testrunner

Boole değeri; varsayılan değer True'dır.

Test çalıştırıcı (varsayılan olarak com.google.testing.junit.runner.BazelTestRunner) sınıfını Java programı için ana giriş noktası olarak kullanın ve test sınıfını bazel.test_suite sistem özelliğinin değeri olarak test çalıştırıcıya sağlayın. Bu ayarı, java_test kuralları için test çalıştırıcıyı kullanmak ve java_binary kuralları için kullanmamak olan varsayılan davranışı geçersiz kılmak için kullanabilirsiniz. Bu işlemi yapmanız pek olası değildir. Bir kullanım alanı, AllTest başka bir kural tarafından çağrılan kurallar içindir (örneğin, testleri çalıştırmadan önce bir veritabanı oluşturmak için). AllTest kuralı java_binary olarak bildirilmelidir 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örüntüleme
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'ye 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; zorunlu

Bu hedef için benzersiz bir ad.

data

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

Bu yapılandırmanın çalışma zamanında ihtiyaç duyduğu dosyaların listesi.
javacopts

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

Java derleyici işaretleri.
packages

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

Yapılandırmanın uygulanması gereken package_group'ların kümesi.

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 yalnızca ek açıklama işlemcileri desteklenmektedir. Bir java_library veya java_binary kuralı, plugins özelliği aracılığıyla bunlara bağlı olarak eklentileri çalıştırabilir. java_library, exported_plugins kullanarak eklentileri doğrudan kendisine bağlı olan kitaplıklara da otomatik olarak aktarabilir.

Örtülü çı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; zorunlu

Bu hedef için benzersiz bir ad.

deps

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

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 oluşturulan JAR'lar, bu kuralın derleme zamanı sınıf yolunda yer alır. Ayrıca, deps, runtime_deps ve exports öğelerinin geçişli kapanımı, çalışma zamanı sınıf yolunda olacaktır.

Buna karşılık, data özelliğindeki hedefler runfiles'a dahil edilir ancak derleme zamanı veya çalışma zamanı sınıf yoluna dahil edilmez.

srcs

Etiket 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 söz konusu olduğunda, dosyanın adını değil, oluşturma kuralının adını buraya girmeniz önerilir. Bu sayede yalnızca okunabilirlik iyileştirilmekle kalmaz, kural gelecekteki değişikliklere karşı daha dirençli hale gelir: Üretim kuralı gelecekte farklı dosyalar üretirse yalnızca tek bir yeri düzeltmeniz gerekir: üretim kuralının outs kısmı. Üretim kuralı, işlem yapmadığı için deps içinde listelenmemelidir.

.srcjar türündeki kaynak dosyalar açılır ve derlenir. (Bu, genrule ile bir dizi .java dosyası 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çıklanan şekilde kullanılır.

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

data

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

Bu kitaplığın çalışma zamanında ihtiyaç duyduğu dosyaların listesi. data ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.

Bazel, java_library oluştururken bu dosyaları herhangi bir yere yerleştirmez. data dosyaları oluşturulmuş dosyalarsa Bazel bunları oluşturur. Bu java_library öğesine bağlı bir test oluştururken Bazel, data dosyalarını runfiles alanına kopyalar veya bağlar.

resources

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

Bir Java jar'ına dahil edilecek veri dosyalarının listesi.

Kaynaklar belirtilmişse derleme tarafından oluşturulan normal .class dosyalarıyla birlikte JAR'a paketlenir. Jar dosyasındaki kaynakların konumu proje yapısı tarafından belirlenir. Bazel önce Maven'in standart dizin düzenini (bir "src" dizini ve ardından bir "resources" dizini torunu) arar. Bu bulunamazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar (örneğin, bir kaynak <workspace root>/x/java/y/java/z konumundaysa kaynağın yolu y/java/z olur). Bu sezgisel yöntem geçersiz kılınamaz ancak kaynak dosyaları için belirli bir alternatif dizin belirtmek üzere resource_strip_prefix özelliği kullanılabilir.

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

generates_api

Boole değeri; varsayılan değer False'dır.

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

Bir kural, API oluşturan bir ek açıklama işlemcisini kullanıyorsa buna bağlı diğer kurallar, derleme işlemleri oluşturma kuralından sonra planlanırsa oluşturulan kodu yalnızca bu durumda referans alabilir. Bu özellik, Bazel'e --java_header_compilation etkinleştirildiğinde planlama kısıtlamaları getirmesini bildirir.

UYARI: Bu özellik, derleme performansını etkiler. Yalnızca gerekirse kullanın.

javacopts

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

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

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

Boole değeri; varsayılan değer False'dır.

Bu kitaplığın yalnızca derleme için kullanılıp çalışma zamanında kullanılmaması gerekip gerekmediği. 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'da çalışan her şey için tools.jar verilebilir.

neverlink = 1, derleyicinin bu kitaplıktaki materyalleri, Java Dil Spesifikasyonu'nun izin verdiği şekilde (ör. static final sabitleri (String veya temel türler). Bu nedenle, çalışma zamanı kitaplığı derleme kitaplığıyla aynı olduğunda tercih edilen kullanım alanı söz konusudur.

Çalışma zamanı kitaplığı derleme kitaplığından farklıysa yalnızca JLS'nin derleyicilerin satır içi yapmasını yasakladığı yerlerde farklı olduğundan emin olmanız gerekir (bu, JLS'nin gelecekteki tüm sürümleri için geçerli olmalıdır).

output_licenses

Lisans türü; varsayılan değer ["none"]'dır.

common attributes sayfasına göz atın.
plugins

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

Derleme sırasında çalıştırılacak Java derleyici eklentileri. Bu özellik içinde belirtilen her java_plugin, bu kural her oluşturulduğunda çalıştırılır. Kitaplıklar, exported_plugins kullanan bağımlılıklardan da eklentileri devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın ortaya çıkan JAR'ına dahil edilir.
processor_class

Dize; varsayılan değer ""

İşlemci sınıfı, Java derleyicisinin ek açıklama işlemcisine giriş noktası olarak kullanması gereken sınıfın tam nitelikli türüdür. Belirtilmezse bu kural, Java derleyicisinin ek açıklamaları işlemesine bir ek açıklama işleyici eklemez ancak çalışma zamanı sınıf yolu yine de derleyicinin ek açıklama işleyici yoluna dahil edilir. (Bu, öncelikle java.util.ServiceLoader kullanılarak ek açıklama işleme yoluyla yüklenen Error Prone eklentileri tarafından kullanılmak üzere tasarlanmıştır.)
proguard_specs

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

Proguard spesifikasyonu olarak kullanılacak dosyalar. Bu dosyalar, ProGuard tarafından kullanılacak özellikler grubunu tanımlar. Belirtilmişse bu kitaplığa bağlı olarak herhangi bir android_binary hedefine eklenirler. Burada yer alan dosyalar yalnızca idempotent kurallar içermelidir. Bu kurallar şunlardır: -dontnote, -dontwarn, assumenosideeffects ve -keep ile başlayan kurallar. Diğer seçenekler, çelişkili olmayan birleştirme işlemleri için yalnızca android_binary'nın proguard_specs dosyasında görünebilir.
resource_jars

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

Kullanımdan kaldı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 öneki, resources özelliğindeki her dosyadan kaldırılır. Kaynak dosyasının bu dizinde olmaması hatadır. Belirtilmezse (varsayılan), kaynak dosyanın yolu, kaynak dosyaların Java paketiyle aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt konumundaki bir kaynak dosya, foo/bar/a.txt konumunda yer alır.

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ı için yapılandırmayı 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; zorunlu

Bu hedef için benzersiz bir ad.

srcs

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

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

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

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

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

Hermetik dağıtımlar için çalışma zamanındaki 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 dizinine giden yol. "Marka" değişkeni yerine koyma işlemine tabidir. Bu yol mutlaksa 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'dir.

--release ile derleme için gereken lib/ct.sym dosyası. Belirtilmezse 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'dir.

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

Tam sayı; varsayılan değer 0

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örüntüleme
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 derleyicisi için yapılandırmayı belirtir. Kullanılacak araç zinciri, --java_toolchain bağımsız değişkeni aracılığıyla değiştirilebilir. Java derleyicinizi ayarlamak istemediğiniz sürece normalde bu tür kurallar yazmamalısınız.

Örnekler

Basit bir örnek:

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

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

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

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

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

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

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

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

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

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

Android Lint çalıştırıcısının etiketi (varsa).
bootclasspath

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

Java hedefi bootclasspath girişleri. javac'in -bootclasspath işaretine karşılık gelir.
deps_checker

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

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

Boole değeri; varsayılan değer False'dır.

Desteklemeyen platformlarda (ör. JDK 7 Bazel) üstbilgi derlemesini devre dışı bırakmak için --java_header_compilation'ı geçersiz kılar.
genclass

Etiketlerin listesi; zorunlu

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

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

Başlık derleyicisinin etiketi. --java_header_compilation etkinleştirildiyse gereklidir.
header_compiler_direct

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

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

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

ijar

Etiketlerin listesi; zorunlu

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

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

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

Etiket: zorunlu

Bu araç zinciriyle kullanılacak java_runtime. Varsayılan olarak yürütme yapılandırmasında java_runtime olur.
javabuilder

Etiketlerin listesi; zorunlu

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

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

javabuilder_jvm_opts içinde etiket genişletme için kullanılabilen veri etiketleri.
javabuilder_jvm_opts

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

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

Boole değeri; varsayılan değer True'dır.

JavaBuilder, çoklu kalıcı çalışan olarak çalıştırmayı destekliyorsa doğru, desteklemiyorsa yanlış.
javac_supports_worker_multiplex_sandboxing

Boole değeri; varsayılan değer False'dır.

JavaBuilder, çoklu sanal alan oluşturmayı destekliyorsa doğru, desteklemiyorsa yanlış.
javac_supports_workers

Boole değeri; varsayılan değer True'dır.

JavaBuilder, kalıcı bir çalışan olarak çalıştırmayı destekliyorsa doğru, desteklemiyorsa yanlış.
javacopts

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

Java derleyicisi için ek 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 []'dır.

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

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

Tek sürüm yaptırım ikilisinin etiketi.
oneversion_allowlist_for_tests

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

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

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

Tek sürüm beyaz listesinin etiketi.
package_configuration

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

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

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

Proguard izin verilenler listesinin etiketi.
resourcejar

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

Kaynak JAR oluşturucu yürütülebilir dosyasının etiketi.
singlejar

Etiketlerin listesi; zorunlu

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

Dize; varsayılan değer ""

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

Dize; varsayılan değer ""

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

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

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

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

jvm_opts'de etiket genişletme için kullanılabilen araçların etiketleri.
turbine_data

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

turbine_jvm_opts içinde etiket genişletme için kullanılabilen veri etiketleri.
turbine_jvm_opts

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

Turbine çağrılırken JVM için kullanılan bağımsız değişkenlerin listesi.
xlint

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

Varsayılan listeye eklenen veya listeden kaldırılan uyarıların listesi. Önüne tire işareti koyarak kaldırır. Daha fazla bilgi için lütfen -Xlint seçenekleriyle ilgili Javac belgelerine bakın.