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


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

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 koymanız önerilir. Bu, okunabilirliği artırmakla kalmaz, kuralın gelecekteki değişikliklere karşı daha dayanıklı olmasını sağlar: 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'te listelemeniz gerekmez çünkü bu işlem hiçbir şey yapmaz.

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

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

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

resources

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

Java jar 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 ö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 sezgisel kural geçersiz kılınamaz ancak resource_strip_prefix özelliği, kaynak dosyalar için belirli bir alternatif dizin belirtmek üzere kullanılabilir.

Kaynaklar kaynak dosyalar veya oluşturulan dosyalar olabilir.

classpath_resources

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

BAŞKA 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 []'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'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ı, 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 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 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

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_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 kaldırılır. Bir kaynak dosyasının bu dizinin altında olmaması hatadır. Belirtilmemişse (varsayılan) kaynak dosyaların Java paketiyle aynı mantıka göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt 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 bunların aksine derleme zamanı sınıf yolu üzerinde görünmez. Yalnızca çalışma zamanında ihtiyaç duyulan bağımlılar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps'te görünen hedefleri yoksamalıdır.
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ı 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. Ö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

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

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

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, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exported_plugins, exports, features, javacopts, licenses, neverlink, plugins, proguard_specs, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, tags, target_compatible_with, testonly, visibility)

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

Örtülü çıkış hedefleri

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

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

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

.java türündeki kaynak dosyalar derlenir. Oluşturulan .java dosyalarında genellikle dosyanın adı yerine, dosyayı oluşturan kuralın adını buraya koymanız önerilir. Bu, okunabilirliği artırmakla kalmaz, kuralın gelecekteki değişikliklere karşı daha dayanıklı olmasını sağlar: 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'te listelemeniz gerekmez çünkü bu işlem hiçbir şey yapmaz.

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

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

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

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 ö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 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ğlı 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

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'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. static final sabitleri veya ilkel türler)String 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).

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ştirmelerden emin olmak için yalnızca android_binary'nın proguard_specs dosyasında görünebilir.
resource_jars

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

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

Dize; varsayılan değer ""'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 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 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 bunların aksine derleme zamanı sınıf yolu üzerinde görünmez. Yalnızca çalışma zamanında ihtiyaç duyulan bağımlılar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps'te görünen hedefleri yoksamalıdır.

java_lite_proto_library

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

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

deps, proto_library kurallarına yönlendirmelidir.

Örnek:

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

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

proto_library(
    name = "bar",
)

Bağımsız değişkenler

Özellikler
name

Ad; 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_proto_library

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

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

deps, proto_library kurallarına yönlendirmelidir.

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

.java türündeki kaynak dosyalar derlenir. Oluşturulan .java dosyalarında genellikle dosyanın adı yerine, dosyayı oluşturan kuralın adını buraya koymanız önerilir. Bu, okunabilirliği artırmakla kalmaz, kuralın gelecekteki değişikliklere karşı daha dayanıklı olmasını sağlar: 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'te listelemeniz gerekmez çünkü bu işlem hiçbir şey yapmaz.

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

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

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

resources

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

Java jar 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 ö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 sezgisel kural geçersiz kılınamaz ancak resource_strip_prefix özelliği, kaynak dosyalar için belirli bir alternatif dizin belirtmek üzere kullanılabilir.

Kaynaklar kaynak dosyalar veya oluşturulan dosyalar olabilir.

classpath_resources

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

BAŞKA 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_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'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ı, 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 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 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

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_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 kaldırılır. Bir kaynak dosyasının bu dizinin altında olmaması hatadır. Belirtilmemişse (varsayılan) kaynak dosyaların Java paketiyle aynı mantıka göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt 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 bunların aksine derleme zamanı sınıf yolu üzerinde görünmez. Yalnızca çalışma zamanında ihtiyaç duyulan bağımlılar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps'te görünen hedefleri yoksamalıdır.
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 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ı 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 jvm_flags=['-Dkey=value'] aracılığıyla ek bilgiler 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ı 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. Ö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_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'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.
packages

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

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

java_plugin

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

java_plugin, Bazel tarafından çalıştırılan Java derleyicisi için eklentileri tanımlar. Şu anda 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, 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ı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. Aşağıdaki istisnaları inceleyin.

.java türündeki kaynak dosyalar derlenir. Oluşturulan .java dosyalarında genellikle dosyanın adı yerine, dosyayı oluşturan kuralın adını buraya koymanız önerilir. Bu, okunabilirliği artırmakla kalmaz, kuralın gelecekteki değişikliklere karşı daha dayanıklı olmasını sağlar: 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'te listelemeniz gerekmez çünkü bu işlem hiçbir şey yapmaz.

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

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

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

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 ö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 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ş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.

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. static final sabitleri veya ilkel türler)String 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"]'tür.

common attributes adresine göz atın.
plugins

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

Derleme zamanında çalışacak Java derleyicisi eklentileri. Bu özellikte belirtilen her java_plugin, bu kural derlendiğinde çalıştırılır. Bir kitaplık, exported_plugins kullanan bağımlılıklardan 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, 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

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

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 kaldırılır. Bir kaynak dosyasının bu dizinin altında olmaması hatadır. Belirtilmemişse (varsayılan) kaynak dosyaların Java paketiyle aynı mantıka göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt 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

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 mod 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'ına paketlenir.
hermetic_srcs

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

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

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

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

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

Çalışma zamanının köküne giden yol. "Make" değişkeni yerine getirilebilir. 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_worker_multiplex_sandboxing, javac_supports_workers, javacopts, jvm_opts, licenses, oneversion, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, proguard_allowlister, resourcejar, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, tools, turbine_data, turbine_jvm_opts, visibility, xlint)

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

Etiketler listesi; zorunlu

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

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

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

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

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

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

ijar

Etiketler listesi; zorunlu

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

Etiket; varsayılan değer None'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 çoklu kalıcı işleyici olarak çalışmayı destekliyorsa doğru, desteklemiyorsa yanlış değerini döndürür.
javac_supports_worker_multiplex_sandboxing

Boole; varsayılan değer False'tir

JavaBuilder çoklu korumalı alan özelliğini 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.
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 ikilisinin etiketi.
oneversion_allowlist_for_tests

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

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

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

Tek sürümlü beyaz listenin 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

Etiketler listesi; zorunlu

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

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

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

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

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

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

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 önüne kısa çizgi ekleyin. Daha fazla bilgi için lütfen -Xlint seçenekleriyle ilgili Javac belgelerine bakın.