Java Kuralları

Sorun bildir Kaynağı görüntüle Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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 dosyanı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 istenirse 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. JVM işaretlerini ve yerel kitaplıkları yükleme seçeneklerini de ilettiğinden java -jar yerine 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 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 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 eklenir ve hem yürütülebilir dosyayı hem de Java kodunu içeren tek bir ikili program blob'u 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 kapatmasından toplanan kaynakları içeren bir arşiv. Bu sınıflar, jar'ların eşleşen bir kaynak jar'ı olmadığı durumlar hariç olmak üzere deploy.jar sınıflarıyla eşleşir.

srcs olmadan 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 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 şunu yapın:

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

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

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 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. .java dosyaları oluşturulması durumunda, genellikle dosyanın adı yerine oluşturma kuralının adının buraya yerleştirilmesi önerilir. Bu, okunabilirliği artırmakla kalmaz, kuralı gelecekteki değişikliklere karşı daha dayanıklı hale getirir: Oluşturma kuralı gelecekte farklı dosyalar oluşturursa tek bir yeri düzeltmeniz yeterlidir: Oluşturma kuralının outs değeri. Oluşturma kuralını deps içinde listelememelisiniz, çünkü bu kural bir işlem değildir.

.srcjar türündeki kaynak dosyalar paketten çıkarılır ve derlenir. (Bu, bir genrule ile .java dosyaları grubu oluşturmanız gerekirse yararlı olur.)

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.

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 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 bulunamazsa Bazel, "java" veya "javatests" adlı en üst dizinleri arar (örneğin, bir kaynak <workspace root>/x/java/y/java/z konumundaysa 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

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

BAŞKA YOL YOKSA BU SEÇENEKTEN YARARILMAMALIDIR)

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_env

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

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

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

*_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'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 dosyası için sarmalayıcı komut dosyası, CLASSPATH tanımı (tüm bağımlı jar dosyalarını bulmak için) içerir 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ılmak istenen 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 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} bu java_binary kuralının name özelliği olduğu {name}_nativedeps.so adlı paylaşılan bir kitaplık olarak oluşturulur. 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ılar statik olarak {name}_nativedeps adlı bir ikili dosyaya bağlanır. Bu dosyada {name}, bu java_binary kuralının name özelliğidir. Bu durumda, birleyici, kullanılmadığını düşündüğü tüm kodları elde edilen ikili koddan kaldırır. Yani, cc_library hedefi alwayslink = 1 belirtmediği sürece yalnızca JNI aracılığıyla erişilen C++ kodları bağlanamaz.

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 dokümanlarına 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. Bu nedenle, bu özellik sayesinde bir Java kitaplığından, halihazırda bir veya daha fazla main() yöntemi içeren bir yürütülebilir dosya oluşturabilirsiniz.

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

Etiket listesi; varsayılan []

Derleme zamanında çalışacak Java derleyici 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 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 veya runtime_deps kullanın.
resource_strip_prefix

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

Java kaynaklarından kaldırı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. Belirtilmemişse (varsayılan) kaynak dosyaların Java paketiyle aynı mantıka 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, 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 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şaretiyle kontrol edilir.

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

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 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. 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. Örneğin, testleri çalıştırmadan önce veritabanı oluşturmak için başka bir kural tarafından çağrılan AllTest kuralları için kullanılabilir. 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ö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 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; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

Hedefe bağlanacak diğer kitaplıkların listesi. java_library.deps dosyasını inceleyin.
constraints

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

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

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

Bu kuralın kullanıcılarına sunulacak hedefler. java_library.exports özelliğine bakın.
jars

Etiketler listesi; zorunlu

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

Boole; varsayılan değer False'tir

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. 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.
proguard_specs

Etiket listesi; varsayılan []

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Bunlar, Proguard tarafından kullanılacak özellik grubunu açıklar. 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

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

Yalnızca son ikili dosyada kullanılacak veya çalışma zamanında test edilecek kitaplıklar. java_library.runtime_deps kitaplığına göz atı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ö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ı 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. deps ile ilgili genel yorumları Çoğu derleme kuralı tarafından tanımlanan tipik özellikler bölümünde bulabilirsiniz.

deps'te listelenen java_library kuralları tarafından oluşturulan jar dosyaları, bu kuralın derleme zamanındaki sınıf yolu üzerinde olacaktı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. İstisnalar için aşağıya bakın.

.java türündeki kaynak dosyalar derlenir. .java dosyaları oluşturulması durumunda, genellikle dosyanın adı yerine oluşturma kuralının adının buraya yerleştirilmesi önerilir. Bu, okunabilirliği artırmakla kalmaz, kuralı gelecekteki değişikliklere karşı daha dayanıklı hale getirir: Oluşturma kuralı gelecekte farklı dosyalar oluşturursa tek bir yeri düzeltmeniz yeterlidir: Oluşturma kuralının outs değeri. Oluşturma kuralını deps içinde listelememelisiniz, çünkü bu kural bir işlem değildir.

.srcjar türündeki kaynak dosyalar paketten çıkarılır ve derlenir. (Bu, bir genrule ile .java dosyaları grubu oluşturmanız gerekirse yararlı olur.)

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.

