Java Kuralları

Sorun bildir Kaynağı görüntüle Nightly · 8.0 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, add_exports, add_opens, args, bootclasspath, 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, neverlink, output_licenses, plugins, 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. Böylece 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ı doğrudan herhangi bir yerel ikili dosyayı yürüttüğünüz gibi 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.

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

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 sık yapılan bir hata gösterilmektedir:


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

Bunun yerine ş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.

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. Aşağıdaki istisnaları inceleyin.

.java türündeki kaynak dosyalar derlenir. Oluşturulan .java dosyalarında genellikle dosyanın adı yerine dosyayı oluşturan kuralın adını buraya eklemeniz önerilir. Bu, yalnızca okunabilirliği iyileştirmekle kalmaz, aynı zamanda 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. Hiçbir işlem yapmadığı için deps içinde oluşturma kuralını listelemeniz gerekmez.

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

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

Bir main_class özelliği çalışma zamanı sınıf yolu üzerinde 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.
resources

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

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

Kaynaklar kaynak dosyalar veya oluşturulan dosyalar olabilir.

Kaynaklar belirtilirse derleme işlemiyle oluşturulan normal .class dosyalarıyla birlikte jar dosyasına eklenir. Jar dosyasındaki kaynakların konumu, proje yapısına göre belirlenir. Bazel ilk olarak 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 dizini 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 kaynak dosyalar için belirli bir alternatif dizin belirtmek üzere resource_strip_prefix özelliği kullanılabilir.

add_exports

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

Bu kitaplığın, belirtilen module veya package'a erişmesine izin verin.

Bu, javac ve JVM --add-exports= işaretlerine karşılık gelir.

add_opens

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

Bu kitaplığın, belirtilen module veya package'a yansıtmalı olarak erişmesine izin verin.

Bu, javac ve JVM --add-opens= işaretlerine karşılık gelir.

bootclasspath

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

Kısıtlanmış API, kullanmayın.
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, kitaplıklarda izin verilmez.

create_executable

Boole; varsayılan değer True'tir

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 []'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 ikili dosya için ek derleyici seçenekleri. "Değişken oluştur" yerine koyma ve Bourne kabuğu dize parçalarına ayırma işlemine tabidir.

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

jvm_flags

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

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

Java ikili dosyası için sarmalayıcı komut dosyası, bir 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 bir "$@" 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 üzere tasarlanan 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 olan normal bin/java programı yerine Java programınızı çalıştırmak için kullanılacak bir ikili dosyayı 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 belirtmemiş 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 derleneceğini 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 ikili dosyaya bağlanır. Burada {name}, bu java_binary kuralının name özelliğidir. Bu durumda, bağlayıcı, kullanılmadığını düşündüğü tüm kodları elde edilen ikili koddan kaldırır. Yani cc_library hedefi alwayslink = True 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 java_binary ile ilgili ana dokümanları inceleyin.

main_class

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

Giriş noktası olarak kullanılacak main() yönteminin bulunduğu sınıfın adı. Bu seçeneği kullanan kurallar için srcs=[...] listesi gerekmez. Bu nedenle, bu özellik sayesinde bir veya daha fazla main() yöntemi içeren bir Java kitaplığından yürütülebilir bir program 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ıklar tarafından 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.

Boole; varsayılan değer False'tir

plugins

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

Derleme zamanında çalışacak Java derleyicisi eklentileri. Bu özellikte belirtilen her java_plugin, bu kural derlendiğinde çalıştırılır. Bir kitaplık, exported_plugins kullanan bağımlılıklardan da eklentileri devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın oluşturulan jar dosyasına dahil edilir.
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 kaldırılır. Bir kaynak dosyasının bu dizinin altında olmaması hatadır. Belirtilmemişse (varsayılan) kaynak dosyanın Java paketiyle aynı mantıkla 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 dosyada kullanılacak veya yalnızca ç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 derleme zamanı sınıf yolunda görünmez. Yalnızca çalışma zamanında ihtiyaç duyulan bağımlılar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps'te görünen hedefleri yoksayar.
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 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.

