Java Kuralları

Sorun bildirin.3 2.02}332}12/}22}18}

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)

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ğer özelliklerinin yanı sıra ikili programın bağlı olduğu her kitaplık için bir jar dosyası içeren sınıf yolu kullanır. Sarmalayıcı kabuk komut dosyası çalıştırılı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.

Dolaylı çı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ıma uygun bir Java arşivi (yalnızca açıkça talep edildiğinde oluşturulur).

    Kuralınız için <name>_deploy.jar hedefi derlediğinizde, dosyanın java -jar komutuyla veya sarmalayıcı komut dosyasının --singlejar seçeneğiyle çalıştırılmasına izin veren bir manifest içeren bağımsız bir jar dosyası oluşturulur. java -jar, JVM işaretlerini ve yerel kitaplıkları yükleme seçeneklerini de ilettiği için sarmalayıcı komut dosyasının kullanılması tercih edilir.

    Dağıtım deposu, sınıf yolunu ikili programın sarmalayıcı komut dosyasından sonuna kadar arayan bir sınıf yükleyici tarafından bulunabilecek tüm sınıfları içerir. Ayrıca bağımlılıklar için gereken yerel kitaplıkları da içerir. Bunlar, çalışma zamanında 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. Bu bağımlılıkların tümü, statik bir ikili program kapsamındadır. Gerçek jar dosyasının baytları bu yerel ikili programa eklenerek hem yürütülebilir hem de Java kodunu içeren tek bir ikili blob oluşturulur. Oluşturulan jar dosyasını, herhangi bir yerel ikili programı yürütür gibi doğrudan çalıştırabilirsiniz.

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

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

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

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

Bunun yerine şunu yapın:

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

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.


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

Etiket listesi; varsayılan []

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

Etiket listesi; varsayılan []

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

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

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

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

Bu bağımsız değişken, bir main_class özelliğinin çalışma zamanı sınıf yolunda bir sınıf belirttiği veya runtime_deps bağımsız değişkenini belirttiğiniz durumlar dışında neredeyse her zaman gereklidir.

resources

Etiket listesi; varsayılan []

Java jar'a dahil edilecek veri dosyalarının listesi.

Kaynaklar belirtilirse, derleme tarafından üretilen normal .class dosyalarıyla birlikte kavanozda paketlenir. Jar dosyasının içindeki kaynakların konumu proje yapısına göre belirlenir. Bazel ilk olarak Maven'in standart dizin düzenini ("src" dizini ve ardından gelen "kaynaklar" dizininin torunu) arar. Bu bulunmazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar. Dolayısıyla, örneğin bir kaynak <workspace root>/x/java/y/java/z adresindeyse kaynağın yolu y/java/z olur. Bu buluşsal kural geçersiz kılınamaz ancak kaynak dosyaları için belirli bir alternatif dizini belirtmek amacıyla resource_strip_prefix özelliği kullanılabilir.

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

classpath_resources

Etiket listesi; varsayılan []

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

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

create_executable

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

Kullanımdan kaldırıldı, bunun yerine java_single_jar politikasını kullanın.
deploy_env

