Java Kuralları

Sorun bildir Kaynağı göster

Kurallar

java_binary

Kural kaynağını göster
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)

Kuralla aynı ada sahip bir Java arşivi ("jar dosyası") ve bir sarmalayıcı kabuk komut dosyası oluşturur. Sarmalayıcı kabuk komut dosyası, diğer özelliklerinin yanı sıra, ikili programı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ını çalıştırırken boş olmayan tüm JAVABIN ortam değişkenleri, Bazel'in --java_runtime_version işaretiyle belirtilen sürüme göre öncelikli olur.

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

Örtülü çıkış hedefleri

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

    Kuralınız için <name>_deploy.jar hedefi oluşturulduğunda, manifest dosyasıyla bağımsız bir jar dosyası oluşturulur. Bu dosya, java -jar komutuyla veya sarmalayıcı komut dosyasının --singlejar seçeneğiyle çalıştırılmasına olanak tanır. Sarmalayıcı komut dosyası, aynı zamanda JVM işaretlerini ve yerel kitaplıkları yükleme seçeneklerini de ilettiği için java -jar için tercih edilir.

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

    Hedefiniz bir başlatıcı özelliği belirtiyorsa _deploy.jar, normal bir JAR dosyası yerine yerel bir ikili program olur. Bu, başlatıcıyı ve kuralınızın yerel (C++) bağımlılıklarını içerir. Bunların tümü statik bir ikili programdadır. Gerçek jar dosyasının baytları bu yerel ikili programına eklenir ve hem yürütülebilir hem de Java kodunu içeren tek bir ikili blob oluşturulur. Oluşturulan jar dosyasını, herhangi bir yerel ikili programı yürütür gibi doğrudan yürütebilirsiniz.

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

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

Aşağıdaki kod snippet'inde yaygın bir hata gösterilmektedir:

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

Bunun yerine şunu yapın:

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

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.


Uygulamanın ana giriş noktası olan kaynak dosyanın adını (uzantıyı çıkararak) kullanmak önerilir. Örneğin, giriş noktanız Main.java olarak adlandırılırsa adınız Main olabilir.
deps

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

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

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

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

.java türündeki kaynak dosyalar derlendi. Oluşturulan .java dosyaları söz konusu olduğunda genellikle dosyanın adı yerine oluşturma kuralının adını eklemeniz önerilir. Bu, okunabilirliği iyileştirmekle kalmaz, kuralın gelecekteki değişikliklere karşı daha dayanıklı olmasını sağlar. Oluşturma kuralı gelecekte farklı dosyalar oluşturursa yalnızca tek bir şeyi düzeltmeniz gerekir: oluşturma kuralının outs. Oluşturma kuralı işlemsiz olduğundan deps içinde listelememelisiniz.

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

Bir main_class özelliğinin çalışma zamanı sınıf yolunda bir sınıfı belirtmesi veya sizin runtime_deps bağımsız değişkenini belirtmediğiniz durumlar haricinde, bu bağımsız değişken neredeyse her zaman gereklidir.

resources

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

Java jarsına eklenecek veri dosyalarının listesi.

Kaynaklar belirtilirse bunlar, derleme tarafından üretilen her zamanki .class dosyalarıyla birlikte jar içinde paketlenir. Jar dosyasının içindeki kaynakların konumu proje yapısına göre belirlenir. Bazel, öncelikle Maven'in standart dizin düzenini (bir "src" dizini ve ardından "kaynaklar" dizininin alt öğesi) arar. Bu bulunamazsa Bazel, "java" veya "javatests" adlı en üst dizini arar (böylece, örneğin bir kaynak <workspace root>/x/java/y/java/z adresindeyse, kaynağın yolu y/java/z olur. Bu sezgisel işlem geçersiz kılınamaz ancak kaynak dosyaları için belirli bir alternatif dizin belirtmek üzere resource_strip_prefix özelliği kullanılabilir.

Kaynaklar, kaynak dosyalar veya oluşturulmuş dosyalar olabilir.

classpath_resources

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

BAŞKA YOL TARAFINDAN BU SEÇENEĞİ KULLANMAYIN)

Java ağacının kök dizininde bulunması gereken kaynakların listesi. Bu özelliğin tek amacı, kaynaklarının sınıf yolunda tam olarak "myconfig.xml" olarak bulunmasını gerektiren üçüncü taraf kitaplıkları desteklemektir. Ad alanı çakışmaları tehlikesi nedeniyle kitaplıklarda değil, yalnızca ikili programlarda kullanılmasına izin verilir.

create_executable

Boole; yapılandırılabilir değil; varsayılan: True

Kullanımdan kaldırıldı. Bunun yerine java_single_jar kullanın.
deploy_env

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

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

Dize listesi; varsayılan: []

*_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 oluştur" değişikliğine tabi değildir.
javacopts