use_launcher

Boole; varsayılan değer True'tir

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

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ı 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 AllTestkurallar için kullanılabilir. AllTest kuralı bir java_binary olarak tanımlanmalıdır 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, add_exports, add_opens, 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, toolchains, 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

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

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

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

Bu kuralın çalışma zamanında ihtiyaç duyduğu dosyaların listesi.
add_exports

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

Bu kitaplığın, belirtilen module veya package'a erişmesine izin verin.

Bu, javac ve JVM --add-exports= işaretlerine karşılık gelir.

add_opens

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

Bu kitaplığın, belirtilen module veya package'a yansıtmalı olarak erişmesine izin verin.

Bu, javac ve JVM --add-opens= işaretlerine karşılık gelir.

constraints

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

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

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ştirmelerin yapılması için yalnızca android_binary'nin proguard_specs dosyasında görünebilir.
runtime_deps

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

Son ikili dosyada kullanılacak veya yalnızca çalışma zamanında test edilecek 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, add_exports, add_opens, bootclasspath, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exported_plugins, exports, features, javabuilder_jvm_flags, javacopts, licenses, neverlink, plugins, proguard_specs, resource_strip_prefix, restricted_to, runtime_deps, tags, target_compatible_with, testonly, toolchains, visibility)

Bu kural, kaynakları derleyip .jar dosyasına bağlar.

Örtülü çıkışlar

  • 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

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ı sınıf yolu üzerinde olur. Ayrıca, deps, runtime_deps ve exports sınıflarının geçirgen kapatması, çalışma zamanındaki sınıf yolu üzerinde olacaktır.

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

srcs

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

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

.java türündeki kaynak dosyalar derlenir. Oluşturulan .java dosyalarında genellikle dosyanın adı yerine dosyayı oluşturan kuralın adını buraya eklemeniz önerilir. Bu, yalnızca okunabilirliği iyileştirmekle kalmaz, aynı zamanda 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. Hiçbir işlem yapmadığı için deps içinde oluşturma kuralını listelemeniz gerekmez.

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

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

.properties türündeki kaynak dosyalar kaynak olarak değerlendirilir.

Yukarıda açıklanan dosya türünde en az bir dosya bulunduğu sürece diğer tüm dosyalar yoksayılır. Aksi takdirde hata oluşur.

runtime_deps bağımsız değişkenini belirttiğiniz durumlar hariç, 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 dosyalarsa Bazel bunları oluşturur. Bu java_library dosyalarına bağlı bir test oluştururken Bazel, data dosyalarını çalıştırma dosyaları alanına kopyalar veya bağlar.

resources

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

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

Kaynaklar kaynak dosyalar veya oluşturulan dosyalar olabilir.

Kaynaklar belirtilirse derleme işlemiyle oluşturulan normal .class dosyalarıyla birlikte jar dosyasına eklenir. Jar dosyasındaki kaynakların konumu, proje yapısına göre belirlenir. Bazel ilk olarak 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 dizini 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 kaynak dosyalar için belirli bir alternatif dizin belirtmek üzere resource_strip_prefix özelliği kullanılabilir.

add_exports

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

Bu kitaplığın, belirtilen module veya package'a erişmesine izin verin.

Bu, javac ve JVM --add-exports= işaretlerine karşılık gelir.

add_opens

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

Bu kitaplığın, belirtilen module veya package'a yansıtmalı olarak erişmesine izin verin.

Bu, javac ve JVM --add-opens= işaretlerine karşılık gelir.

bootclasspath

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

Kısıtlanmış API, kullanmayın.
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, bu kitaplığa doğrudan bağımlı olan tüm kitaplıklara, söz konusu kitaplık plugins'te bu etiketleri açıkça tanımlamış gibi uygulanır.

exports

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

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ı ve ardından sıfır veya daha fazla exports kenarı bulunan 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. Bunun için A'nın deps özelliğinde C'yi bildirmesi gerekir veya B, C'yi (B'nin) exports özelliğinde bildirerek A'nın (ve A'ya bağlı olabilecek her şeyin) işini kolaylaştırabilir.

