Java Kuralları

Kurallar

java_binary

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 bir sınıf yolu kullanır.

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

Örtülü çıkış hedefleri

  • name.jar: İkili 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 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 izin verir. Sarmalayıcı komut dosyası, JVM flag'lerini ve yerel kitaplıkları yükleme seçeneklerini de ilettiğinden java -jar için tercih edilir.

    Dağıtım jar dosyası, classpath içinde ikili programın sarmalayıcı komut dosyasından başından sonuna kadar arama yapan 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 JVM'ye otomatik olarak yüklenir.

    Hedefiniz bir başlatıcı özelliği belirtiyorsa _Deploy.jar dosyası, normal bir JAR dosyası yerine yerel bir ikili program olur. Bu işlem, 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 programa bağlanır. Gerçek jar dosyasının baytları bu yerel ikili programa eklenir ve hem yürütülebilir dosyayı hem de Java kodunu içeren tek bir ikili 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 özelliğine sahip 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. 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

Name; required

Bu hedef için benzersiz bir ad.


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

List of labels; optional

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 bakın.
srcs

List of labels; optional

Hedefi oluşturmak için işlenen kaynak dosyaların listesi. Bu özellik hemen hemen 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ının yerine oluşturma kuralının adının eklenmesi önerilir. Bu, okunabilirliği artırmanın yanı sıra kuralın gelecekteki değişikliklere karşı daha dayanıklı olmasını da sağlar: Oluşturma kuralı gelecekte farklı dosyalar oluşturursa yalnızca tek bir yeri 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 derlenmiş. (Bu, genrule ile bir .java dosyası kümesi oluşturmanız gerektiğinde yararlı olur.)

Kurallar: Kural (genellikle genrule veya filegroup) yukarıda listelenen dosyalardan herhangi birini oluşturursa bu dosyalar kaynak dosyalar için açıklanan ş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ı belirtmediği veya sizin runtime_deps bağımsız değişkenini belirttiğiniz durumlar haricinde, neredeyse her zaman gereklidir.

resources

List of labels; optional

Java kavanozuna eklenecek veri dosyalarının listesi.

Kaynaklar belirtilirse kavanozun içinde, derleme tarafından oluşturulan her zamanki .class dosyalarıyla birlikte paketlenirler. 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 "kaynaklar" dizininin torunu) arar. Bu bulunamazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar (yani, örneğin bir kaynak <workspace root>/x/java/y/java/z üzerindeyse, kaynağın yolu y/java/z olur). Bu buluşsal yöntem geçersiz kılınamaz ancak resource_strip_prefix özelliği, kaynak dosyaları için belirli bir alternatif dizin belirtmek amacıyla kullanılabilir.

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

classpath_resources

List of labels; optional

BAŞKA BİR YÖNTEM OLMADIĞINDAN 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 bu işleme izin verilir.

create_executable

Boolean; optional; nonconfigurable; default is True

İkili programın yürütülebilir olup olmadığı. Yürütülemez ikili programlar, geçişli çalışma zamanı Java bağımlılıklarını bir dağıtım jar dosyasına toplar ancak doğrudan yürütülemez. Bu özellik ayarlanırsa sarmalayıcı komut dosyası oluşturulmaz. launcher veya main_class özellikleri ayarlanmışsa bu değeri 0 olarak ayarlamak bir hatadır.
deploy_env

List of labels; optional

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

List of strings; optional

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

List of strings; optional

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

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ya aktarılır.

jvm_flags

List of strings; optional

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

Java ikilisi 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 "$@" ifadesini içerir. Böylece, sınıf adından sonra diğer bağımsız değişkenleri iletebilirsiniz. Ancak JVM tarafından ayrıştırmaya yönelik bağımsız değişkenler, komut satırında sınıf adından önce belirtilmelidir. jvm_flags öğesinin 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

Label; optional