Dize listesi; varsayılan: []

Bu kitaplık için ek derleyici seçenekleri. "Değişken oluştur" değişikliğine ve Bourne kabuğu belirteçleştirmeye tabidir.

Bu derleyici seçenekleri, javac'ye genel derleyici seçeneklerinden sonra geçirilir.

jvm_flags

Dize listesi; varsayılan: []

Bu ikili programın çalıştırılması için oluşturulan sarmalayıcı komut dosyasına yerleştirilecek işaretlerin listesi. $(location) ile "Değişken oluştur" değişikliğine ve Bourne kabuğu jetona tabidir.

Bir Java ikili programı için sarmalayıcı komut dosyası, bir CLASSPATH tanımı içerir (tüm bağımlı jar'ları bulmak için) ve doğru Java yorumlayıcısını çağırır. Sarmalayıcı komut dosyası tarafından oluşturulan komut satırında, ana sınıfın adı ve ardından "$@" bulunur. Böylece sınıf adından sonra diğer bağımsız değişkenleri aktarabilirsiniz. Ancak JVM ile ayrıştırmaya yönelik 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 hiçbir etkisinin olmadığını unutmayın.

launcher

Etiket; varsayılan değer: None

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

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

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

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

  • Normal JDK başlatıcısını (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 programa bağlanır. Burada {name}, bu java_binary kuralının name özelliğidir. Bu durumda, bağlayıcı, sonuçta elde edilen ikili programdan kullanılmayan olduğunu düşündüğü tüm kodu kaldırır. Diğer bir deyişle, cc_library hedefi alwayslink = 1 değerini belirtmediği sürece yalnızca JNI üzerinden erişilen herhangi bir C++ kodu bağlanamaz.

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

main_class

Dize; varsayılan değer: ""

Giriş noktası olarak kullanılacak main() yöntemine sahip sınıfın adı. Bir kural bu seçeneği kullanıyorsa srcs=[...] listesine ihtiyaç duymaz. Dolayısıyla, bu özellik kullanılarak halihazırda bir veya daha fazla main() yöntemi içeren Java kitaplığından yürütülebilir bir dosya oluşturulabilir.

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

plugins

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

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

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

Kullanımdan kaldırıldı: Bunun yerine java_import ve deps veya work_deps özelliklerini kullanın.
resource_strip_prefix

Dize; varsayılan değer: ""

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

Belirtilirse bu yol ön eki, resources özelliğindeki tüm dosyalardan çıkarılır. Hata, kaynak dosyanın bu dizin altında olmamasıdır. Belirtilmezse (varsayılan) kaynak dosyasının yolu, kaynak dosyaların Java paketi ile aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt adresindeki kaynak dosya foo/bar/a.txt konumunda bulunur.

runtime_deps

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

Yalnızca çalışma zamanında son ikili program veya test için kullanılabilir kitaplıklar. Normal deps gibi bunlar da çalışma zamanı sınıf yolunda görünür ancak bunların aksine derleme zamanı sınıf yolunda görünmez. Yalnızca çalışma zamanında gereken bağımlılıklar burada listelenmelidir. Bağımlılık analizi araçları, hem runtime_deps hem de deps içinde görünen hedefleri yok saymalıdır.
stamp

Tam sayı; varsayılan -1

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile derleme bilgilerini her zaman ikili programa damgalayın. İkili program için uzaktan önbelleğe almayı ve buna bağlı olan aşağı akış işlemlerini potansiyel olarak sonlandırabileceğinden bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu, iyi derleme sonucu önbelleğe alma işlemi sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi, --[no]stamp işaretiyle kontrol edilir.

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

use_launcher

Boole; varsayılan True

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

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

use_testrunner

Boole; varsayılan False

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. Bunu, varsayılan davranışı (java_test kuralları için test çalıştırıcıyı kullanmak ve java_binary kuralları için kullanmamak) geçersiz kılmak için kullanabilirsiniz. Büyük olasılıkla bunu yapmak isteyeceksiniz. Bir kullanım, başka bir kural tarafından çağrılan AllTest kuralları içindir (örneğin, testleri çalıştırmadan önce bir veritabanı oluşturmak için). AllTest kuralının java_binary olarak tanımlanması, ancak yine de ana giriş noktası olarak test çalıştırıcısını kullanması gerekir. Test çalıştırıcı sınıfının adı, main_class özelliğiyle geçersiz kılınabilir.

java_import

Kural kaynağını göster
java_import(name, deps, data, 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

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

Hedefe bağlanacak diğer kitaplıkların listesi. java_library.deps sayfasına bakın.
data

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

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

Dize listesi; varsayılan: []

Bu kitaplığın belirtilen module veya package öğesine erişmesine izin verin.

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

add_opens

Dize listesi; varsayılan: []

Bu kitaplığın, belirtilen module veya package öğesine yansıtıcı olarak erişmesine izin verin.

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

constraints

Dize listesi; varsayılan: []

Bu kurala Java kitaplığı şeklinde getirilen ek kısıtlamalar.
exports

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

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

Etiket listesi; zorunlu

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

Boole; varsayılan False

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

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

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak teknik özellikler açıklanacaktır. Belirtilirse bu kitaplığa bağlı olarak tüm android_binary hedeflerine eklenirler. Burada yer alan dosyalarda yalnızca -dontnote, -dontwarn, assumenosideeffects ve -keep ile başlayan kurallar olmalıdır. Diğer seçenekler, ttolojik olmayan birleştirmeleri sağlamak için yalnızca android_binary'in ProGuard_specs bölümünde görünebilir.
runtime_deps

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

Yalnızca çalışma zamanında son ikili program veya test için kullanılabilir kitaplıklar. Bkz. java_library.runtime_deps.
srcjar

Etiket; varsayılan değer: None

Derlenmiş JAR dosyaları için kaynak kodu içeren bir JAR dosyası.

java_library

Kural kaynağını göster
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ı derler ve bir .jar dosyası olarak bağlar.

Örtülü çıkışlar

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

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

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

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

deps içinde listelenen java_library kuralları tarafından oluşturulan jar'lar, bu kuralın derleme zamanı sınıf yolunda yer alır. Ayrıca deps, runtime_deps ve exports öğelerinin geçişli olarak kapanması çalışma zamanı sınıf yolu üzerinde olacaktır.

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

srcs

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

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

.java türündeki kaynak dosyalar derlendi. Oluşturulan .java dosyaları söz konusu olduğunda genellikle dosyanın adı yerine oluşturma kuralının adını eklemeniz önerilir. Bu, okunabilirliği iyileştirmekle kalmaz, kuralın gelecekteki değişikliklere karşı daha dayanıklı olmasını sağlar. Oluşturma kuralı gelecekte farklı dosyalar oluşturursa yalnızca tek bir yeri düzeltmeniz gerekir: oluşturma kuralının outs. İşlemsiz bir öğe olduğundan, oluşturma kuralını deps içinde listelememelisiniz.

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

.properties türündeki kaynak dosyalar, kaynak olarak kabul edilir.

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 bir hata verilir.

Bu bağımsız değişken, runtime_deps bağımsız değişkenini belirtmediğiniz sürece, neredeyse her zaman gereklidir.

data

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

Bu kitaplık için çalışma zamanında gereken dosyaların listesi. Çoğu derleme kuralı tarafından tanımlanan genel özellikler bölümünde data ile ilgili genel yorumlara göz atın.

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

resources

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

Java jarsına eklenecek veri dosyalarının listesi.

Kaynaklar, kaynak dosyalar veya oluşturulmuş dosyalar olabilir.

Kaynaklar belirtilirse bunlar, derleme tarafından üretilen her zamanki .class dosyalarıyla birlikte jar içinde paketlenir. Jar dosyasının içindeki 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 "kaynaklar" dizininin alt öğesi) arar. Bu bulunamazsa Bazel, "java" veya "javatests" adlı en üst dizini arar (yani, örneğin, bir kaynak <workspace root>/x/java/y/java/z adresindeyse kaynağın yolu y/java/z olur. Bu sezgisel işlem 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: []

Bu kitaplığın belirtilen module veya package öğesine erişmesine izin verin.

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

add_opens

Dize listesi; varsayılan: []

Bu kitaplığın, belirtilen module veya package öğesine yansıtıcı olarak erişmesine izin verin.

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

bootclasspath

Etiket; varsayılan değer: None

Kısıtlanmış API, kullanmayın!
exported_plugins

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

Doğrudan bu kitaplığa bağlı kitaplıklara aktarılacak java_plugin (ör. ek açıklama işlemcileri) listesi.

Belirtilen java_plugin listesi, söz konusu kitaplık bu etiketleri plugins içinde açıkça bildirmiş gibi, doğrudan bu kitaplığa bağlı olan tüm kitaplığa uygulanır.

exports

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

Dışa aktarılan kitaplıklar.

Burada listeleme kuralları, üst kurallar bu kurallara açıkça bağımlıymış gibi bunları üst kuralların kullanımına sunar. Bu, normal (dışa aktarılmayan) deps için geçerli değildir.

Özet: X kuralı, aralarında deps kenarıyla ve ardından sıfır veya daha fazla exports kenarıyla başlayan bir bağımlılık yolu varsa Y kuralındaki koda erişebilir. Bunu açıklamak için birkaç örnek inceleyelim.

A'nın B'ye, B'nin ise C'ye bağlı olduğunu varsayalım. Bu durumda C, A'nın geçişli bir bağımlılığıdır. Dolayısıyla C'nin kaynaklarını değiştirip A'nın yeniden oluşturulması her şeyi doğru şekilde yeniden oluşturur. Ancak A, C'deki sınıfları kullanamaz. Buna imkan tanımak için A'nın deps özelliğinde C'yi bildirmesi gerekir veya B, (B'nin) exports özelliğinde C'yi tanımlayarak A (ve A'ya bağlı olabilecek tüm öğeler) için bunu kolaylaştırabilir.

Dışa aktarılan kitaplıkların tamamı doğrudan üst kurallar tarafından kapatılabilir. Biraz farklı bir örneği ele alalım: A, B'ye bağlıdır; B, C ve D'ye bağlıdır ve ayrıca C'yi dışa aktarır ancak D'yi dışa aktarmaz. A'nın C'ye erişimi vardır ancak D'ye erişemez. Şimdi, C ve D bazı kitaplıkları, yani C' ve D'yi dışa aktardığında A yalnızca C'ye erişebilirken D'ye erişemez.

Önemli: Dışa aktarılan bir kural normal bir bağımlılık değildir. Önceki örneğe göre, B, C'yi dışa aktarıyor ve C'yi de kullanmak istiyorsa bunu kendi deps içinde de listelemesi gerekir.

javabuilder_jvm_flags

Dize listesi; varsayılan: []

Kısıtlanmış API, kullanmayın!
javacopts

Dize listesi; varsayılan: []

Bu kitaplık için ek derleyici seçenekleri. "Değişken oluştur" değişikliğine ve Bourne kabuğu belirteçlerine tabidir.

Bu derleyici seçenekleri, javac'ye genel derleyici seçeneklerinden sonra geçirilir.

Boole; varsayılan False

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

neverlink = 1, derleyicinin Java Dil Spesifikasyonu (ör. String veya temel türlerde static final sabit değeri). Dolayısıyla, çalışma zamanı kitaplığı, derleme kitaplığıyla aynı olduğunda tercih edilen kullanım alanıdır.

Çalışma zamanı kitaplığı, derleme kitaplığından farklıysa yalnızca JLS'nin derleyicilerin satır içi yapmasına izin vermediği (ve JLS'nin gelecekteki tüm sürümleri için geçerli olması gereken) yerlerde farklı olduğundan emin olmanız gerekir.

plugins

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

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

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

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak teknik özellikler açıklanacaktır. Belirtilirse bu kitaplığa bağlı olarak tüm android_binary hedeflerine eklenirler. Burada yer alan dosyalarda yalnızca -dontnote, -dontwarn, assumenosideeffects ve -keep ile başlayan kurallar bulunur. Diğer seçenekler, ttolojik olmayan birleştirmeleri sağlamak için yalnızca android_binary'in ProGuard_specs bölümünde görünebilir.
resource_strip_prefix

Dize; varsayılan değer: ""

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

Belirtilirse bu yol ön eki, resources özelliğindeki tüm dosyalardan çıkarılır. Hata, kaynak dosyanın bu dizin altında olmamasıdır. Belirtilmezse (varsayılan) kaynak dosyasının yolu, kaynak dosyaların Java paketiyle aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt adresindeki kaynak dosya foo/bar/a.txt konumunda bulunur.

runtime_deps

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

Yalnızca çalışma zamanında son ikili program veya test için kullanılabilir kitaplıklar. Sıradan deps gibi bunlar da çalışma zamanı sınıf yolunda görünür, ancak bunların aksine derleme zamanı sınıf yolunda görünmez. Yalnızca çalışma zamanında gereken bağımlılıklar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps içinde görünen hedefleri yok saymalıdır.

java_lite_proto_library

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

java_lite_proto_library, .proto dosyadan Java kodu oluşturur.

deps, proto_library kurallarına işaret etmelidir.

Örnek:


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

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

proto_library(
    name = "bar",
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

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

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

java_proto_library

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

java_proto_library, .proto dosyadan Java kodu oluşturur.

deps, proto_library kurallarına işaret etmelidir.

Örnek:


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

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

proto_library(
    name = "foo_proto",
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

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

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

java_test

Kural kaynağını göster
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 testi derler. Test, test kodunuzun çevresindeki bir ikili sarmalayıcıdır. Derlenen ana sınıf yerine test çalıştırıcının ana yöntemi çağrılır.

Örtülü çıkış hedefleri

  • name.jar: Bir 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 ayrıntı için java_binary kodundaki name_deploy.jar çıkışının açıklamasına bakın.

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

Örnekler



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

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

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

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

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

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

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

.java türündeki kaynak dosyalar derlendi. Oluşturulan .java dosyaları söz konusu olduğunda genellikle dosyanın adı yerine oluşturma kuralının adını eklemeniz önerilir. Bu, okunabilirliği iyileştirmekle kalmaz, kuralın gelecekteki değişikliklere karşı daha dayanıklı olmasını sağlar. Oluşturma kuralı gelecekte farklı dosyalar oluşturursa yalnızca tek bir yeri düzeltmeniz gerekir: oluşturma kuralının outs. İşlemsiz bir öğe olduğundan, oluşturma kuralını deps içinde listelememelisiniz.

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

Bir main_class özelliğinin çalışma zamanı sınıf yolunda bir sınıfı belirtmesi veya sizin runtime_deps bağımsız değişkenini belirtmediğiniz durumlar haricinde, bu bağımsız değişken neredeyse her zaman gereklidir.

data

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

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

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

Java jarsına eklenecek veri dosyalarının listesi.

Kaynaklar, kaynak dosyalar veya oluşturulmuş dosyalar olabilir.

Kaynaklar belirtilirse bunlar, derleme tarafından üretilen her zamanki .class dosyalarıyla birlikte jar içinde paketlenir. Jar dosyasının içindeki 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 "kaynaklar" dizininin alt öğesi) arar. Bu bulunamazsa Bazel, "java" veya "javatests" adlı en üst dizini arar (yani, örneğin, bir kaynak <workspace root>/x/java/y/java/z adresindeyse kaynağın yolu y/java/z olur. Bu sezgisel işlem 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: []

Bu kitaplığın belirtilen module veya package öğesine erişmesine izin verin.

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

add_opens

Dize listesi; varsayılan: []

Bu kitaplığın, belirtilen module veya package öğesine yansıtıcı olarak erişmesine izin verin.

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

bootclasspath

Etiket; varsayılan değer: None

Kısıtlanmış API, kullanmayın!
classpath_resources

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

BAŞKA YOL TARAFINDAN BU SEÇENEĞİ KULLANMAYIN)

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

create_executable

Boole; varsayılan True

Kullanımdan kaldırıldı. Bunun yerine java_single_jar kullanın.
deploy_manifest_lines

Dize listesi; varsayılan: []

*_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 oluştur" değişikliğine tabi değildir.
javacopts

Dize listesi; varsayılan: []

Bu ikili program için ekstra derleyici seçenekleri. "Değişken oluştur" değişikliğine ve Bourne kabuğu belirteçlerine tabidir.

Bu derleyici seçenekleri, javac'ye genel derleyici seçeneklerinden sonra geçirilir.

jvm_flags

Dize listesi; varsayılan: []

Bu ikili programın çalıştırılması için oluşturulan sarmalayıcı komut dosyasına yerleştirilecek işaretlerin listesi. $(location) ile "Değişken oluştur" değişikliğine ve Bourne kabuğu belirteçlerine tabidir.

Bir Java ikili programı için sarmalayıcı komut dosyası, bir CLASSPATH tanımı içerir (tüm bağımlı jar'ları bulmak için) ve doğru Java yorumlayıcısını çağırır. Sarmalayıcı komut dosyası tarafından oluşturulan komut satırında, ana sınıfın adı ve ardından "$@" bulunur. Böylece sınıf adından sonra diğer bağımsız değişkenleri aktarabilirsiniz. Ancak JVM tarafından ayrıştırmaya yönelik 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 hiçbir etkisinin olmadığını unutmayın.

launcher

Etiket; varsayılan değer: None

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

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

İlgili --java_launcher Bazel işareti yalnızca bir launcher özelliği belirtilmemiş 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ısını (varsayılan) kullanıyorsanız yerel bağımlılıklar {name}_nativedeps.so adlı paylaşılan bir kitaplık olarak oluşturulur. Burada {name}, bu java_binary kuralının name özelliğidir. Kullanılmayan kod, bu yapılandırmada bağlayıcı tarafından kaldırılmaz.
  • Başka bir başlatıcı kullanıyorsanız yerel (C++) bağımlılıkları, {name}_nativedeps adlı bir ikili programa statik olarak bağlanır. Burada {name}, bu java_binary kuralının name özelliğidir. Bu durumda, bağlayıcı, sonuçta elde edilen ikili programdan kullanılmayan olduğunu düşündüğü tüm kodu kaldırır. Diğer bir deyişle, cc_library hedefi alwayslink = 1 değerini belirtmediği sürece yalnızca JNI üzerinden erişilen herhangi bir C++ kodu bağlanamaz.

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

main_class

Dize; varsayılan değer: ""

Giriş noktası olarak kullanılacak main() yöntemine sahip sınıfın adı. Bir kural bu seçeneği kullanıyorsa srcs=[...] listesine ihtiyaç duymaz. Dolayısıyla, bu özellikle, zaten bir veya daha fazla main() yöntemi içeren bir Java kitaplığından yürütülebilir bir dosya oluşturulabilir.

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

Boole; varsayılan False

plugins

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

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

Dize; varsayılan değer: ""

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

Belirtilirse bu yol ön eki, resources özelliğindeki tüm dosyalardan çıkarılır. Hata, kaynak dosyanın bu dizin altında olmamasıdır. Belirtilmezse (varsayılan) kaynak dosyasının yolu, kaynak dosyaların Java paketiyle aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt adresindeki kaynak dosya foo/bar/a.txt konumunda bulunur.

runtime_deps

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

Yalnızca çalışma zamanında son ikili program veya test için kullanılabilir kitaplıklar. Sıradan deps gibi bunlar da çalışma zamanı sınıf yolunda görünür, ancak bunların aksine derleme zamanı sınıf yolunda görünmez. Yalnızca çalışma zamanında gereken bağımlılıklar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps içinde görünen hedefleri yok saymalıdır.
stamp

Tam sayı; varsayılan 0

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile derleme bilgilerini her zaman ikili programa damgalayın. İkili program için uzaktan önbelleğe almayı ve buna bağlı olan aşağı akış işlemlerini potansiyel olarak sonlandırabileceğinden bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu, iyi derleme sonucu önbelleğe alma işlemi sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi, --[no]stamp işaretiyle kontrol edilir.

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

test_class

Dize; varsayılan değer: ""

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

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

Bu özellik, bu test tarafından çalıştırılacak Java sınıfının adını belirtir. Bu ayarın ayarlanması nadiren gerekir. Bu bağımsız değişken atlanırsa hedefin name ve kaynağa göreli yolu kullanılarak tahmin edilir. Test, bilinen bir kaynak kökün dışında yer alıyorsa 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öntemine sahip olması gerekir. JUnit4 için, sınıfa org.junit.runner.RunWith ek açıklaması eklenmelidir.

Bu özellik, birkaç java_test kuralının aynı Test öğesini (TestCase, TestSuite, ...) paylaşmasına izin verir. Genellikle ek bilgiler iletilir (ör.jvm_flags=['-Dkey=value'] aracılığıyla). Böylece, testlerin farklı bir alt kümesinin çalıştırılması gibi her iki durumun davranışı her durumda farklılık gösterir. Bu özellik, javatests ağacı dışında Java testlerinin kullanılmasını da sağlar.

use_launcher

Boole; varsayılan True

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

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

use_testrunner

Boole; varsayılan True

Bir Java programının ana giriş noktası olarak test çalıştırıcı (varsayılan olarak com.google.testing.junit.runner.BazelTestRunner) sınıfını kullanın ve test sınıfını bazel.test_suite sistem özelliğinin değeri olarak test çalıştırıcıya sağlayın.
Bu ayarı, test çalıştırıcıyı java_test kuralları için kullanma ve java_binary kuralları için kullanmama şeklindeki varsayılan davranışı geçersiz kılmak için kullanabilirsiniz. Büyük olasılıkla bunu yapmak isteyeceksinizdir. Bir kullanım, başka bir kural tarafından çağrılan AllTest kuralları içindir (örneğin, testleri çalıştırmadan önce bir veritabanı oluşturmak için). AllTest kuralı 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öster
java_package_configuration(name, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, javacopts, output_licenses, packages, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

Bir paket grubuna uygulanacak yapılandırma. Yapılandırmalar java_toolchain.javacopts alanlarına eklenebilir.

Örnek:



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

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

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


Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

data

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

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

Dize listesi; varsayılan: []

Java derleyici işaretleri.
output_licenses

Dize listesi; varsayılan: []

packages

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

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

java_plugin

Kural kaynağını göster
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. Şu anda desteklenen tek eklenti türü ek açıklama işlemcileridir. java_library veya java_binary kuralı, plugins özelliği aracılığıyla eklentilere bağlı olarak çalıştırabilir. Ayrıca java_library, exported_plugins yardımıyla eklentileri doğrudan ona bağlı olan kitaplıklara otomatik olarak aktarabilir.

Örtülü çıkış hedefleri

  • libname.jar: Bir Java arşivi.

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

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

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

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

deps içinde listelenen java_library kuralları tarafından oluşturulan jar'lar, bu kuralın derleme zamanı sınıf yolunda yer alır. Ayrıca deps, runtime_deps ve exports öğelerinin geçişli olarak kapanması çalışma zamanı sınıf yolu üzerinde olacaktır.

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

srcs

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

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

.java türündeki kaynak dosyalar derlendi. Oluşturulan .java dosyaları söz konusu olduğunda genellikle dosyanın adı yerine oluşturma kuralının adını eklemeniz önerilir. Bu, okunabilirliği iyileştirmekle kalmaz, kuralın gelecekteki değişikliklere karşı daha dayanıklı olmasını sağlar. Oluşturma kuralı gelecekte farklı dosyalar oluşturursa yalnızca tek bir yeri düzeltmeniz gerekir: oluşturma kuralının outs. İşlemsiz bir öğe olduğundan, oluşturma kuralını deps içinde listelememelisiniz.

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

.properties türündeki kaynak dosyalar, kaynak olarak kabul edilir.

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 bir hata verilir.

Bu bağımsız değişken, runtime_deps bağımsız değişkenini belirtmediğiniz sürece, neredeyse her zaman gereklidir.

data

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

Bu kitaplık için çalışma zamanında gereken dosyaların listesi. Çoğu derleme kuralı tarafından tanımlanan genel özellikler bölümünde data ile ilgili genel yorumlara göz atın.

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

resources

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

Java jarsına eklenecek veri dosyalarının listesi.

Kaynaklar, kaynak dosyalar veya oluşturulmuş dosyalar olabilir.

Kaynaklar belirtilirse bunlar, derleme tarafından üretilen her zamanki .class dosyalarıyla birlikte jar içinde paketlenir. Jar dosyasının içindeki 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 "kaynaklar" dizininin alt öğesi) arar. Bu bulunamazsa Bazel, "java" veya "javatests" adlı en üst dizini arar (yani, örneğin, bir kaynak <workspace root>/x/java/y/java/z adresindeyse kaynağın yolu y/java/z olur. Bu sezgisel işlem 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: []

Bu kitaplığın belirtilen module veya package öğesine erişmesine izin verin.

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

add_opens

Dize listesi; varsayılan: []

Bu kitaplığın, belirtilen module veya package öğesine yansıtıcı olarak erişmesine izin verin.

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

bootclasspath

Etiket; varsayılan değer: None

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

Boole; varsayılan False

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

Bir kural API oluşturan bir ek açıklama işlemcisi kullanıyorsa bu işleme bağlı olan diğer kurallar, yalnızca derleme işlemleri oluşturma kuralından sonra programlanmışsa oluşturulan koda referans verebilir. Bu özellik, Bazel'a java_header_compilation etkinleştirildiğinde zamanlama kısıtlamaları getirmesini söyler.

UYARI: Bu özellik, derleme performansını etkiler. Yalnızca gerekli olduğunda kullanın.

javabuilder_jvm_flags

Dize listesi; varsayılan: []

Kısıtlanmış API, kullanmayın!
javacopts

Dize listesi; varsayılan: []

Bu kitaplık için ek derleyici seçenekleri. "Değişken oluştur" değişikliğine ve Bourne kabuğu belirteçlerine tabidir.

Bu derleyici seçenekleri, javac'ye genel derleyici seçeneklerinden sonra geçirilir.

Boole; varsayılan False

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

neverlink = 1, derleyicinin Java Dil Spesifikasyonu (ör. String veya temel türlerde static final sabit değeri). Dolayısıyla, çalışma zamanı kitaplığı, derleme kitaplığıyla aynı olduğunda tercih edilen kullanım alanıdır.

Çalışma zamanı kitaplığı, derleme kitaplığından farklıysa yalnızca JLS'nin derleyicilerin satır içi yapmasına izin vermediği (ve JLS'nin gelecekteki tüm sürümleri için geçerli olması gereken) yerlerde farklı olduğundan emin olmanız gerekir.

output_licenses

Dize listesi; varsayılan: []

plugins

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

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

Dize; varsayılan değer: ""

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

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

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak teknik özellikler açıklanacaktır. Belirtilirse bu kitaplığa bağlı olarak tüm android_binary hedeflerine eklenirler. Burada yer alan dosyalarda yalnızca -dontnote, -dontwarn, assumenosideeffects ve -keep ile başlayan kurallar olmalıdır. Diğer seçenekler, ttolojik olmayan birleştirmeleri sağlamak için yalnızca android_binary'in ProGuard_specs bölümünde görünebilir.
resource_strip_prefix

Dize; varsayılan değer: ""

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

Belirtilirse bu yol ön eki, resources özelliğindeki tüm dosyalardan çıkarılır. Hata, kaynak dosyanın bu dizin altında olmamasıdır. Belirtilmezse (varsayılan) kaynak dosyasının yolu, kaynak dosyaların Java paketiyle aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt adresindeki kaynak dosya foo/bar/a.txt konumunda bulunur.

java_runtime

Kural kaynağını göster
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

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

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

Etiket; varsayılan değer: None

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

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

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

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

Hermetik dağıtımlar için başlatıcıya statik olarak bağlı kitaplıklar
java

Etiket; varsayılan değer: None

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

Dize; varsayılan değer: ""

Çalışma zamanının köküne giden yol. "Değişken yap" değişikliğine tabidir. Bu yol mutlaksa kural, iyi bilinen bir yola sahip hermetik olmayan Java çalışma zamanını belirtir. Bu durumda, srcs ve java özellikleri boş olmalıdır.
lib_ct_sym

Etiket; varsayılan değer: None

--release ile derleme için gereken lib/ct.sym dosyası. Belirtilmezse ve srcs bölgesinde yolu /lib/ct.sym ile biten tam olarak bir dosya varsa bu dosya kullanılır.
lib_modules

Etiket; varsayılan değer: None

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

Dize listesi; varsayılan: []

version

Tam sayı; varsayılan 0

Java çalışma zamanının özellik sürümü. Diğer bir deyişle, Runtime.version().feature() tarafından döndürülen tam sayı.

java_toolchain

Kural kaynağını göster
java_toolchain(name, android_lint_data, android_lint_jvm_opts, android_lint_opts, android_lint_package_configuration, android_lint_runner, bootclasspath, compatible_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_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ç zinciri, --java_toolchain bağımsız değişkeniyle değiştirilebilir. Normalde, Java derleyicinizi ayarlamak istemiyorsanız bu tür kurallar yazmamalısınız.

Örnekler

Aşağıda basit bir örnek verilmiştir:



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

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

android_lint_data

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

android_lint_jvm_opts içinde etiket genişletme için kullanılabilecek araç etiketleri.
android_lint_jvm_opts

Dize listesi; varsayılan: []

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

Dize listesi; varsayılan: []

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

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

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

Etiket; varsayılan değer: None

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

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

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

null; default is {}

Dahili API, kullanmayın!
deps_checker

Etiket; varsayılan değer: None

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

Boole; varsayılan False

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

Etiket; varsayılan değer: None

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

Etiket; varsayılan değer: None

Üstbilgi derleyicisinin etiketi. --java_header_compilation etkinse gereklidir.
header_compiler_builtin_processors

Dize listesi; varsayılan: []

Dahili API, kullanmayın!
header_compiler_direct

Etiket; varsayılan değer: None

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

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

ijar

Etiket; varsayılan değer: None

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

Etiket; varsayılan değer: None

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

Etiket; varsayılan değer: None

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

Etiket; varsayılan değer: None

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

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

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

Dize listesi; varsayılan: []

JavaBuilder çağrılırken JVM'nin bağımsız değişkenlerinin listesi.
javac_supports_multiplex_workers

Boole; varsayılan True

JavaBuilder Multiplex kalıcı çalışan olarak çalışmayı destekliyorsa doğru, desteklemiyorsa false değerini alır.
javac_supports_worker_cancellation

Boole; varsayılan True

JavaBuilder kalıcı çalışanların iptalini destekliyorsa doğru değerini, desteklemiyorsa false (yanlış) değerini alır.
javac_supports_worker_multiplex_sandboxing

Boole; varsayılan False

JavaBuilder korumalı alana sahip bir multiplex kalıcı çalışan olarak çalışmayı destekliyorsa doğru, desteklemiyorsa false.
javac_supports_workers

Boole; varsayılan True

JavaBuilder kalıcı çalışan olarak çalışmayı destekliyorsa doğru değerini, desteklemiyorsa yanlış değerini alır.
javacopts

Dize listesi; varsayılan: []

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

Deneyseldir. Kullanmayın.
jspecify_javacopts

Dize listesi; varsayılan: []

Deneyseldir. Kullanmayın.
jspecify_packages

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

Deneyseldir. Kullanmayın.
jspecify_processor

Etiket; varsayılan değer: None

Deneyseldir. Kullanmayın.
jspecify_processor_class

Dize; varsayılan değer: ""

Deneyseldir. Kullanmayın.
jspecify_stubs

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

Deneyseldir. Kullanmayın.
jvm_opts

Dize listesi; varsayılan: []

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

Dize listesi; varsayılan: []

Kullanımdan kaldırıldı: Bunun yerine javacopts kullanın
oneversion

Etiket; varsayılan değer: None

Tek sürüm zorunlu kılma ikili programının etiketi.
oneversion_allowlist_for_tests

Etiket; varsayılan değer: None

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

Etiket; varsayılan değer: None

Tek sürüm izin verilenler listesinin etiketi.
package_configuration

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

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

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

ProGuard izin verilenler listesinin etiketi.
reduced_classpath_incompatible_processors

Dize listesi; varsayılan: []

Dahili API, kullanmayın!
singlejar

Etiket; varsayılan değer: None

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

Dize; varsayılan değer: ""

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

Dize; varsayılan değer: ""

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

Etiket; varsayılan değer: None

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

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

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

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

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

Dize listesi; varsayılan: []

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

Dize listesi; varsayılan: []

Varsayılan listeye eklenecek veya varsayılan listeden kaldırılacak uyarıların listesi. Başında bir kısa çizgi bulunur, bu öğe kaldırılır. Daha fazla bilgi için lütfen -Xlint seçenekleri hakkında Javac belgelerine bakın.