Dışa aktarılan kitaplıkların kapatılması, tüm doğrudan üst kural için kullanılabilir. Biraz farklı bir örnek 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' kitaplıklarını dışa aktardıysa A yalnızca C'ye erişebilir, D'ye erişemez.

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

javabuilder_jvm_flags

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

Kısıtlanmış API, kullanmayı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 ve Bourne kabuğu dize parçalarına ayırma işlemine tabidir.

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 = True, Java Dil Spesifikasyonu'nun izin verdiği şekilde (ör. static final sabitleri veya ilkel türler)String Bu nedenle, tercih edilen kullanım alanı, çalışma zamanı kitaplığının derleme kitaplığıyla aynı olduğu durumdur.

Ç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).

plugins

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

Derleme zamanında çalışacak Java derleyicisi eklentileri. Bu özellikte belirtilen her java_plugin, bu kural derlendiğinde çalıştırılır. Bir kitaplık, exported_plugins kullanan bağımlılıklardan da eklentileri devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın oluşturulan 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ştirmelerin yapılması için yalnızca android_binary'nin proguard_specs dosyasında görünebilir.
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 kaldırılır. Bir kaynak dosyasının bu dizinin altında olmaması hatadır. Belirtilmemişse (varsayılan) kaynak dosyanın Java paketiyle aynı mantıkla 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 dosyada kullanılacak veya yalnızca ç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 derleme zamanı sınıf yolunda görünmez. Yalnızca çalışma zamanında ihtiyaç duyulan bağımlılar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps'te görünen hedefleri yoksayar.

java_test