JDK'ya dahil olan 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 özelliğin bir değeri 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 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 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ı, kullanılmadığını düşündüğü kodu sonuçtaki ikili programdan kaldırır. Diğer bir deyişle, yalnızca JNI aracılığıyla erişilen herhangi bir C++ kodu, söz konusu cc_library hedefi alwayslink = 1 değerini belirtmediği sürece bağlanamaz.

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

main_class

String; optional

Giriş noktası olarak kullanılacak main() yöntemine sahip sınıfın adı. Bir kural bu seçeneği kullanırsa srcs=[...] listesine ihtiyaç duymaz. Dolayısıyla, bu özellikle, zaten 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, 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. Derleme zamanı denetimi yoktur.

plugins

List of labels; optional

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

List of labels; optional

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

String; optional

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

Belirtilirse bu yol ön eki, resources özelliğindeki her dosyadan çıkarılır. Hata, kaynak dosyasını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

List of labels; optional

Yalnızca çalışma zamanında nihai ikili programın veya testin kullanılabilmesini sağlayacak 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 yoksaymalıdır.
stamp

Integer; optional; default is -1

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: Derleme bilgilerini --nostamp derlemelerinde bile her zaman ikili programa damgalayın. Bu ayar, ikili program için uzaktan önbelleğe almayı ve buna bağlı olan aşağı akış işlemlerini 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 sonucunu önbelleğe alma olanağı 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

Boolean; optional; default is 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

Boolean; optional; default is False

Java programının ana giriş noktası olarak test çalıştırıcısını (varsayılan olarak com.google.testing.junit.runner.BazelTestRunner) kullanın ve test sınıfını bazel.test_suite sistem özelliğinin değeri olarak test çalıştırıcısına sağlayın. Test çalıştırıcısını java_test kuralları için kullanmak ve java_binary kuralları için kullanmamak olan varsayılan davranışı geçersiz kılmak için bunu kullanabilirsiniz. Büyük olasılıkla 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 beyan edilmeli ancak yine de ana giriş noktası olarak test çalıştırıcısını 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

java_import(name, deps, data, compatible_with, constraints, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, proguard_specs, restricted_to, runtime_deps, srcjar, tags, target_compatible_with, testonly, visibility)

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

Örnekler

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

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

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

List of strings; optional; nonconfigurable

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

List of labels; optional

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

List of labels; required

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

Boolean; optional; default is 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

List of labels; optional

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak teknik özellikler açıklanmaktadır. Belirtilirse bu kitaplığa bağlı olarak tüm android_binary hedeflerine eklenirler. Burada yer alan dosyalarda yalnızca eş anlamlı kuralları (-dontnote, -dontwarn, forcenosideeffects 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 ürününün proGuard_specs bölümünde görünebilir.
runtime_deps

List of labels; optional

Yalnızca çalışma zamanında nihai ikili programın veya testin kullanılabilmesini sağlayacak kitaplıklar. Bkz. java_library.runtime_deps.
srcjar

Label; optional

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

java_library

java_library(name, deps, srcs, data, resources, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exported_plugins, exports, features, javacopts, licenses, neverlink, plugins, proguard_specs, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, tags, target_compatible_with, testonly, visibility)

Bu kural, kaynakları derleyip bir .jar dosyası şeklinde bağlar.

Örtülü çıkış hedefleri

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

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

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 bakın.

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

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

srcs

List of labels; optional

Hedefi oluşturmak için işlenen kaynak dosyaların listesi. Bu özellik hemen hemen 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ının yerine oluşturma kuralının adının eklenmesi önerilir. Bu, okunabilirliği artırmanın yanı sıra kuralın gelecekteki değişikliklere karşı daha dayanıklı olmasını da sağlar: Oluşturma kuralı gelecekte farklı dosyalar oluşturursa yalnızca tek bir yeri 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 derlenmiş. (Bu, genrule ile bir .java dosyası kümesi oluşturmanız gerektiğinde yararlı olur.)

Kurallar: Kural (genellikle genrule veya filegroup) yukarıda listelenen dosyalardan herhangi birini oluşturursa bu dosyalar kaynak dosyalar için açıklanan ş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ı belirtmediği veya sizin runtime_deps bağımsız değişkenini belirttiğiniz durumlar haricinde, neredeyse her zaman gereklidir.

data

List of labels; optional

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

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

resources

List of labels; optional

Java kavanozuna eklenecek veri dosyalarının listesi.

Kaynaklar belirtilirse kavanozun içinde, derleme tarafından oluşturulan her zamanki .class dosyalarıyla birlikte paketlenirler. 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 "kaynaklar" dizininin torunu) arar. Bu bulunamazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar (yani, örneğin bir kaynak <workspace root>/x/java/y/java/z üzerindeyse, kaynağın yolu y/java/z olur). Bu buluşsal yöntem geçersiz kılınamaz ancak resource_strip_prefix özelliği, kaynak dosyaları için belirli bir alternatif dizin belirtmek amacıyla kullanılabilir.

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