Etiket listesi; varsayılan []

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 özelliğin ayarlanması, bu ikili programın çalışma zamanı sınıf yolundan (ve dağıtım jar'ından) ve bu ikili program ile deploy_env politikasında belirtilen hedefler arasında paylaşılan tüm bağımlılıkları hariç tutar.
deploy_manifest_lines

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

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

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

Bu kitaplık için ek derleyici seçenekleri. "Değişken oluşturma" değişikliğine ve Bourne kabuk belirtkelemeye tabidir.

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

jvm_flags

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

Bu ikili programı çalıştırmak için oluşturulmuş sarmalayıcı komut dosyasına yerleştirilecek işaretlerin listesi. $(location) ve "Değişken yap" değişikliği ile Bourne kabuk belirtkeleme'ye tabidir.

Java ikili programı için sarmalayıcı komut dosyası, bir CLASSPATH tanımı içerir (tüm bağımlı jar'ları bulmak için) ve doğru Java yorumlayıcısını çağırır. Sarmalayıcı komut dosyası tarafından oluşturulan komut satırı, ana sınıfın adını ve ardından bir "$@" içerir. Böylece sınıf adından sonra diğer bağımsız değişkenleri iletebilirsiniz. Bununla birlikte, JVM tarafından ayrıştırılması amaçlanan 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

JDK'da yer alan normal bin/java programı yerine Java programınızı çalıştırmak için kullanılacak bir 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ıyı (bin/Java veya java.exe) kullanır.

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

JDK başlatıcıyı mı yoksa başka bir başlatıcıyı mı kullandığınıza bağlı olarak yerel (C++, SWIG, JNI) bağımlılıklarınızın farklı şekilde oluşturulacağını unutmayın:

  • Normal JDK başlatıcıyı (varsayılan) kullanıyorsanız yerel bağımlılıklar {name}_nativedeps.so adlı paylaşılan bir kitaplık olarak oluşturulur. Burada {name}, bu java_binary kuralının name özelliğidir. Kullanılmayan kod, bu yapılandırmada bağlayıcı tarafından kaldırılmaz.
  • Başka bir başlatıcı kullanıyorsanız yerel (C++) bağımlılıkları {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ı, kullanılmadığını düşündüğü kodları elde edilen ikili programdan kaldırır. Diğer bir deyişle, cc_library hedefi alwayslink = 1 değerini belirtmedikçe yalnızca JNI aracılığıyla erişilen herhangi bir C++ kodu bağlanmayabilir.

Varsayılan JDK başlatıcı dışında herhangi bir başlatıcı kullanılı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. Böylece, bu özellikle 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 bir kaynak dosya değil, sınıf adıdır. Sınıf, çalışma zamanında kullanılabilir olmalıdır: Bu kural tarafından (srcs kaynağından) derlenebilir veya doğrudan ya da geçişli bağımlılıklarla (runtime_deps veya deps aracılığıyla) sağlanabilir. Sınıf yoksa ikili program çalışma zamanında başarısız olur. Derleme zamanı kontrolü yapılmaz.

plugins

Etiket listesi; varsayılan []

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

Etiket listesi; varsayılan []

Desteği sonlandırıldı: Bunun yerine java_import ve deps veyaworkspace_deps öğelerini 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 her dosyadan çıkarılır. Bu, kaynak dosyasının bu dizinde olmamasıyla ilgili bir hatadır. Belirtilmezse (varsayılan) kaynak dosyasının yolu, Java paketinin kaynak dosyalarıyla aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt konumundaki bir kaynak dosya foo/bar/a.txt konumunda bulunur.

runtime_deps

Etiket listesi; varsayılan []

Son ikili program veya yalnızca çalışma zamanında test için kullanılacak kitaplıklar. Normal deps gibi bu komutlar da çalışma zamanı sınıf yolunda görünür ancak bunlardan farklı olarak derleme zamanı sınıf yolunda görünmez. Yalnızca çalışma zamanında gereken bağımlılıklar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps içinde görünen hedefleri yoksaymalıdır.
stamp

Tam sayı; varsayılan değer -1

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağını belirler. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile, derleme bilgilerini her zaman ikili programda damgalayın. Potansiyel olarak ikili program ve buna bağlı tüm aşağı akış işlemleri için uzaktan önbelleğe almayı sonlandıracağından bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu yöntem, derleme sonucunu önbelleğe alma konusunda iyi bir sonuç verir.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işaretiyle kontrol edilir.

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

use_launcher

Boole; varsayılan değer True

İ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 yoksayılır.

use_testrunner

Boole; varsayılan değer 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ı test çalıştırıcıya bazel.test_suite sistem özelliğinin değeri olarak sağlayın. Bunu varsayılan davranışı (java_test kuralları için test çalıştırıcısı ile java_binary kurallarında kullanmamak) geçersiz kılmak için kullanabilirsiniz. Bunu yapmak istemeyeceksiniz. Bir kullanım, başka bir kural tarafından çağrılan AllTest kuralları içindir (örneğin, testleri çalıştırmadan önce bir veritabanı oluşturmak için). AllTest kuralı, java_binary olarak tanımlanmalı ancak yine de test çalıştırıcıyı ana giriş noktası olarak kullanmalıdır. 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, compatible_with, constraints, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, proguard_specs, restricted_to, runtime_deps, srcjar, tags, target_compatible_with, testonly, visibility)

Bu kural, önceden derlenmiş .jar dosyalarının java_library ve java_binary kuralları için kitaplık olarak kullanılmasına izin verir.

Örnekler

    java_import(
        name = "maven_model",
        jars = [
            "maven_model/maven-aether-provider-3.2.3.jar",
            "maven_model/maven-model-3.2.3.jar",
            "maven_model/maven-model-builder-3.2.3.jar",
        ],
    )

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

Hedefe bağlanacak diğer kitaplıkların listesi. java_library.deps sayfasına göz atın.
constraints

Dize listesi; yapılandırılabilir olmayan; varsayılan []

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

Etiket listesi; varsayılan []

Bu kuralın kullanıcılarına sunulacak hedefler. java_library.exports'u inceleyin.
jars

Etiket listesi; zorunlu

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

Boole; varsayılan değer 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 JDK üzerinde çalışan her şey için tools.jar verilebilir.
proguard_specs

Etiket listesi; varsayılan []

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak spesifikasyonlar açıklanır. Belirtilirse bu kitaplığa bağlı olarak herhangi bir android_binary hedefine eklenir. Buraya dahil edilen dosyaların yalnızca idempotent kuralları, yani -dontnote, -dontwarn, kindnosideeffects ve -keep ile başlayan kuralları olmalıdır. Diğer seçenekler, totoolojik olmayan birleştirmeleri sağlamak için yalnızca android_binary proGuard_specs içinde görünebilir.
runtime_deps

Etiket listesi; varsayılan []

Son ikili program veya yalnızca çalışma zamanında test için kullanılacak kitaplıklar. java_library.runtime_deps kitaplığına göz atın.
srcjar

Etiket; varsayılan değer None

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

java_library

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

Dolaylı çıkış hedefleri

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

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

Bu kitaplığa bağlanacak kitaplıkların listesi. Çoğu derleme kuralı tarafından tanımlanan tipik özellikler sayfasında deps ile ilgili genel yorumlara göz atın.

deps 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 kapatılması, çalışma zamanı sınıf yolunda olacaktır.

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

srcs

Etiket listesi; varsayılan []

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

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

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

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

Bu bağımsız değişken, bir main_class özelliğinin çalışma zamanı sınıf yolunda bir sınıf belirttiği veya runtime_deps bağımsız değişkenini belirttiğiniz durumlar dışında neredeyse her zaman gereklidir.

data

Etiket listesi; varsayılan []

Çalışma zamanında bu kitaplığın ihtiyaç duyduğu dosyaların listesi. Çoğu derleme kuralı tarafından tanımlanan tipik özellikler sayfasında data ile ilgili genel yorumlara göz atın.

java_library oluştururken Bazel bu dosyaları herhangi bir yere koymaz. data dosyaları oluşturulmuşsa Bazel bunları oluşturur. Bu java_library öğesine dayalı bir test oluştururken Bazel, data dosyalarını çalıştırma dosyaları alanına kopyalar veya bağlar.

resources

Etiket listesi; varsayılan []

Java jar'a dahil edilecek veri dosyalarının listesi.

Kaynaklar belirtilirse, derleme tarafından üretilen normal .class dosyalarıyla birlikte kavanozda paketlenir. Jar dosyasının içindeki kaynakların konumu proje yapısına göre belirlenir. Bazel ilk olarak Maven'in standart dizin düzenini ("src" dizini ve ardından gelen "kaynaklar" dizininin torunu) arar. Bu bulunmazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar. Dolayısıyla, örneğin bir kaynak <workspace root>/x/java/y/java/z adresindeyse kaynağın yolu y/java/z olur. Bu buluşsal kural geçersiz kılınamaz ancak kaynak dosyaları için belirli bir alternatif dizini belirtmek amacıyla resource_strip_prefix özelliği kullanılabilir.

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

exported_plugins

Etiket listesi; varsayılan []

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

Belirtilen java_plugin listesi, doğrudan bu kitaplığa bağlı olan herhangi bir kitaplığa, sanki o kitaplık bu etiketleri plugins içinde açıkça bildirmiş gibi uygulanır.

exports

Etiket listesi; varsayılan []

Dışa aktarılan kitaplıklar.

Burada listeleme kuralları, üst kurallar bu kurallara açık bir şekilde bağlıymış gibi bu kuralları üst kurallarda kullanılabilir hale getirir. Bu, normal (dışa aktarılmayan) deps için geçerli değildir.

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

A'nın B'ye, B'nin ise C'ye bağlı olduğunu varsayın. 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'yı yeniden oluşturmak her şeyi doğru şekilde yeniden oluşturur. Ancak A, C sınıfındaki sınıfları kullanamaz. Bunu sağlamak için ya A'nın deps içinde C'yi belirtmesi gerekir ya da B, C'yi (B'nin) exports özelliğinde belirterek A'nın (ve A'ya bağlı olabilecek her şeyin) işini kolaylaştırabilir.

Dışa aktarılan kitaplıklar, tüm doğrudan üst kurallar tarafından kapatılabilir. Biraz farklı bir örnek ele alalım: A, B'ye bağlıdır, B, C ve D'ye bağlıdır ve C'yi de dışa aktarır ancak D'yi dışa aktarmaz. Artık A, C'ye erişebilir ancak D'ye erişemez. Bu durumda, C ve D bazı kitaplıkları dışa aktardıysa, sırasıyla C' ve D'yi dışa aktardığında A yalnızca C'ye erişebilir, D'ye erişemez.

Önemli: Dışa aktarılan kurallar normal bir bağımlılık değildir. Önceki örneğe devam edersek B, C'yi dışa aktarır ve C'yi de kullanmak isterse bunu kendi deps içinde listelemesi gerekir.

javacopts

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

Bu kitaplık için ek derleyici seçenekleri. "Değişken oluşturma" değişikliğine ve Bourne kabuk belirtkelemeye tabidir.

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

Boole; varsayılan değer 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 JDK üzerinde çalışan her şey için tools.jar verilebilir.

neverlink = 1 yönergesinin, derleyicinin bu kitaplıktaki materyalleri, Java Dil Spesifikasyonu (ör. String veya temel türlerin static final sabitleridir). Bu nedenle, tercih edilen kullanım alanı, çalışma zamanı kitaplığının derleme kitaplığıyla aynı olmasıdır.

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

plugins

Etiket listesi; varsayılan []

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

Etiket listesi; varsayılan []

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak spesifikasyonlar açıklanır. Belirtilirse bu kitaplığa bağlı olarak herhangi bir android_binary hedefine eklenir. Buraya dahil edilen dosyaların yalnızca idempotent kuralları, yani -dontnote, -dontwarn, kindnosideeffects ve -keep ile başlayan kuralları olmalıdır. Diğer seçenekler, totoolojik olmayan birleştirmeleri sağlamak için yalnızca android_binary proGuard_specs içinde görünebilir.
resource_jars

Etiket listesi; varsayılan []

Desteği sonlandırıldı: Bunun yerine java_import ve deps veyaworkspace_deps öğelerini 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 her dosyadan çıkarılır. Bu, kaynak dosyasının bu dizinde olmamasıyla ilgili bir hatadır. Belirtilmezse (varsayılan) kaynak dosyasının yolu, Java paketinin kaynak dosyalarıyla aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt konumundaki bir kaynak dosya foo/bar/a.txt konumunda bulunur.

runtime_deps

Etiket listesi; varsayılan []

Son ikili program veya yalnızca çalışma zamanında test için kullanılacak kitaplıklar. Normal deps gibi bu komutlar da çalışma zamanı sınıf yolunda görünür ancak bunlardan farklı olarak derleme zamanı sınıf yolunda görünmez. Yalnızca çalışma zamanında gereken bağımlılıklar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps içinde görünen hedefleri yoksaymalıdır.

java_lite_proto_library

Kural kaynağını göster
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 dosyadan Java kodu oluşturur.

deps, proto_library kuralına işaret etmelidir.

Örnek:

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

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

proto_library(
    name = "bar",
)

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

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

java_proto_library

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

java_proto_library, .proto dosyadan Java kodu oluşturur.

deps, proto_library kuralına işaret etmelidir.

Örnek:

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

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

proto_library(
    name = "foo_proto",
)

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

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

java_test

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

Dolaylı çıkış hedefleri

  • name.jar: Bir Java arşivi.
  • name_deploy.jar: Dağıtıma uygun bir Java arşivi. (Yalnızca açıkça talep edildiğinde oluşturulur.) Daha fazla bilgi için java_binary öğesindeki 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; gerekli

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

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

Etiket listesi; varsayılan []

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

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

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

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

Bu bağımsız değişken, bir main_class özelliğinin çalışma zamanı sınıf yolunda bir sınıf belirttiği veya runtime_deps bağımsız değişkenini belirttiğiniz durumlar dışında neredeyse her zaman gereklidir.

resources

Etiket listesi; varsayılan []

Java jar'a dahil edilecek veri dosyalarının listesi.

Kaynaklar belirtilirse, derleme tarafından üretilen normal .class dosyalarıyla birlikte kavanozda paketlenir. Jar dosyasının içindeki kaynakların konumu proje yapısına göre belirlenir. Bazel ilk olarak Maven'in standart dizin düzenini ("src" dizini ve ardından gelen "kaynaklar" dizininin torunu) arar. Bu bulunmazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar. Dolayısıyla, örneğin bir kaynak <workspace root>/x/java/y/java/z adresindeyse kaynağın yolu y/java/z olur. Bu buluşsal kural geçersiz kılınamaz ancak kaynak dosyaları için belirli bir alternatif dizini belirtmek amacıyla resource_strip_prefix özelliği kullanılabilir.

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

classpath_resources

Etiket listesi; varsayılan []

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

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

create_executable

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

Kullanımdan kaldırıldı, bunun yerine java_single_jar politikasını kullanın.
deploy_manifest_lines

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

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

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

Bu kitaplık için ek derleyici seçenekleri. "Değişken oluşturma" değişikliğine ve Bourne kabuk belirtkelemeye tabidir.

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

jvm_flags

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

Bu ikili programı çalıştırmak için oluşturulmuş sarmalayıcı komut dosyasına yerleştirilecek işaretlerin listesi. $(location) ve "Değişken yap" değişikliği ile Bourne kabuk belirtkeleme'ye tabidir.

Java ikili programı için sarmalayıcı komut dosyası, bir CLASSPATH tanımı içerir (tüm bağımlı jar'ları bulmak için) ve doğru Java yorumlayıcısını çağırır. Sarmalayıcı komut dosyası tarafından oluşturulan komut satırı, ana sınıfın adını ve ardından bir "$@" içerir. Böylece sınıf adından sonra diğer bağımsız değişkenleri iletebilirsiniz. Bununla birlikte, JVM tarafından ayrıştırılması amaçlanan 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

JDK'da yer alan normal bin/java programı yerine Java programınızı çalıştırmak için kullanılacak bir 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ıyı (bin/Java veya java.exe) kullanır.

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

JDK başlatıcıyı mı yoksa başka bir başlatıcıyı mı kullandığınıza bağlı olarak yerel (C++, SWIG, JNI) bağımlılıklarınızın farklı şekilde oluşturulacağını unutmayın:

  • Normal JDK başlatıcıyı (varsayılan) kullanıyorsanız yerel bağımlılıklar {name}_nativedeps.so adlı paylaşılan bir kitaplık olarak oluşturulur. Burada {name}, bu java_binary kuralının name özelliğidir. Kullanılmayan kod, bu yapılandırmada bağlayıcı tarafından kaldırılmaz.
  • Başka bir başlatıcı kullanıyorsanız yerel (C++) bağımlılıkları {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ı, kullanılmadığını düşündüğü kodları elde edilen ikili programdan kaldırır. Diğer bir deyişle, cc_library hedefi alwayslink = 1 değerini belirtmedikçe yalnızca JNI aracılığıyla erişilen herhangi bir C++ kodu bağlanmayabilir.

Varsayılan JDK başlatıcı dışında herhangi bir başlatıcı kullanılı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. Böylece, bu özellikle 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 bir kaynak dosya değil, sınıf adıdır. Sınıf, çalışma zamanında kullanılabilir olmalıdır: Bu kural tarafından (srcs kaynağından) derlenebilir veya doğrudan ya da geçişli bağımlılıklarla (runtime_deps veya deps aracılığıyla) sağlanabilir. Sınıf yoksa ikili program çalışma zamanında başarısız olur. Derleme zamanı kontrolü yapılmaz.

plugins

Etiket listesi; varsayılan []

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

Etiket listesi; varsayılan []

Desteği sonlandırıldı: Bunun yerine java_import ve deps veyaworkspace_deps öğelerini 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 her dosyadan çıkarılır. Bu, kaynak dosyasının bu dizinde olmamasıyla ilgili bir hatadır. Belirtilmezse (varsayılan) kaynak dosyasının yolu, Java paketinin kaynak dosyalarıyla aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt konumundaki bir kaynak dosya foo/bar/a.txt konumunda bulunur.

runtime_deps

Etiket listesi; varsayılan []

Son ikili program veya yalnızca çalışma zamanında test için kullanılacak kitaplıklar. Normal deps gibi bu komutlar da çalışma zamanı sınıf yolunda görünür ancak bunlardan farklı olarak derleme zamanı sınıf yolunda görünmez. Yalnızca çalışma zamanında gereken bağımlılıklar burada listelenmelidir. Bağımlılık analizi araçları hem runtime_deps hem de deps içinde görünen hedefleri yoksaymalıdır.
stamp

Tam sayı; varsayılan değer 0

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağını belirler. Olası değerler:
  • stamp = 1: --nostamp derlemelerinde bile, derleme bilgilerini her zaman ikili programda damgalayın. Potansiyel olarak ikili program ve buna bağlı tüm aşağı akış işlemleri için uzaktan önbelleğe almayı sonlandıracağından bu ayardan kaçınılmalıdır.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu yöntem, derleme sonucunu önbelleğe alma konusunda iyi bir sonuç verir.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işaretiyle kontrol edilir.

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

test_class

Dize; varsayılan değer ""

Test çalıştırıcısı 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şkende yedek olmayacak şekilde ayarlayın.

Bu özellik, bu test tarafından çalıştırılacak bir Java sınıfının adını belirtir. Bunun ayarlanması nadiren gerekir. Bu bağımsız değişken atlanırsa hedefin name ve kaynak-köke göreli yolu kullanılarak tahmin edilir. Test, bilinen bir kaynak kökün dışında yer alıyorsa test_class ayarlanmamışsa Bazel hata bildirir.

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

Bu özellik, birkaç java_test kuralının aynı Test öğesini (TestCase, TestSuite, ...) paylaşmasına olanak tanır. Genellikle ek bilgiler aktarılır (ör.jvm_flags=['-Dkey=value'] aracılığıyla). Böylece, testlerin farklı bir alt kümesini çalıştırmak gibi her durumda davranış farklı olur. Bu özellik, javatests ağacı dışında Java testlerinin kullanılmasına da olanak tanır.

use_launcher

Boole; varsayılan değer 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 yoksayılır.

use_testrunner

Boole; varsayılan değer True

Java programının ana giriş noktası olarak test çalıştırıcı (varsayılan olarak com.google.testing.junit.runner.BazelTestRunner) sınıfını kullanın ve test sınıfını test çalıştırıcıya bazel.test_suite sistem özelliğinin değeri olarak sağlayın. Bunu varsayılan davranışı (java_test kuralları için test çalıştırıcısı ile java_binary kurallarında kullanmamak) geçersiz kılmak için kullanabilirsiniz. Bunu yapmak istemeyeceksiniz. Bir kullanım, başka bir kural tarafından çağrılan AllTest kuralları içindir (örneğin, testleri çalıştırmadan önce bir veritabanı oluşturmak için). AllTest kuralı, java_binary olarak tanımlanmalı ancak yine de test çalıştırıcıyı ana giriş noktası olarak kullanmalıdır. 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, features, javacopts, licenses, packages, restricted_to, tags, target_compatible_with, testonly, visibility)

Bir paket grubuna uygulanacak yapılandırma. Yapılandırmalar java_toolchain.javacopts öğelerine eklenebilir.

Örnek:

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

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

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

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

data

Etiket listesi; varsayılan []

Çalışma zamanında bu yapılandırma için gereken dosyaların listesi.
javacopts

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

Java derleyici işaretleri.
packages

Etiket listesi; varsayılan []

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

java_plugin

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

Dolaylı çı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; gerekli

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan []

Bu kitaplığa bağlanacak kitaplıkların listesi. Çoğu derleme kuralı tarafından tanımlanan tipik özellikler sayfasında deps ile ilgili genel yorumlara göz atın.

deps 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 kapatılması, çalışma zamanı sınıf yolunda olacaktır.

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

srcs

Etiket listesi; varsayılan []

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

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

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

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

Bu bağımsız değişken, bir main_class özelliğinin çalışma zamanı sınıf yolunda bir sınıf belirttiği veya runtime_deps bağımsız değişkenini belirttiğiniz durumlar dışında neredeyse her zaman gereklidir.

data

Etiket listesi; varsayılan []

Çalışma zamanında bu kitaplığın ihtiyaç duyduğu dosyaların listesi. Çoğu derleme kuralı tarafından tanımlanan tipik özellikler sayfasında data ile ilgili genel yorumlara göz atın.

java_library oluştururken Bazel bu dosyaları herhangi bir yere koymaz. data dosyaları oluşturulmuşsa Bazel bunları oluşturur. Bu java_library öğesine dayalı bir test oluştururken Bazel, data dosyalarını çalıştırma dosyaları alanına kopyalar veya bağlar.

resources

Etiket listesi; varsayılan []

Java jar'a dahil edilecek veri dosyalarının listesi.

Kaynaklar belirtilirse, derleme tarafından üretilen normal .class dosyalarıyla birlikte kavanozda paketlenir. Jar dosyasının içindeki kaynakların konumu proje yapısına göre belirlenir. Bazel ilk olarak Maven'in standart dizin düzenini ("src" dizini ve ardından gelen "kaynaklar" dizininin torunu) arar. Bu bulunmazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar. Dolayısıyla, örneğin bir kaynak <workspace root>/x/java/y/java/z adresindeyse kaynağın yolu y/java/z olur. Bu buluşsal kural geçersiz kılınamaz ancak kaynak dosyaları için belirli bir alternatif dizini belirtmek amacıyla resource_strip_prefix özelliği kullanılabilir.

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

generates_api

Boole; varsayılan değer 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ı diğer kurallar, yalnızca derleme işlemleri oluşturma kuralından sonra planlanmışsa oluşturulan koda başvurabilir. Bu özellik, --java_header_compilation etkinleştirildiğinde Bazel'a planlama kısıtlamaları kullanma talimatı verir.

UYARI: Bu özellik derleme performansını etkiler. Özelliği yalnızca gerektiğinde kullanın.

javacopts

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

Bu kitaplık için ek derleyici seçenekleri. "Değişken oluşturma" değişikliğine ve Bourne kabuk belirtkelemeye tabidir.

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

Boole; varsayılan değer 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 JDK üzerinde çalışan her şey için tools.jar verilebilir.

neverlink = 1 yönergesinin, derleyicinin bu kitaplıktaki materyalleri, Java Dil Spesifikasyonu (ör. String veya temel türlerin static final sabitleridir). Bu nedenle, tercih edilen kullanım alanı, çalışma zamanı kitaplığının derleme kitaplığıyla aynı olmasıdır.

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

output_licenses

Lisans türü; varsayılan değer: ["none"]

Bkz. common attributes
plugins

Etiket listesi; varsayılan []

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

Dize; varsayılan değer ""

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

Etiket listesi; varsayılan []

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak spesifikasyonlar açıklanır. Belirtilirse bu kitaplığa bağlı olarak herhangi bir android_binary hedefine eklenir. Buraya dahil edilen dosyaların yalnızca idempotent kuralları, yani -dontnote, -dontwarn, kindnosideeffects ve -keep ile başlayan kuralları olmalıdır. Diğer seçenekler, totoolojik olmayan birleştirmeleri sağlamak için yalnızca android_binary proGuard_specs içinde görünebilir.
resource_jars

Etiket listesi; varsayılan []

Desteği sonlandırıldı: Bunun yerine java_import ve deps veyaworkspace_deps öğelerini 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 her dosyadan çıkarılır. Bu, kaynak dosyasının bu dizinde olmamasıyla ilgili bir hatadır. Belirtilmezse (varsayılan) kaynak dosyasının yolu, Java paketinin kaynak dosyalarıyla aynı mantığa göre belirlenir. Örneğin, stuff/java/foo/bar/a.txt konumundaki bir 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, 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; gerekli

Bu hedef için benzersiz bir ad.

srcs

Etiket listesi; varsayılan []

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

Etiket; varsayılan değer None

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

Etiket listesi; varsayılan []

Hermetik dağıtımlar için çalışma zamanındaki dosyalar.
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 yolu. "Yap" değişkeni değişikliğine tabidir. Bu yol mutlak ise kural, iyi bilinen bir yola sahip hermetik olmayan bir Java çalışma zamanını belirtir. Bu durumda, srcs ve java özellikleri boş olmalıdır.
lib_ct_sym

Etiket; varsayılan değer None

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

Etiket; varsayılan değer None

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

Tam sayı; varsayılan değer 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_with, deprecation, deps_checker, distribs, features, forcibly_disable_header_compilation, genclass, header_compiler, header_compiler_direct, ijar, jacocorunner, java_runtime, javabuilder, javabuilder_data, javabuilder_jvm_opts, javac_supports_multiplex_workers, javac_supports_workers, javacopts, jvm_opts, licenses, oneversion, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, proguard_allowlister, resourcejar, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, tools, turbine_data, turbine_jvm_opts, visibility, xlint)

Java derleyici yapılandırmasını belirtir. Kullanılacak araç zinciri, --java_toolchain bağımsız değişkeni aracılığıyla değiştirilebilir. Normalde, Java derleyicinizi ayarlamak istemiyorsanız bu tür kurallar yazmamalısınız.

Örnekler

Basit bir örnek şöyle olabilir:

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

Bağımsız değişkenler

Özellikler
name

Ad; gerekli

Bu hedef için benzersiz bir ad.

android_lint_data

Etiket listesi; varsayılan []

android_lint_jvm_opts sürümünde etiket genişletme için kullanılabilecek araçların etiketleri.
android_lint_jvm_opts

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

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: []

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

Etiket listesi; varsayılan []

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

Etiket; varsayılan değer None

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

Etiket listesi; varsayılan []

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

Etiket listesi; varsayılan []

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

Boole; varsayılan değer False

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

Etiket listesi; zorunlu

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

Etiket listesi; varsayılan []

Üst bilgi derleyici etiketi. --java_header_compilation özelliği etkinse gereklidir.
header_compiler_direct

Etiket listesi; varsayılan []

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

Bu araç, not işlemeyi desteklemez.

ijar

Etiket listesi; zorunlu

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

Etiket; varsayılan değer None

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

Label; zorunlu

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

Etiket listesi; zorunlu

JavaBuilder dağıtım deposunun etiketi.
javabuilder_data

Etiket listesi; varsayılan []

javabuilder_jvm_opts adresinde etiket genişletme için kullanılabilecek verilerin etiketleri.
javabuilder_jvm_opts

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

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

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

Boole; varsayılan değer True

JavaBuilder kalıcı çalışan olarak çalıştırmayı destekliyorsa doğru, desteklenmiyorsa false (yanlış) değerini alır.
javacopts

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

Java derleyici için ekstra bağımsız değişkenlerin listesi. Olası Java derleyici işaretlerinin kapsamlı listesi için lütfen Java derleyici dokümanlarına bakın.
jvm_opts

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

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

Etiket; varsayılan değer None

Tek sürümlü yaptırım 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 beyaz listesinin etiketi.
package_configuration

Etiket listesi; varsayılan []

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

Etiket listesi; varsayılan []

Yürütülebilir kaynak jar oluşturucunun etiketi.
singlejar

Etiket listesi; zorunlu

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

Dize; varsayılan değer ""

Java kaynak sürümü (ör. "6" veya "7"). Java kaynak kodunda hangi kod yapısı kümesine 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 jar'ının etiketi. Ayarlanırsa saat dilimi verileri tüm java_binary kurallarının dolaylı çalışma zamanı bağımlılığı olarak eklenir.
tools

Etiket listesi; varsayılan []

jvm_opts öğesinde etiket genişletme için kullanılabilecek araçların etiketleri.
turbine_data

Etiket listesi; varsayılan []

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

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

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

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

Varsayılan listeye eklenecek veya varsayılan listeden kaldırılacak uyarı listesi. Önüne tire işareti koyarak kaldırır. Daha fazla bilgi için lütfen -Xlint seçenekleriyle ilgili Javac dokümanlarına bakın.