Kural kaynağını görüntüleme
java_test(name, deps, srcs, data, resources, add_exports, add_opens, args, bootclasspath, 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, neverlink, plugins, 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ındaki ikili bir sarmalayıcıdır. Ana sınıf derlenmek yerine test çalıştırıcısının ana yöntemi çağrılır.

Örtülü çıkış hedefleri

  • name.jar: Java arşivi.
  • name_deploy.jar: Dağıtım için uygun bir Java arşivi. (Yalnızca açıkça istenirse oluşturulur.) Daha fazla bilgi için java_binary işlevinden elde edilen name_deploy.jar çıktısının açıklamasına bakın.

java_binary() bağımsız değişkenleri hakkındaki 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

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. Aşağıdaki istisnaları inceleyin.

.java türündeki kaynak dosyalar derlenir. Oluşturulan .java dosyalarında genellikle dosyanın adı yerine dosyayı oluşturan kuralın adını buraya eklemeniz önerilir. Bu, yalnızca okunabilirliği iyileştirmekle kalmaz, aynı zamanda 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. Hiçbir işlem yapmadığı için deps içinde oluşturma kuralını listelemeniz gerekmez.

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

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

Bir main_class özelliği çalışma zamanı sınıf yolu üzerinde 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.
resources

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

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

Kaynaklar kaynak dosyalar veya oluşturulan dosyalar olabilir.

Kaynaklar belirtilirse derleme işlemiyle oluşturulan normal .class dosyalarıyla birlikte jar dosyasına eklenir. Jar dosyasındaki kaynakların konumu, proje yapısına göre belirlenir. Bazel ilk olarak 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 dizini 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 kaynak dosyalar için belirli bir alternatif dizin belirtmek üzere resource_strip_prefix özelliği kullanılabilir.

add_exports

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

Bu kitaplığın, belirtilen module veya package'a erişmesine izin verin.

Bu, javac ve JVM --add-exports= işaretlerine karşılık gelir.

add_opens

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

Bu kitaplığın, belirtilen module veya package'a yansıtmalı olarak erişmesine izin verin.

Bu, javac ve JVM --add-opens= işaretlerine karşılık gelir.

bootclasspath

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

Kısıtlanmış API, kullanmayın.
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, kitaplıklarda izin verilmez.

create_executable

Boole; varsayılan değer True'tir

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 ikili dosya için ek derleyici seçenekleri. "Değişken oluştur" yerine koyma ve Bourne kabuğu dize parçalarına ayırma işlemine tabidir.

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

jvm_flags

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

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

Java ikili dosyası için sarmalayıcı komut dosyası, bir 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 bir "$@" 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 üzere tasarlanan 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 olan normal bin/java programı yerine Java programınızı çalıştırmak için kullanılacak bir ikili dosyayı 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 belirtmemiş 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 derleneceğini 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 ikili dosyaya bağlanır. Burada {name}, bu java_binary kuralının name özelliğidir. Bu durumda, bağlayıcı, kullanılmadığını düşündüğü tüm kodları elde edilen ikili koddan kaldırır. Yani cc_library hedefi alwayslink = True 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 java_binary ile ilgili ana dokümanları inceleyin.

main_class

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

Giriş noktası olarak kullanılacak main() yönteminin bulunduğu sınıfın adı. Bu seçeneği kullanan kurallar için srcs=[...] listesi gerekmez. Bu nedenle, bu özellik sayesinde bir veya daha fazla main() yöntemi içeren bir Java kitaplığından yürütülebilir bir program 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ıklar tarafından 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.

Boole; varsayılan değer False'tir

plugins

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

Derleme zamanında çalışacak Java derleyicisi eklentileri. Bu özellikte belirtilen her java_plugin, bu kural derlendiğinde çalıştırılır. Bir kitaplık, exported_plugins kullanan bağımlılıklardan da eklentileri devralabilir. Eklenti tarafından oluşturulan kaynaklar, bu kuralın oluşturulan jar dosyasına dahil edilir.
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 kaldırılır. Bir kaynak dosyasının bu dizinin altında olmaması hatadır. Belirtilmemişse (varsayılan) kaynak dosyanın Java paketiyle aynı mantıkla 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 dosyada kullanılacak veya yalnızca ç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 derleme zamanı sınıf yolunda görünmez. Yalnızca çalışma zamanında ihtiyaç duyulan bağımlılar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps'te görünen hedefleri yoksayar.
stamp

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

Derleme bilgilerinin ikili dosyaya kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile derleme bilgilerini her zaman ikili dosyaya damgalayın. İ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 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ı 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 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 (veya Test alt sınıfı) döndüren herkese açık statik bir suite() yöntemi içermesi gerekir. JUnit4 için sınıfın org.junit.runner.RunWith ile ek açıklama eklenmesi gerekir.

Bu özellik, birkaç java_test kuralının aynı Test'ı (TestCase, TestSuite, ...) paylaşmasına olanak tanır. Genellikle, davranışının her durumda farklı olması (ör.testlerin farklı bir alt kümesini çalıştırmak) için ek bilgiler (ör. jvm_flags=['-Dkey=value'] aracılığıyla) iletilir. 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'tir

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

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ı 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 AllTestkurallar için kullanılabilir. AllTest kuralı bir java_binary olarak tanımlanmalıdır 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, exec_compatible_with, exec_properties, features, javacopts, output_licenses, packages, restricted_to, system, tags, target_compatible_with, testonly, toolchains, visibility)

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

Örnek:



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

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

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


Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

data

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

Java derleyici işaretleri.
output_licenses

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

packages

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

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

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

javac'ın --system işaretine karşılık gelir.

java_plugin

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

java_plugin, Bazel tarafından çalıştırılan Java derleyicisi için eklentileri tanımlar. Yalnızca ek açıklama işleyiciler desteklenir. java_library veya java_binary kuralları, plugins özelliği aracılığıyla 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

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ı sınıf yolu üzerinde olur. Ayrıca, deps, runtime_deps ve exports sınıflarının geçirgen kapatması, çalışma zamanındaki sınıf yolu üzerinde olacaktır.

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

srcs

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

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