exported_plugins

List of labels; optional

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

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

exports

List of labels; optional

Dışa aktarılan kitaplıklar.

Burada listeleme kuralları, üst kurallar bu kurallara dayanıyormuş 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 başlayıp 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 de 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ştirmek ve A'yı yeniden oluşturmak her şeyi doğru şekilde yeniden oluşturur. Ancak A, C'deki sınıfları kullanamaz. Buna izin vermek için A'nın deps öğesinde C'yi bildirmesi gerekir veya B, (B'nin) exports özelliğinde C'yi tanımlayarak A'nın (ve A'ya bağlı olabilecek her şeyin) işini kolaylaştırabilir.

Dışa aktarılan kitaplıkların kapatılması, tüm doğrudan üst kurallar tarafından kullanılabilir. Biraz farklı bir örnek verebiliriz: 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 artık C'ye erişebilir, 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şebilir, D'ye erişemez.

Önemli: Dışa aktarılan bir kural düzenli bir bağımlılık değildir. Önceki örneğe devam edersek B, C'yi dışa aktarıp C'yi de kullanmak istiyorsa bunu kendi deps içinde de listelemesi gerekir.

javacopts

List of strings; optional

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

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ya aktarılır.

Boolean; optional; default is False

Bu kitaplığın 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. IDE eklentileri için IDE API'leri veya standart bir JDK'da çalışan her şey için tools.jar bu tür kitaplıklara örnek verilebilir.

neverlink = 1 derleyicinin, Java Dil Belirtimi (ör. String veya temel türde static final sabitleri). Dolayısıyla 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 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

List of labels; optional

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

List of labels; optional

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak teknik özellikler açıklanmaktadır. Belirtilirse bu kitaplığa bağlı olarak tüm android_binary hedeflerine eklenirler. Burada yer alan dosyalarda yalnızca eş anlamlı kuralları (-dontnote, -dontwarn, forcenosideeffects 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 ürününün proGuard_specs bölümünde görünebilir.
resource_jars

List of labels; optional

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

String; optional

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

Belirtilirse bu yol ön eki, resources özelliğindeki her dosyadan çıkarılır. Hata, kaynak dosyasını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

List of labels; optional

Yalnızca çalışma zamanında nihai ikili programın veya testin kullanılabilmesini sağlayacak 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 yoksaymalıdır.

java_lite_proto_library

java_lite_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

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

deps, proto_library kurallarına 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

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

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

java_proto_library

java_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)

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

deps, proto_library kurallarına 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

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

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

java_test

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 ç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ıma uygun bir Java arşivi. (Yalnızca açıkça istenirse oluşturulur.) Daha fazla bilgi için java_binary kodundaki name_deploy.jar çıkışının açıklamasına bakın.

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

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

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 bakın.
srcs

List of labels; optional