data

Etiketler 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.

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 dosyasına 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 üst dizin<workspace root>/x/java/y/java/zy/java/z 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.

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 tüm kitaplıklara, söz konusu kitaplık plugins'ta bu etiketleri açıkça tanımlamış 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 de C'ye bağlı olduğunu varsayalım. 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ıflarını kullanamaz. Bunu sağlamak için ya A'nın deps içinde C'yi belirtmesi gerekir ya da B'nin, C'yi (B'nin) exports özelliğinde belirterek A (ve A'ya bağlı olabilecek her şey) için işini kolaylaştırması gerekir.

Dışa aktarılan kitaplıkların kapatılması, tüm doğrudan üst kural için kullanılabilir. Biraz farklı bir örnek verelim: A, B'ye bağlıdır, B ise 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. C ve D, sırasıyla C' ve D'ye bazı kitaplıkları dışa aktardıysa A yalnızca C'ye erişebilir ancak D'ye erişemez.

Önemli: Dışa aktarılan kurallar normal bir bağımlılık değildir. Önceki örneğe bağlı kalarak, B, C'yi dışa aktarıyorsa ve C'yi kullanmak istiyorsa kendi deps'sinde de listelemesi gerekir.

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.

Boole; varsayılan değer False'tir

Bu kitaplığın yalnızca derleme için kullanılıp çalıştırı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, çalışma zamanı kitaplığının derleme kitaplığıyla aynı olduğu durumlar tercih edilir.

Ç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

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.
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. 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.
resource_jars

Etiket listesi; varsayılan []

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

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

Java kaynaklarından kaldırı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 adresindeki bir kaynak dosya foo/bar/a.txt adresinde 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 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.

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 kuralına 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 []

Java kodu oluşturmak için kullanılacak 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 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

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

Java kodu oluşturmak için kullanılacak 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 testini derleyebilir. Test, test kodunuzun etrafında kullanılan bir ikili sarmalayıcıdır. Derlenmekte olan 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 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

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. .java dosyaları oluşturulması durumunda, genellikle dosyanın adı yerine oluşturma kuralının adının buraya yerleştirilmesi önerilir. Bu, okunabilirliği artırmakla kalmaz, kuralı gelecekteki değişikliklere karşı daha dayanıklı hale getirir: Oluşturma kuralı gelecekte farklı dosyalar oluşturursa tek bir yeri düzeltmeniz yeterlidir: Oluşturma kuralının outs değeri. Oluşturma kuralını deps içinde listelememelisiniz, çünkü bu kural bir işlem değildir.

.srcjar türündeki kaynak dosyalar paketten çıkarılır ve derlenir. (Bu, bir genrule ile .java dosyaları grubu oluşturmanız gerekirse yararlı olur.)

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.

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 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 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

Etiket listesi; varsayılan []

BAŞKA YOL YOKSA 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" yerine koyma işlemine uygun 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'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 "$@" 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ılmak istenen 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.

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ş java_binary ve java_test hedefleri 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} bu java_binary kuralının name özelliği olduğu {name}_nativedeps.so adlı paylaşılan bir kitaplık olarak oluşturulur. 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ılar statik olarak {name}_nativedeps adlı bir ikili dosyaya bağlanır. Bu dosyada {name}, bu java_binary kuralının name özelliğidir. Bu durumda, birleyici, kullanılmadığını düşündüğü tüm kodları elde edilen ikili koddan kaldırır. Yani, cc_library hedefi alwayslink = 1 belirtmediği sürece yalnızca JNI aracılığıyla erişilen C++ kodları bağlanamaz.

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 ""'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. Bu nedenle, bu özellik sayesinde bir Java kitaplığından, halihazırda bir veya daha fazla main() yöntemi içeren bir yürütülebilir dosya oluşturabilirsiniz.

Bu özelliğin değeri, 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

Etiket listesi; varsayılan []

Derleme zamanında çalışacak Java derleyici 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 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 ""'tir

Java kaynaklarından kaldırılacak yol ön eki.

Belirtilirse bu yol ön eki, resources özelliğindeki her dosyadan çıkarılır. Bir kaynak dosyasının bu dizinin altında olmaması hatalıdır. Belirtilmemişse (varsayılan) kaynak dosyaların Java paketiyle aynı mantıka 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 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: --nostamp derlemelerinde bile derleme bilgilerini her zaman ikili dosyaya 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.

test_class

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

Test çalıştırıcı 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. İlk bağımsız değişkene başvurmamak 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ı yapmanız gerekmez. Bu bağımsız değişken atlanırsa hedefin name değeri ve kaynak köküne göre göreli yolu kullanılarak çıkarılır. 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ının dışında Java testlerinin kullanılmasını da sağlar.

use_launcher

Boole; varsayılan değer True

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

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

use_testrunner

Boole; varsayılan değer True

Bir 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ı bazel.test_suite sistem özelliğinin değeri olarak test çalıştırıcıya 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ö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 öğelerine 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 []

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

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

Java derleyici işaretleri.
packages