.java türündeki kaynak dosyalar derlenir. Oluşturulan .java dosyalarında genellikle dosyanın adı yerine dosyayı oluşturan kuralın adını buraya eklemeniz önerilir. Bu, yalnızca okunabilirliği iyileştirmekle kalmaz, aynı zamanda 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. Hiçbir işlem yapmadığı için deps içinde oluşturma kuralını listelemeniz gerekmez.

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

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

.properties türündeki kaynak dosyalar kaynak olarak değerlendirilir.

Yukarıda açıklanan dosya türünde en az bir dosya bulunduğu sürece diğer tüm dosyalar yoksayılır. Aksi takdirde hata oluşur.

runtime_deps bağımsız değişkenini belirttiğiniz durumlar hariç, 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 dosyalarsa Bazel bunları oluşturur. Bu java_library dosyalarına bağlı bir test oluştururken Bazel, data dosyalarını çalıştırma dosyaları alanına kopyalar veya bağlar.

resources

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

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

Kaynaklar kaynak dosyalar veya oluşturulan dosyalar olabilir.

Kaynaklar belirtilirse derleme işlemiyle oluşturulan normal .class dosyalarıyla birlikte jar dosyasına eklenir. Jar dosyasındaki kaynakların konumu, proje yapısına göre belirlenir. Bazel ilk olarak 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 dizini 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 kaynak dosyalar için belirli bir alternatif dizin belirtmek üzere resource_strip_prefix özelliği kullanılabilir.

add_exports

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

Bu kitaplığın, belirtilen module veya package'a erişmesine izin verin.

Bu, javac ve JVM --add-exports= işaretlerine karşılık gelir.

add_opens

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

Bu kitaplığın, belirtilen module veya package'a yansıtmalı olarak erişmesine izin verin.

Bu, javac ve JVM --add-opens= işaretlerine karşılık gelir.

bootclasspath

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

Kısıtlanmış API, kullanmayın.
generates_api

Boole; varsayılan değer False'tir

Bu özellik, API kodu oluşturan ek açıklama işleyicilerini 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, Bazel'e --java_header_compilation etkinleştirildiğinde planlama kısıtlamaları uygulamasını söyler.

UYARI: Bu özellik derleme performansını etkiler. Yalnızca gerektiğinde kullanın.

javabuilder_jvm_flags

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

Kısıtlanmış API, kullanmayı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 ve Bourne kabuğu dize parçalarına ayırma işlemine tabidir.

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 = True, Java Dil Spesifikasyonu'nun izin verdiği şekilde (ör. static final sabitleri veya ilkel türler)String Bu nedenle, tercih edilen kullanım alanı, çalışma zamanı kitaplığının derleme kitaplığıyla aynı olduğu durumdur.

Ç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

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

plugins

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

Derleme zamanında çalışacak Java derleyicisi eklentileri. Bu özellikte belirtilen her java_plugin, bu kural derlendiğinde çalıştırılır. Bir kitaplık, exported_plugins kullanan bağımlılıklardan 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. Belirtilmemişse bu kural, Java derleyicisinin ek açıklama işlemesine bir ek açıklama işleyici katkıda bulunmaz ancak çalışma zamanı sınıf yolu, derleyicinin ek açıklama işleyici yoluna yine de dahil edilir. (Bu, öncelikle java.util.ServiceLoader kullanılarak ek açıklama işleyici yolundan yüklenen hataya eğilimli eklentiler tarafından kullanılmak üzere tasarlanmıştır.)
proguard_specs

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

Proguard spesifikasyonu olarak kullanılacak dosyalar. Bunlar, Proguard tarafından kullanılacak özellik grubunu açıklar. 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ştirmelerin yapılması için yalnızca android_binary'nin proguard_specs dosyasında görünebilir.
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 kaldırılır. Bir kaynak dosyasının bu dizinin altında olmaması hatadır. Belirtilmemişse (varsayılan) kaynak dosyanın Java paketiyle aynı mantıkla 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, exec_compatible_with, exec_properties, features, hermetic_srcs, hermetic_static_libs, java, java_home, lib_ct_sym, lib_modules, output_licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, 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