Hedefi oluşturmak için işlenen kaynak dosyaların listesi. Bu özellik hemen hemen 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ının yerine oluşturma kuralının adının eklenmesi önerilir. Bu, okunabilirliği artırmanın yanı sıra kuralın gelecekteki değişikliklere karşı daha dayanıklı olmasını da sağlar: Oluşturma kuralı gelecekte farklı dosyalar oluşturursa yalnızca tek bir yeri 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 derlenmiş. (Bu, genrule ile bir .java dosyası kümesi oluşturmanız gerektiğinde yararlı olur.)

Kurallar: Kural (genellikle genrule veya filegroup) yukarıda listelenen dosyalardan herhangi birini oluşturursa bu dosyalar kaynak dosyalar için açıklanan ş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ı belirtmediği veya sizin runtime_deps bağımsız değişkenini belirttiğiniz durumlar haricinde, neredeyse her zaman gereklidir.

resources

List of labels; optional

Java kavanozuna eklenecek veri dosyalarının listesi.

Kaynaklar belirtilirse kavanozun içinde, derleme tarafından oluşturulan her zamanki .class dosyalarıyla birlikte paketlenirler. 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 "kaynaklar" dizininin torunu) arar. Bu bulunamazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar (yani, örneğin bir kaynak <workspace root>/x/java/y/java/z üzerindeyse, kaynağın yolu y/java/z olur). Bu buluşsal yöntem geçersiz kılınamaz ancak resource_strip_prefix özelliği, kaynak dosyaları için belirli bir alternatif dizin belirtmek amacıyla kullanılabilir.

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

classpath_resources

List of labels; optional

BAŞKA BİR YÖNTEM OLMADIĞINDAN 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 bu işleme izin verilir.

create_executable

Boolean; optional; nonconfigurable; default is True

İkili programın yürütülebilir olup olmadığı. Yürütülemez ikili programlar, geçişli çalışma zamanı Java bağımlılıklarını bir dağıtım jar dosyasına toplar ancak doğrudan yürütülemez. Bu özellik ayarlanırsa sarmalayıcı komut dosyası oluşturulmaz. launcher veya main_class özellikleri ayarlanmışsa bu değeri 0 olarak ayarlamak bir hatadır.
deploy_manifest_lines

List of strings; optional

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

List of strings; optional

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

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ya aktarılır.

jvm_flags

List of strings; optional

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

Java ikilisi 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 "$@" ifadesini içerir. Böylece, sınıf adından sonra diğer bağımsız değişkenleri iletebilirsiniz. Ancak JVM tarafından ayrıştırmaya yönelik bağımsız değişkenler, komut satırında sınıf adından önce belirtilmelidir. jvm_flags öğesinin 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

Label; optional

JDK'ya dahil olan 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 özelliğin bir değeri 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 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 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ı, kullanılmadığını düşündüğü kodu sonuçtaki ikili programdan kaldırır. Diğer bir deyişle, yalnızca JNI aracılığıyla erişilen herhangi bir C++ kodu, söz konusu cc_library hedefi alwayslink = 1 değerini belirtmediği sürece bağlanamaz.

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

main_class

String; optional

Giriş noktası olarak kullanılacak main() yöntemine sahip sınıfın adı. Bir kural bu seçeneği kullanırsa srcs=[...] listesine ihtiyaç duymaz. Dolayısıyla, bu özellikle, zaten 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, 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. Derleme zamanı denetimi yoktur.

plugins

List of labels; optional

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

List of labels; optional

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

String; optional

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

Belirtilirse bu yol ön eki, resources özelliğindeki her dosyadan çıkarılır. Hata, kaynak dosyasını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

List of labels; optional

Yalnızca çalışma zamanında nihai ikili programın veya testin kullanılabilmesini sağlayacak 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 yoksaymalıdır.
stamp

Integer; optional; default is 0

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağı. Olası değerler:
  • stamp = 1: Derleme bilgilerini --nostamp derlemelerinde bile her zaman ikili programa damgalayın. Bu ayar, ikili program için uzaktan önbelleğe almayı ve buna bağlı olan aşağı akış işlemlerini 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 sonucunu önbelleğe alma olanağı 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