Etiket listesi; varsayılan []

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 yalnızca ek açıklama işleyiciler desteklenmektedir. 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.

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

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'te listelenen java_library kuralları tarafından oluşturulan jar dosyaları, bu kuralın derleme zamanındaki sınıf yolu üzerinde olacaktı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; aşağıdaki istisnaları inceleyin.

.java türündeki kaynak dosyalar derlenir. .java dosyaları oluşturulması durumunda, genellikle dosyanın adı yerine oluşturma kuralının adının buraya yerleştirilmesi önerilir. Bu, okunabilirliği artırmakla kalmaz, kuralı gelecekteki değişikliklere karşı daha dayanıklı hale getirir: Oluşturma kuralı gelecekte farklı dosyalar oluşturursa tek bir yeri düzeltmeniz yeterlidir: Oluşturma kuralının outs değeri. Oluşturma kuralını deps içinde listelememelisiniz, çünkü bu kural bir işlem değildir.

.srcjar türündeki kaynak dosyalar paketten çıkarılır ve derlenir. (Bu, bir genrule ile .java dosyaları grubu oluşturmanız gerekirse yararlı olur.)

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.

data

Etiketler 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ı hiçbir yere koymaz; data dosyaları oluşturulan dosyaysa 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 dosyasına 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 üst dizinleri arar (örneğin, bir kaynak <workspace root>/x/java/y/java/z konumundaysa 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.

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. Yalnızca gerektiğinde kullanın.

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.

Boole; varsayılan değer False'tir

Bu kitaplığın yalnızca derleme için kullanılıp çalıştırı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, çalışma zamanı kitaplığının derleme kitaplığıyla aynı olduğu durumlar tercih edilir.

Çalışma zamanı kitaplığı derleme kitaplığından farklıysa yalnızca JLS'nin derleyicilerin satır içi yerleştirmesini yasakladığı yerlerde farklı olduğundan emin olmanız gerekir (ve 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"]

common attributes adresine göz atın.
plugins

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

Derleme zamanında çalışacak Java derleyici 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 da eklentileri 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 derleyicisinin ek açıklama işleyiciye 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. (Bu, temel olarak java.util.ServiceLoader kullanılarak ek açıklama işleyici yolundan yüklenen hataya meyilli eklentiler tarafından kullanılmak üzere tasarlanmıştır.)
proguard_specs

Etiket listesi; varsayılan []

Proguard spesifikasyonu olarak kullanılacak dosyalar. Bunlar, Proguard tarafından kullanılacak özellik grubunu açıklar. 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.
resource_jars

Etiket listesi; varsayılan []

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

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

Java kaynaklarından kaldırı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. Belirtilmemişse (varsayılan) kaynak dosyaların Java paketiyle aynı mantıka göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt adresindeki bir kaynak dosya foo/bar/a.txt adresinde 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; zorunlu

Bu hedef için benzersiz bir ad.

srcs

Etiket listesi; varsayılan []

Ç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

Etiket listesi; varsayılan []

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 ""'tir

Çalışma zamanının köküne giden yol. "Make" değişkeni yerine geçmeye tabidir. Bu yol mutlaksa kural, bilinen bir yola sahip olan hermetik olmayan bir Java çalışma zamanını gösterir. 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ı. 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'dir.

Hermetik dağıtımlar için gereken 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ö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_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 verelim:

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; gerekli

Bu hedef için benzersiz bir ad.

android_lint_data

Etiket listesi; varsayılan []

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 []'tir.

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

Etiketler 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.

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

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

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

Üstbilgi derlemeyi desteklemeyen platformlarda (ör. JDK 7 Bazel) üstbilgi derlemeyi devre dışı bırakmak için --java_header_compilation seçeneğini geçersiz kılar.
genclass

Etiket 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 özelliği etkinse gereklidir.
header_compiler_direct

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

API oluşturan ek açıklama işlemcileri içermeyen doğrudan sınıf yolu işlemleri için kullanılacak üst bilgi derleyici etiketi.

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

ijar

Etiket 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ç setiyle kullanılacak java_runtime. Varsayılan olarak yürütme yapılandırmasında java_runtime değerini alır.
javabuilder

Etiketler listesi; zorunlu

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

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

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

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

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'tir

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

Boole; varsayılan değer True'tir

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çenek için kullanılabilecek işaretlerin kapsamlı listesi için lütfen Java sanal makine dokümanlarına bakın.
oneversion

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

Tek sürümlü yaptırım ikili programının 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

Etiketler 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 listesi ekleyenin etiketi.
resourcejar

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

Kaynak jar derleyici yürütülebilir dosyasının etiketi.
singlejar

Etiket 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ısı kümesine izin verildiğ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 derlenmesi 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 gizli bir çalışma zamanı bağımlılığı olarak eklenir.
tools

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

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

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

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 []'tir.

Varsayılan listeye eklenecek veya listeden kaldırılacak uyarıların listesi. Kaldırmak için önüne kısa çizgi ekleyin. Daha fazla bilgi için lütfen -Xlint seçenekleriyle ilgili Javac belgelerine bakın.