Etiketler 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. Bir java_binary hedefi için hermetik dağıtım etkinleştirildiğinde java_runtime varsayılan CDS, hermetik dağıtım JAR'ına paketlenir.
hermetic_srcs

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

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

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

Hermetik dağıtımlar için başlatıcıya statik olarak bağlı kütüphaneler
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 getirilebilir. Bu yol mutlaksa kural, iyi bilinen bir yola sahip olan hermetik olmayan bir Java çalışma zamanı 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ı.
output_licenses

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

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_javacopts, compatible_with, deprecation, deps_checker, distribs, exec_compatible_with, exec_properties, features, forcibly_disable_header_compilation, genclass, header_compiler, header_compiler_builtin_processors, header_compiler_direct, ijar, jacocorunner, java_runtime, javabuilder, javabuilder_data, javabuilder_jvm_opts, javac_supports_multiplex_workers, javac_supports_worker_cancellation, javac_supports_worker_multiplex_sandboxing, javac_supports_workers, javacopts, jspecify_implicit_deps, jspecify_javacopts, jspecify_packages, jspecify_processor, jspecify_processor_class, jspecify_stubs, jvm_opts, licenses, misc, oneversion, oneversion_allowlist, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, proguard_allowlister, reduced_classpath_incompatible_processors, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, toolchains, tools, turbine_data, turbine_jvm_opts, visibility, xlint)

Java derleyicisinin yapılandırmasını belirtir. Kullanılacak araç seti, --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; zorunlu

Bu hedef için benzersiz bir ad.

android_lint_data

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

android_lint_jvm_opts parametresinde 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 yolu girişleri. javac'ın -bootclasspath işaretine karşılık gelir.
compatible_javacopts

null; varsayılan değer {}

Dahili API, kullanmayın.
deps_checker

Etiket; varsayılan değer None'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 parametresini geçersiz kılar.
genclass

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

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

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

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

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

Dahili API, kullanmayın.
header_compiler_direct

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

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

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

ijar

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

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; varsayılan değer None'dir.

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

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

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 çoklu kalıcı işleyici olarak çalışmayı destekliyorsa doğru, desteklemiyorsa yanlış değerini döndürür.
javac_supports_worker_cancellation

Boole; varsayılan değer True'tir

JavaBuilder kalıcı çalışanların iptal edilmesini destekliyorsa doğru, desteklemiyorsa yanlış değerini döndürür.
javac_supports_worker_multiplex_sandboxing

Boole; varsayılan değer False'tir

JavaBuilder, korumalı alanla çoklu kalıcı işleyici olarak çalışmayı destekliyorsa doğru, desteklemiyorsa yanlış değerini döndürür.
javac_supports_workers

Boole; varsayılan değer True'tir

JavaBuilder kalıcı çalışan olarak çalışmayı destekliyorsa doğru, desteklemiyorsa 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.
jspecify_implicit_deps

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

Deneysel, kullanmayın.
jspecify_javacopts

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

Deneysel, kullanmayın.
jspecify_packages

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

Deneysel, kullanmayın.
jspecify_processor

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

Deneysel, kullanmayın.
jspecify_processor_class

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

Deneysel, kullanmayın.
jspecify_stubs

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

Deneysel, kullanmayı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 makinesi belgelerine bakın.
misc

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

Desteği sonlandırıldı: Bunun yerine javacopts kullanın
oneversion

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

Tek sürümlü yaptırım ikilisinin etiketi.
oneversion_allowlist

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

Tek sürüm izin verilenler listesinin 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.

Desteği sonlandırıldı: Bunun yerine oneversion_allowlist özelliğini kullanın
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.
reduced_classpath_incompatible_processors

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

Dahili API, kullanmayın.
singlejar

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

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

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

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

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

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

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

Saat dilimi verilerini içeren bir kaynak jar'ının etiketi. Ayarlanırsa saat dilimi verileri, tüm java_binary kurallarının varsayılan ç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.

Turbine ç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 kısa çizgiyle başlar. Daha fazla bilgi için lütfen -Xlint seçenekleriyle ilgili Javac belgelerine bakın.