String; optional

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ş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ı yapmak nadiren gerekebilir. Bu bağımsız değişken atlanırsa hedefin name ve kaynağa göre köke bağlı yolu kullanılarak tahmin edilir. Test, bilinen bir kaynak kökünün dışındaysa test_class ayarlanmazsa Bazel bir hata bildirir.

JUnit3 için test sınıfının bir 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 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 olanak tanır. Genellikle ek bilgiler kendisine aktarılır (ör.jvm_flags=['-Dkey=value'] aracılığıyla). Böylece, testlerin farklı bir alt kümesinin çalıştırılması gibi davranışları her durumda farklılık gösterir. Bu özellik, javatests ağacı dışında Java testlerinin kullanılmasını da sağlar.

use_launcher

Boolean; optional; default is 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

Boolean; optional; default is True

Java programının ana giriş noktası olarak test çalıştırıcısını (varsayılan olarak com.google.testing.junit.runner.BazelTestRunner) kullanın ve test sınıfını bazel.test_suite sistem özelliğinin değeri olarak test çalıştırıcısına sağlayın. Test çalıştırıcısını java_test kuralları için kullanmak ve java_binary kuralları için kullanmamak olan varsayılan davranışı geçersiz kılmak için bunu kullanabilirsiniz. Büyük olasılıkla 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 beyan edilmeli ancak yine de ana giriş noktası olarak test çalıştırıcısını 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

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

Name; required

Bu hedef için benzersiz bir ad.

data

List of labels; optional

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

List of strings; optional

Java derleyici işaretleri.
packages

List of labels; optional

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

java_plugin

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ı, plugins özelliği aracılığıyla eklentileri bağlı olarak çalıştırabilir. Ayrıca java_library, eklentileri exported_plugins kullanarak doğrudan kendisine bağlı kitaplıklara otomatik olarak aktarabilir.

Örtülü çıkış hedefleri

  • libname.jar: Bir Java arşivi.

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

Bağımsız değişkenler

Özellikler
name

Name; required

Bu hedef için benzersiz bir ad.

deps

List of labels; optional

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 bakın.

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

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

srcs

List of labels; optional

Hedefi oluşturmak için işlenen kaynak dosyaların listesi. Bu özellik hemen hemen 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ının yerine oluşturma kuralının adının eklenmesi önerilir. Bu, okunabilirliği artırmanın yanı sıra kuralın gelecekteki değişikliklere karşı daha dayanıklı olmasını da sağlar: Oluşturma kuralı gelecekte farklı dosyalar oluşturursa yalnızca tek bir yeri 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 derlenmiş. (Bu, genrule ile bir .java dosyası kümesi oluşturmanız gerektiğinde yararlı olur.)

Kurallar: Kural (genellikle genrule veya filegroup) yukarıda listelenen dosyalardan herhangi birini oluşturursa bu dosyalar kaynak dosyalar için açıklanan ş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ı belirtmediği veya sizin runtime_deps bağımsız değişkenini belirttiğiniz durumlar haricinde, neredeyse her zaman gereklidir.

data

List of labels; optional

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

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

resources

List of labels; optional

Java kavanozuna eklenecek veri dosyalarının listesi.

Kaynaklar belirtilirse kavanozun içinde, derleme tarafından oluşturulan her zamanki .class dosyalarıyla birlikte paketlenirler. 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 "kaynaklar" dizininin torunu) arar. Bu bulunamazsa Bazel, "java" veya "javatests" adlı en üstteki dizini arar (yani, örneğin bir kaynak <workspace root>/x/java/y/java/z üzerindeyse, kaynağın yolu y/java/z olur). Bu buluşsal yöntem geçersiz kılınamaz ancak resource_strip_prefix özelliği, kaynak dosyaları için belirli bir alternatif dizin belirtmek amacıyla kullanılabilir.

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

generates_api

Boolean; optional; default is 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şlemlerinin oluşturma kuralından sonra programlanması durumunda oluşturulan koda referans verebilir. Bu özellik, Bazel'a --java_header_compilation etkinleştirildiğinde zamanlama kısıtlamalarını getirmesini bildirir.

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

javacopts

List of strings; optional

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

Bu derleyici seçenekleri, genel derleyici seçeneklerinden sonra javac'ya aktarılır.

Boolean; optional; default is False

Bu kitaplığın 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. IDE eklentileri için IDE API'leri veya standart bir JDK'da çalışan her şey için tools.jar bu tür kitaplıklara örnek verilebilir.

neverlink = 1 derleyicinin, Java Dil Belirtimi (ör. String veya temel türde static final sabitleri). Dolayısıyla 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 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

Licence type; optional

Şuna göz atın: common attributes
plugins

List of labels; optional

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

String; optional

İş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şlemci yoluna dahil olmaya devam eder. (Bu e-posta öncelikli 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

List of labels; optional

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak teknik özellikler açıklanmaktadır. Belirtilirse bu kitaplığa bağlı olarak tüm android_binary hedeflerine eklenirler. Burada yer alan dosyalarda yalnızca eş anlamlı kuralları (-dontnote, -dontwarn, forcenosideeffects 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 ürününün proGuard_specs bölümünde görünebilir.
resource_jars

List of labels; optional

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

String; optional

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

Belirtilirse bu yol ön eki, resources özelliğindeki her dosyadan çıkarılır. Hata, kaynak dosyasını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.

java_runtime

java_runtime(name, srcs, compatible_with, deprecation, distribs, features, hermetic_srcs, java, java_home, lib_modules, licenses, restricted_to, tags, target_compatible_with, testonly, 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

Name; required

Bu hedef için benzersiz bir ad.

srcs

List of labels; optional

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

List of labels; optional

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

Label; optional

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

String; optional

Çalışma zamanının kök yolu. "Oluşturma" değişkeni 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_modules

Label; optional

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

java_toolchain

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_whitelist, package_configuration, proguard_allowlister, resourcejar, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, tools, turbine_data, turbine_jvm_opts, visibility, xlint)

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

Basit bir örnek vermek gerekirse:

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

Name; required

Bu hedef için benzersiz bir ad.

android_lint_data

List of labels; optional

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

List of strings; optional

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

List of strings; optional

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

List of labels; optional

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

Label; optional

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

List of labels; optional

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

List of labels; optional

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

Boolean; optional; default is 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

List of labels; required

GenClass dağıtım jar etiketinin etiketi.
header_compiler

List of labels; optional

Üstbilgi derleyicisinin etiketi. --java_header_compilation etkinleştirilirse gereklidir.
header_compiler_direct

List of labels; optional

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

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

ijar

List of labels; required

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

Label; optional

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

Label; required

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

List of labels; required

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

List of labels; optional

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

List of strings; optional

JavaBuilder çağrılırken JVM için bağımsız değişken listesi.
javac_supports_multiplex_workers

Boolean; optional; default is True

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

Boolean; optional; default is True

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

List of strings; optional

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

List of strings; optional

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

Label; optional

Tek sürüm yaptırım ikili programının etiketi.
oneversion_whitelist

Label; optional

Tek sürüm beyaz listesinin etiketi.
package_configuration

List of labels; optional

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

Label; optional; default is @bazel_tools//tools/jdk:proguard_whitelister

ProGuard izin verilenler listesinin etiketi.
resourcejar

List of labels; optional

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

List of labels; required

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

String; optional

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

String; optional

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

Label; optional

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

List of labels; optional

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

List of labels; optional

turbine_jvm_opts parametresini kullanarak etiket genişletme için kullanılabilecek verilerin etiketleri.
turbine_jvm_opts

List of strings; optional

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

List of strings; optional

Varsayılan listeye eklenecek veya varsayılan listeden kaldırılacak uyarıların listesi. Reklamın başına, başına bir kısa çizgi konur. Daha fazla bilgi için lütfen -Xlint seçenekleri ile ilgili Javac dokümanlarına bakın.