Java Kuralları

. Sorun bildir Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Kurallar

java_binary

Kural kaynağını görüntüle
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 her öğe için bir jar dosyası içeren ikili programın bağlı olduğu kitaplıktır. Sarmalayıcı kabuk komut dosyasını çalıştırırken, JAVABIN ortam değişkeni, aracılığıyla belirtilen sürüme göre öncelikli olacaktır Bazel'in --java_runtime_version bayrağı.

Sarmalayıcı komut dosyası, birkaç benzersiz işareti kabul eder. Referans //src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt. inceleyebilirsiniz.

Dolaylı çıkış hedefleri

  • name.jar: Sınıf dosyalarını ve diğer dosyaları içeren bir Java arşivi ve ikili programın doğrudan bağımlılıklarına karşılık gelen kaynaklardır.
  • name-src.jar: Kaynakları içeren bir arşiv ("kaynak jar").
  • name_deploy.jar: Dağıtıma uygun bir Java arşivi (yalnızca oluşturulur).

    Kuralınız için <name>_deploy.jar hedefi oluşturuluyor , dosyanın java -jar komutuyla veya sarmalayıcı komut dosyasının --singlejar komutuyla seçeneğini belirleyin. java -jar yerine sarmalayıcı komut dosyasının kullanılması tercih edilir çünkü JVM flag'lerini ve seçenekleri de iletir. yerel kitaplıklar yüklemek için kullanılır.

    Dağıtma jar dosyası, şu anda çalışan bir sınıf yükleyicinin bulacağı tüm sınıfları sınıf yolunu ikili programın sarmalayıcı komut dosyasından başından sonuna kadar aradı. Aynı zamanda bağımlılıklar için gerekli yerel kitaplıkları içerir. Bunlar otomatik olarak yüklenir JVM'ye aktarırsınız.

    Hedefiniz bir başlatıcı belirtiyorsa özelliği ile birlikte çalışırsanız, _deploy.jar normal bir JAR dosyası yerine yerel ikili programdır. Bu, başlatıcıyı ve uygulamanın tüm yerel (C++) bağımlılıklarını içerir: statik bir ikili sisteme bağlanmalıdır. Gerçek jar dosyasının baytları yerel ikili programının sonuna eklenir ve hem yürütülebilir ve Java kodu. Oluşturulan jar dosyasını doğrudan çalıştırabilirsiniz olduğu gibi kullanabilirsiniz.

  • name_deploy-src.jar: Kaynakları içeren bir arşiv hedefin geçişli olarak kapatılmasından toplanan verileri ölçer. Bunlar şu sınıflarla eşleşecek: Kavanozların eşleşen kaynak jar'ı olmadığı durumlar hariç deploy.jar.

Aşağıdaki değerler içermeyen java_binary kuralında deps özelliğine izin verilmez srcs; böyle bir kural için main_class sağlayan: runtime_deps.

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

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

Bunun yerine şunu yapın:

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

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.


Dosyanın ana giriş noktası olan kaynak dosyanın adını (uzantı hariç) seçin. Örneğin, giriş noktanız Main.java, adınız Main olabilir.
deps

Etiket listesi; varsayılan değer []

Hedefe bağlanacak diğer kitaplıkların listesi. deps ile ilgili genel yorumları şu adreste bulabilirsiniz: Genel özellikler çoğu derleme kuralına bakın.
srcs

Etiket listesi; varsayılan değer []

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

.java türündeki kaynak dosyalar derlenir. Oluşturulması durumunda .java dosyalarına oluşturma kuralının adının eklenmesi genellikle önerilir buraya yerleştirin. Bu hem okunabilirliği artırmakla kalmaz hem de gelecekteki değişikliklere karşı daha dirençli hale getirir: oluşturan kural gelecekte farklı dosyalara ihtiyacınız varsa tek bir yeri düzeltmeniz gerekir: outs oluşturma kuralı. Oluşturma kuralını deps içinde listelememelisiniz. çünkü işlemsiz.

.srcjar türündeki kaynak dosyalar paketten çıkarılır ve derlenir. (Bu, bir genrule dosyasıyla .java dosyaları oluşturmanız gerekir.)

Kurallar: Kural (genellikle genrule veya filegroup) oluşturulursa yukarıda listelenen dosyalardan herhangi biri, dosyası olarak da kaydedebilir.

Bu bağımsız değişken, main_class özelliği, sınıfını kullanmanız veya runtime_deps bağımsız değişkenini belirtmeniz gerekir.

resources

Etiket listesi; varsayılan değer []

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

Kaynaklar belirtilirse, normal kaynaklarla birlikte kavanozda paketlenir Derleme, .class dosya üretti. İçerideki kaynakların konumu proje yapısına göre belirlenir. Bazel ilk olarak Maven'in standart dizin düzenine benzerdir. (bir "src" dizini ve ardından bir "kaynaklar" dizini torunu). Bu durumda bulunduktan sonra Bazel, "Java" adlı en üstteki dizini veya "Javatests" gibi (yani, Örneğin, bir kaynak <workspace root>/x/java/y/java/z konumundaysa kaynağın yolu y/java/z olur. Bu buluşsal yöntem geçersiz kılınamaz. ancak resource_strip_prefix özelliği bir kaynak dosyalar için belirli bir alternatif dizindir.

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

classpath_resources

Etiket listesi; varsayılan değer []

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 kullanımını gerektiren üçüncü taraf kitaplıkları desteklemektir sınıf yolunda tam olarak "myconfig.xml" olarak bulundu. Yalnızca şuralarda izin verilir: kullanılmasıdır.

create_executable

Boole; nonconfig; 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 değer []

Dağıtımı temsil eden diğer java_binary hedeflerinin listesi ortamına ekleyebilirsiniz. Başka bir site tarafından yüklenecek bir eklenti oluştururken bu özelliği ayarlayın. java_binary
Bu özelliğin ayarlanması, bu ikili programın çalışma zamanı sınıf yolu (ve dağıtım jar'ı) ikili program ve deploy_env politikasında belirtilen hedefler.
deploy_manifest_lines

Dize listesi; varsayılan değer []

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

Dize listesi; varsayılan değer []

Bu kitaplık için ek derleyici seçenekleri. "Değişken yap" değişikliğine tabi ve Bourne kabuk belirteçleme.

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) öğesine tabi ve "Değişken yap" ifadesini değiştirme ve Bourne kabuk belirteçleme.

Java ikili programı için sarmalayıcı komut dosyası bir CLASSPATH tanımı içeriyor (bağımlı tüm jar'ları bulmak için) kullanır 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 ve ardından "$@" ile diğerlerini geçin bağımsız değişkenlerini ekleyin. Ancak, ayrıştırma için tasarlanmış bağımsız değişkenler komuttaki sınıf adından önce belirtilmelidir. satırında görünür. jvm_flags içeriği sarmalayıcıya eklenir komut dosyasını eklemeniz gerekir.

Bu özelliğin *_deploy.jar üzerinde etkisi olmadığını unutmayın. çıktı.

launcher

Etiket; varsayılan değer None

Java programınızı çalıştırmak için kullanılacak Normal bin/java programı JDK'ya dahildir. Hedef bir cc_binary olmalıdır. Şu özelliklere sahip herhangi bir cc_binary: , Bu özellik için bir değer olarak Java Invocation API 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 bunları etkiler Şu özelliklere sahip java_binary ve java_test hedef: launcher özelliği belirtilmedi.

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

  • 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. {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ğlanmıştır; burada {name} bu java_binary kuralının name özelliğidir. Böyle durumlarda bağlayıcı, kullanılmadığını düşündüğü kodları elde edilen ikili programdan kaldırır. Yani, yalnızca JNI aracılığıyla erişilen C++ kodları yalnızca cc_library hedefi alwayslink = 1 değerini belirtiyor.

Varsayılan JDK başlatıcı dışında herhangi bir başlatıcıyı kullanırken biçim, *_deploy.jar çıkış değişikliğinin sayısı. Temel konuları java_binary dokümanlarına göz atın.

main_class

String; varsayılan değer ""

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

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: bu kural tarafından derlenmiş olabilir (srcs kaynağından) veya doğrudan veya geçişli bağımlılıklar tarafından sağlanan (runtime_deps veya deps). Sınıf kullanılamıyorsa ikili program çalışma zamanında başarısız olur. orada derleme zamanı denetimi yoktur.

plugins

Etiket listesi; varsayılan değer []

Derleme zamanında çalışacak Java derleyici eklentileri. Bu özellikte belirtilen her java_plugin bu kuralla birlikte çalıştırılır geliştirildi. Bir kitaplık, exported_plugins Kaynaklar oluşturulan dosya, bu kuralın ortaya çıkan jar'ına dahil edilir.
resource_jars

Etiket listesi; varsayılan değer []

Desteği sonlandırıldı: Bunun yerine java_import ve deps veyaworkspace_deps öğelerini kullanın.
resource_strip_prefix

String; varsayılan değer ""

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

Belirtilirse bu yol öneki resources içindeki her dosyadan çıkarılır. özelliğini gönderin. Bu, kaynak dosyasının bu dizinde olmamasıyla ilgili bir hatadır. Değilse belirtildiğinde (varsayılan), kaynak dosyasının yolu yine aynı mantığını kaynak dosyalardan oluşan Java paketi olarak kullanır. Örneğin, stuff/java/foo/bar/a.txt şu şekilde konumlandırılacak: foo/bar/a.txt.

runtime_deps

Etiket listesi; varsayılan değer []

Son ikili program veya yalnızca çalışma zamanında test için kullanılacak kitaplıklar. Bunlar sıradan deps ürününde olduğu gibi çalışma zamanı sınıf yolunda görünür, ancak üzerinde çalışmalıdır. Yalnızca çalışma zamanında gereken bağımlılıklar burada görebilirsiniz. Bağımlılık analizi araçları, runtime_deps ve deps.
stamp

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

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağını belirler. Olası değerler:
  • stamp = 1: Derleme bilgilerini --nostamp derleme. Bu ayarından kaçınılmalıdır. Aksi takdirde, bu işlem ve buna bağımlı tüm aşağı akış işlemleri.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu iyi bir derleme sonucu önbelleğe alma sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işaretidir.

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ğini ve ilgili --java_launcher işaretle bu hedef için yoksayılacak.

use_testrunner

Boole; varsayılan değer False

Test çalıştırıcısını kullan (varsayılan olarak com.google.testing.junit.runner.BazelTestRunner) sınıfını kullanın. ana giriş noktasını kullanabilir ve test sınıfını bazel.test_suite değeri olarak test koşucusuna atanır. sistem özelliğini etkinleştirmelisiniz. Varsayılan değeri geçersiz kılmak için bunu kullanabilirsiniz yardımcı olmak için test çalıştırıcısını kullanarak java_test kural, ve java_binary kuralları için kullanmayın. Düşük ihtimalle bunu yapmanız gerekir. Bir kullanım AllTest içindir başka bir kural tarafından çağrılan kurallar (veri tabanı ) girmeniz gerekir. AllTest kuralı java_binary olarak tanımlanmalıdır, ancak test çalıştırıcıyı ana giriş noktası olarak kullanmaya devam edebilirsiniz. Test çalıştırıcı sınıfının adı, main_class özelliğiyle geçersiz kılınabilir.

java_import

Kural kaynağını görüntüle
java_import(name, deps, data, add_exports, add_opens, compatible_with, constraints, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, proguard_specs, restricted_to, runtime_deps, srcjar, tags, target_compatible_with, testonly, toolchains, visibility)

Bu kural, önceden derlenmiş .jar dosyalarının java_library ve için kitaplıklar java_binary kural.

Örnekler


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

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan değer []

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

Etiket listesi; varsayılan değer []

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

Dize listesi; varsayılan değer []

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

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

add_opens

Dize listesi; varsayılan değer []

Bu kitaplığın belirtilen module öğesine yansıtıcı şekilde erişmesine izin ver veya package.

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

constraints

Dize listesi; varsayılan değer []

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

Etiket listesi; varsayılan değer []

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 çalışma zamanı ortamı tarafından sağlanacaksa kullanışlıdır bazı işaretler bulabilirsiniz. Bunun gibi kitaplıklara örnek olarak IDE API'leri verilebilir. için IDE eklentileri veya şu anda çalışan her şey için tools.jar standart bir JDK olabilir.
proguard_specs

Etiket listesi; varsayılan değer []

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak spesifikasyonlar açıklanır. Belirtilmişse bunlar, bu kitaplığa bağlı olarak herhangi bir android_binary hedefine eklenir. Buraya eklenen dosyalar sadece ideaklı kurallara, yani -dontnote, -dontwarn, yan etkileri ve -keep ile başlayan kuralları içerir. Diğer seçenekler yalnızca android_binary öğesinin proguard_specs (totoolojik olmayan birleştirmeler için)
runtime_deps

Etiket listesi; varsayılan değer []

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örüntüle
java_library(name, deps, srcs, data, resources, add_exports, add_opens, bootclasspath, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exported_plugins, exports, features, javabuilder_jvm_flags, javacopts, licenses, neverlink, plugins, proguard_specs, resource_strip_prefix, restricted_to, runtime_deps, tags, target_compatible_with, testonly, toolchains, visibility)

Bu kural, kaynakları bir .jar dosyasında derler ve bağlar.

Dolaylı çıkışlar

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

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan değer []

Bu kitaplığa bağlanacak kitaplıkların listesi. deps ile ilgili genel yorumları şu adreste bulabilirsiniz: Genel özellikler çoğu derleme kuralına bakın.

deps içinde listelenen java_library kuralları tarafından oluşturulan jar'lar açık olacak bu kuralın derleme zamanı sınıf yolu. Dahası, hizmet hesaplarının geçişli olarak kapatılması deps, runtime_deps ve exports şurada olacak: çalışma zamanı sınıf yolu.

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

srcs

Etiket listesi; varsayılan değer []

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

.java türündeki kaynak dosyalar derlenir. Oluşturulması durumunda .java dosyalarına oluşturma kuralının adının eklenmesi genellikle önerilir buraya yerleştirin. Bu hem okunabilirliği artırmakla kalmaz hem de gelecekteki değişikliklere karşı daha dirençli hale getirir: oluşturan kural gelecekte farklı dosyalara ihtiyacınız varsa tek bir yeri düzeltmeniz gerekir: outs oluşturma kuralı. Oluşturma kuralını deps içinde listelememelisiniz. çünkü işlemsiz.

.srcjar türündeki kaynak dosyalar paketten çıkarılır ve derlenir. (Bu, bir genrule dosyasıyla .java dosyaları oluşturmanız gerekir.)

Kurallar: Kural (genellikle genrule veya filegroup) oluşturulursa yukarıda listelenen dosyalardan herhangi biri, dosyası olarak da kaydedebilir.

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

Aynı boyutta en az bir dosya olduğu sürece diğer tüm dosyalar dosya türü olabilir. Aksi takdirde hata oluşur.

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

data

Etiket listesi; varsayılan değer []

Çalışma zamanında bu kitaplığın ihtiyaç duyduğu dosyaların listesi. data ile ilgili genel yorumları şu adreste bulabilirsiniz: Genel özellikler çoğu derleme kuralına bakın.

Bir java_library oluştururken Bazel bu dosyaları hiçbir yere koymaz; eğer data dosya oluşturulduktan sonra Bazel tarafından oluşturulur. Bir Bu teste dayalı bir test yöntemidir. java_library Bazel, data dosya, çalıştırma dosyaları alanına.

resources

Etiket listesi; varsayılan değer []

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

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

Kaynaklar belirtilirse, normal kaynaklarla birlikte kavanozda paketlenir Derleme, .class dosya üretti. İçerideki kaynakların konumu proje yapısına göre belirlenir. Bazel ilk olarak Maven'in standart dizin düzenine benzerdir. (bir "src" dizini ve ardından bir "kaynaklar" dizini torunu). Bu durumda bulunduktan sonra Bazel, "Java" adlı en üstteki dizini veya "Javatests" gibi (yani, Örneğin, bir kaynak <workspace root>/x/java/y/java/z konumundaysa kaynağın yolu y/java/z olur. Bu buluşsal yöntem geçersiz kılınamaz. ancak resource_strip_prefix özelliği bir kaynak dosyalar için belirli bir alternatif dizindir.

add_exports

Dize listesi; varsayılan değer []

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

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

add_opens

Dize listesi; varsayılan değer []

Bu kitaplığın belirtilen module öğesine yansıtıcı şekilde erişmesine izin ver veya package.

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

bootclasspath

Etiket; varsayılan değer None

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

Etiket listesi; varsayılan değer []

java_plugin listesi (ör. ek açıklama) işlemcileri) doğrudan bu kitaplığa bağımlı kitaplıklara aktarmak için kullanılır.

Belirtilen java_plugin listesi şu kitaplığa uygulanacaktır: Bu kitaplığa, sanki bu kitaplık açık bir şekilde açıkça beyan edilmiş gibi plugins içinde etiketler.

exports

Etiket listesi; varsayılan değer []

Dışa aktarılan kitaplıklar.

Burada listeleme kuralları, bunları üst kurallar tarafından sanki üst öğelerde olduğu gibi üst kurallarda kullanılabilir hale getirir bu kurallara bağlıydı. Bu, normal (dışa aktarılmayan) deps için geçerli değildir.

Özet: X kuralı, bir bağımlılık varsa Y içindeki koda erişebilir deps kenarıyla başlayan ve ardından sıfır veya daha çok sayıda gelen yol exports kenar. 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ştirmek ve A'yı yeniden oluşturmak, her şeyi doğru şekilde yeniden yapabilir. Ancak A, C sınıfındaki sınıfları kullanamaz. İzin vermek için A'nın deps içinde C'yi belirtmesi gerekir veya B, A'nın çalışmasını kolaylaştırabilir (ve A'ya bağlı olabilecek her şey) için, C değerini (B'nin) exports kısmında özelliğini gönderin.

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

Önemli: Dışa aktarılan kurallar normal bir bağımlılık değildir. Önceki örneğe devam edecek olursak B, C'yi dışa aktarıyor ve C'yi de kullanmak istiyorsa bunu kendi deps

javabuilder_jvm_flags

Dize listesi; varsayılan değer []

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

Dize listesi; varsayılan değer []

Bu kitaplık için ek derleyici seçenekleri. "Değişken yap" değişikliğine tabi ve Bourne kabuk belirteçleme.

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. Örnekler IDE eklentileri için IDE API'leri veya her şey için tools.jar bu tür kitaplıklardan biridir çalışıyordum.

neverlink = 1 yönergesinin, derleyicinin materyali satır içine almasını engellemediğini unutmayın. tarafından izin verildiği şekilde, bu kitaplıktan alıp buna bağımlı derleme hedeflerine Dil Özellikleri (ör. String için static final sabit değer veya temel türlerde) ayırmaları gerekir. Bu nedenle tercih edilen kullanım alanı, çalışma zamanı kitaplığının ile aynı olacak.

Çalışma zamanı kitaplığı, derleme kitaplığından farklıysa yalnızca JLS'nin derleyicilerin satır içi yapmasını yasakladığı (ve JLS'nin gelecekteki tüm sürümleri).

plugins

Etiket listesi; varsayılan değer []

Derleme zamanında çalışacak Java derleyici eklentileri. Bu özellikte belirtilen her java_plugin bu kuralla birlikte çalıştırılır geliştirildi. Bir kitaplık, exported_plugins Kaynaklar oluşturulan dosya, bu kuralın ortaya çıkan jar'ına dahil edilir.
proguard_specs

Etiket listesi; varsayılan değer []

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak spesifikasyonlar açıklanır. Belirtilmişse bunlar, bu kitaplığa bağlı olarak herhangi bir android_binary hedefine eklenir. Buraya eklenen dosyalar sadece ideaklı kurallara, yani -dontnote, -dontwarn, yan etkileri ve -keep ile başlayan kuralları içerir. Diğer seçenekler yalnızca android_binary öğesinin proguard_specs (totoolojik olmayan birleştirmeler için)
resource_strip_prefix

String; varsayılan değer ""

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

Belirtilirse bu yol öneki resources içindeki her dosyadan çıkarılır. özelliğini gönderin. Bu, kaynak dosyasının bu dizinde olmamasıyla ilgili bir hatadır. Değilse belirtildiğinde (varsayılan), kaynak dosyasının yolu yine aynı mantığını kaynak dosyalardan oluşan Java paketi olarak kullanır. Örneğin, stuff/java/foo/bar/a.txt şu şekilde konumlandırılacak: foo/bar/a.txt.

runtime_deps

Etiket listesi; varsayılan değer []

Son ikili program veya yalnızca çalışma zamanında test için kullanılacak kitaplıklar. Bunlar sıradan deps ürününde olduğu gibi çalışma zamanı sınıf yolunda görünür, ancak üzerinde çalışmalıdır. Yalnızca çalışma zamanında gereken bağımlılıklar burada görebilirsiniz. Bağımlılık analizi araçları, runtime_deps ve deps.

java_lite_proto_library

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

java_lite_proto_library, .proto dosyadan Java kodu oluşturur.

deps, proto_library kuralına işaret etmelidir.

Örnek:


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

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

proto_library(
    name = "bar",
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan değer []

proto_library listesi kurallarını belirtin.

java_proto_library

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

java_proto_library, .proto dosyadan Java kodu oluşturur.

deps, proto_library kuralına işaret etmelidir.

Örnek:


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

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

proto_library(
    name = "foo_proto",
)

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan değer []

proto_library listesi kurallarını belirtin.

java_test

Kural kaynağını görüntüle
java_test(name, deps, srcs, data, resources, add_exports, add_opens, args, bootclasspath, classpath_resources, compatible_with, create_executable, deploy_manifest_lines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, launcher, licenses, local, main_class, neverlink, plugins, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, use_testrunner, visibility)

java_test() kuralı bir Java testi derler. Test, projenizdeki test kodu. 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: Uygun bir Java arşivi . (Yalnızca açıkça talep edildiğinde oluşturulur.) Şu açıklamaya bakın: Şu kaynaktan name_deploy.jar çıkış: java_binary'yi ziyaret edin.

java_binary() bağımsız değişkenleriyle ilgili bölüme bakın. Bu kural ayrıca tüm özellikleri destekler. (*_test) testine tabi tutun.

Örnekler



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

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

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan değer []

Hedefe bağlanacak diğer kitaplıkların listesi. deps ile ilgili genel yorumları şu adreste bulabilirsiniz: Genel özellikler çoğu derleme kuralına bakın.
srcs

Etiket listesi; varsayılan değer []

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

.java türündeki kaynak dosyalar derlenir. Oluşturulması durumunda .java dosyalarına oluşturma kuralının adının eklenmesi genellikle önerilir buraya yerleştirin. Bu hem okunabilirliği artırmakla kalmaz hem de gelecekteki değişikliklere karşı daha dirençli hale getirir: oluşturan kural gelecekte farklı dosyalara ihtiyacınız varsa tek bir yeri düzeltmeniz gerekir: outs oluşturma kuralı. Oluşturma kuralını deps içinde listelememelisiniz. çünkü işlemsiz.

.srcjar türündeki kaynak dosyalar paketten çıkarılır ve derlenir. (Bu, bir genrule dosyasıyla .java dosyaları oluşturmanız gerekir.)

Kurallar: Kural (genellikle genrule veya filegroup) oluşturulursa yukarıda listelenen dosyalardan herhangi biri, dosyası olarak da kaydedebilir.

Bu bağımsız değişken, main_class özelliği, sınıfını kullanmanız veya runtime_deps bağımsız değişkenini belirtmeniz gerekir.

data

Etiket listesi; varsayılan değer []

Çalışma zamanında bu kitaplığın ihtiyaç duyduğu dosyaların listesi. data ile ilgili genel yorumları göster tarafından tanımlanan tipik çoğu derleme kuralına bakın.
resources

Etiket listesi; varsayılan değer []

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

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

Kaynaklar belirtilirse, normal kaynaklarla birlikte kavanozda paketlenir Derleme, .class dosya üretti. İçerideki kaynakların konumu proje yapısına göre belirlenir. Bazel ilk olarak Maven'in standart dizin düzenine benzerdir. (bir "src" dizini ve ardından bir "kaynaklar" dizini torunu). Bu durumda bulunduktan sonra Bazel, "Java" adlı en üstteki dizini veya "Javatests" gibi (yani, Örneğin, bir kaynak <workspace root>/x/java/y/java/z konumundaysa kaynağın yolu y/java/z olur. Bu buluşsal yöntem geçersiz kılınamaz. ancak resource_strip_prefix özelliği bir kaynak dosyalar için belirli bir alternatif dizindir.

add_exports

Dize listesi; varsayılan değer []

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

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

add_opens

Dize listesi; varsayılan değer []

Bu kitaplığın belirtilen module öğesine yansıtıcı şekilde erişmesine izin ver veya package.

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

bootclasspath

Etiket; varsayılan değer None

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

Etiket listesi; varsayılan değer []

BAŞKA 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 kullanımını gerektiren üçüncü taraf kitaplıkları desteklemektir sınıf yolunda tam olarak "myconfig.xml" olarak bulundu. Yalnızca şuralarda izin verilir: kullanılmasıdır.

create_executable

Boole; 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 []

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

Dize listesi; varsayılan değer []

Bu ikili program için ekstra derleyici seçenekleri. "Değişken yap" değişikliğine tabi ve Bourne kabuk belirteçleme.

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) öğesine tabi ve "Değişken yap" ifadesini değiştirme ve Bourne kabuk belirteçleme.

Java ikili programı için sarmalayıcı komut dosyası bir CLASSPATH tanımı içeriyor (bağımlı tüm jar'ları bulmak için) kullanır 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 ve ardından "$@" ile diğerlerini geçin bağımsız değişkenlerini ekleyin. Ancak, ayrıştırma için tasarlanmış bağımsız değişkenler komuttaki sınıf adından önce belirtilmelidir. satırında görünür. jvm_flags içeriği sarmalayıcıya eklenir komut dosyasını eklemeniz gerekir.

Bu özelliğin *_deploy.jar üzerinde etkisi olmadığını unutmayın. çıktı.

launcher

Etiket; varsayılan değer None

Java programınızı çalıştırmak için kullanılacak Normal bin/java programı JDK'ya dahildir. Hedef bir cc_binary olmalıdır. Şu özelliklere sahip herhangi bir cc_binary: , Bu özellik için bir değer olarak Java Invocation API 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 bunları etkiler Şu özelliklere sahip java_binary ve java_test hedef: launcher özelliği belirtilmedi.

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

  • 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. {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ğlanmıştır; burada {name} bu java_binary kuralının name özelliğidir. Böyle durumlarda bağlayıcı, kullanılmadığını düşündüğü kodları elde edilen ikili programdan kaldırır. Yani, yalnızca JNI aracılığıyla erişilen C++ kodları yalnızca cc_library hedefi alwayslink = 1 değerini belirtiyor.

Varsayılan JDK başlatıcı dışında herhangi bir başlatıcıyı kullanırken biçim, *_deploy.jar çıkış değişikliğinin sayısı. Temel konuları java_binary dokümanlarına göz atın.

main_class

String; varsayılan değer ""

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

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: bu kural tarafından derlenmiş olabilir (srcs kaynağından) veya doğrudan veya geçişli bağımlılıklar tarafından sağlanan (runtime_deps veya deps). Sınıf kullanılamıyorsa ikili program çalışma zamanında başarısız olur. orada derleme zamanı denetimi yoktur.

Boole; varsayılan değer False

plugins

Etiket listesi; varsayılan değer []

Derleme zamanında çalışacak Java derleyici eklentileri. Bu özellikte belirtilen her java_plugin bu kuralla birlikte çalıştırılır geliştirildi. Bir kitaplık, exported_plugins Kaynaklar oluşturulan dosya, bu kuralın ortaya çıkan jar'ına dahil edilir.
resource_strip_prefix

String; varsayılan değer ""

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

Belirtilirse bu yol öneki resources içindeki her dosyadan çıkarılır. özelliğini gönderin. Bu, kaynak dosyasının bu dizinde olmamasıyla ilgili bir hatadır. Değilse belirtildiğinde (varsayılan), kaynak dosyasının yolu yine aynı mantığını kaynak dosyalardan oluşan Java paketi olarak kullanır. Örneğin, stuff/java/foo/bar/a.txt şu şekilde konumlandırılacak: foo/bar/a.txt.

runtime_deps

Etiket listesi; varsayılan değer []

Son ikili program veya yalnızca çalışma zamanında test için kullanılacak kitaplıklar. Bunlar sıradan deps ürününde olduğu gibi çalışma zamanı sınıf yolunda görünür, ancak üzerinde çalışmalıdır. Yalnızca çalışma zamanında gereken bağımlılıklar burada görebilirsiniz. Bağımlılık analizi araçları, runtime_deps ve deps.
stamp

Tam sayı; varsayılan değer 0

Derleme bilgilerinin ikili programda kodlanıp kodlanmayacağını belirler. Olası değerler:
  • stamp = 1: Derleme bilgilerini --nostamp derleme. Bu ayarından kaçınılmalıdır. Aksi takdirde, bu işlem ve buna bağımlı tüm aşağı akış işlemleri.
  • stamp = 0: Derleme bilgilerini her zaman sabit değerlerle değiştirin. Bu iyi bir derleme sonucu önbelleğe alma sağlar.
  • stamp = -1: Derleme bilgilerinin yerleştirilmesi --[no]stamp işaretidir.

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

test_class

String; 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 ayarla ilk argümantan vazgeçmemeye çalışın.

Bu özellik, çalıştırılacak bir Java sınıfının adını belirtir inceleyeceğiz. Bunun ayarlanması nadiren gerekir. Bu bağımsız değişken atlanırsa hedefin name ve dönüşüm değerleri kullanılarak kaynağa-köke göre görelim. Test, bilinen bir kaynak kök, test_class aşağıdaki durumlarda Bazel hata bildirir: ayarlanmamış.

JUnit3 için test sınıfının junit.framework.TestCase veya herkese açık olması gerekiyor değeri döndüren statik suite() yöntemi junit.framework.Test (veya Test alt sınıfı). JUnit4 için, sınıfa org.junit.runner.RunWith.

Bu özellik, birden fazla java_test kuralının aşağıdakileri yapmasına izin verir: aynı Test öğesini paylaş (TestCase, TestSuite, ...). Normal şartlarda ek bilginin iletildiğinden (ör. jvm_flags=['-Dkey=value'] aracılığıyla) her durumda değişiklik gösterebilir, örneğin farklı bir alt kümesidir. Bu özellik, javatests ağacı dışındaki Java testleri.

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ğini ve ilgili --java_launcher işaretle bu hedef için yoksayılacak.

use_testrunner

Boole; varsayılan değer True

Test çalıştırıcısını kullan (varsayılan olarak com.google.testing.junit.runner.BazelTestRunner) sınıfını kullanın. ana giriş noktasını kullanabilir ve test sınıfını bazel.test_suite değeri olarak test koşucusuna atanır. sistem özelliğini etkinleştirmelisiniz.
. Varsayılan değeri geçersiz kılmak için bunu kullanabilirsiniz yardımcı olmak için test çalıştırıcısını kullanarak java_test kural, ve java_binary kuralları için kullanmayın. Düşük ihtimalle bunu yapmanız gerekir. Bir kullanım AllTest içindir başka bir kural tarafından çağrılan kurallar (veri tabanı ) girmeniz gerekir. AllTest kuralı java_binary olarak tanımlanmalıdır, ancak test çalıştırıcıyı ana giriş noktası olarak kullanmaya devam edebilirsiniz. Test çalıştırıcı sınıfının adı, main_class özelliğiyle geçersiz kılınabilir.

java_package_configuration

Kural kaynağını görüntüle
java_package_configuration(name, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, javacopts, output_licenses, packages, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

Bir paket grubuna uygulanacak yapılandırma. Yapılandırmalar java_toolchain.javacopts sn.

Örnek:



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

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

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


Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

data

Etiket listesi; varsayılan değer []

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

Dize listesi; varsayılan değer []

packages

Etiket listesi; varsayılan değer []

package_group kümesi karar vermelisiniz.

java_plugin

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

java_plugin, Bazel tarafından çalıştırılan Java derleyicisi için eklentileri tanımlar. İlgili içeriği oluşturmak için kullanılan yalnızca desteklenen tür eklentileri ek açıklama işlemcileridir. java_library veya java_binary kuralı, plugins aracılığıyla eklentilere bağlı olarak eklentileri çalıştırabilir. özelliğini gönderin. Ayrıca java_library, eklentileri ona doğrudan bağımlıysa exported_plugins.

Dolaylı çıkış hedefleri

  • libname.jar: Bir Java arşivi.

Bağımsız değişkenler java_library ile aynıdır, ancak şu durumlar hariçtir: processor_class bağımsız değişkeninin eklenmesi gerekir.

Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

deps

Etiket listesi; varsayılan değer []

Bu kitaplığa bağlanacak kitaplıkların listesi. deps ile ilgili genel yorumları şu adreste bulabilirsiniz: Genel özellikler çoğu derleme kuralına bakın.

deps içinde listelenen java_library kuralları tarafından oluşturulan jar'lar açık olacak bu kuralın derleme zamanı sınıf yolu. Dahası, hizmet hesaplarının geçişli olarak kapatılması deps, runtime_deps ve exports şurada olacak: çalışma zamanı sınıf yolu.

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

srcs

Etiket listesi; varsayılan değer []

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

.java türündeki kaynak dosyalar derlenir. Oluşturulması durumunda .java dosyalarına oluşturma kuralının adının eklenmesi genellikle önerilir buraya yerleştirin. Bu hem okunabilirliği artırmakla kalmaz hem de gelecekteki değişikliklere karşı daha dirençli hale getirir: oluşturan kural gelecekte farklı dosyalara ihtiyacınız varsa tek bir yeri düzeltmeniz gerekir: outs oluşturma kuralı. Oluşturma kuralını deps içinde listelememelisiniz. çünkü işlemsiz.

.srcjar türündeki kaynak dosyalar paketten çıkarılır ve derlenir. (Bu, bir genrule dosyasıyla .java dosyaları oluşturmanız gerekir.)

Kurallar: Kural (genellikle genrule veya filegroup) oluşturulursa yukarıda listelenen dosyalardan herhangi biri, dosyası olarak da kaydedebilir.

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

Aynı boyutta en az bir dosya olduğu sürece diğer tüm dosyalar dosya türü olabilir. Aksi takdirde hata oluşur.

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

data

Etiket listesi; varsayılan değer []

Çalışma zamanında bu kitaplığın ihtiyaç duyduğu dosyaların listesi. data ile ilgili genel yorumları şu adreste bulabilirsiniz: Genel özellikler çoğu derleme kuralına bakın.

Bir java_library oluştururken Bazel bu dosyaları hiçbir yere koymaz; eğer data dosya oluşturulduktan sonra Bazel tarafından oluşturulur. Bir Bu teste dayalı bir test yöntemidir. java_library Bazel, data dosya, çalıştırma dosyaları alanına.

resources

Etiket listesi; varsayılan değer []

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

Kaynaklar, kaynak dosyalar veya oluşturulan dosyalar olabilir.

Kaynaklar belirtilirse, normal kaynaklarla birlikte kavanozda paketlenir Derleme, .class dosya üretti. İçerideki kaynakların konumu proje yapısına göre belirlenir. Bazel ilk olarak Maven'in standart dizin düzenine benzerdir. (bir "src" dizini ve ardından bir "kaynaklar" dizini torunu). Bu durumda bulunduktan sonra Bazel, "Java" adlı en üstteki dizini veya "Javatests" gibi (yani, Örneğin, bir kaynak <workspace root>/x/java/y/java/z konumundaysa kaynağın yolu y/java/z olur. Bu buluşsal yöntem geçersiz kılınamaz. ancak resource_strip_prefix özelliği bir kaynak dosyalar için belirli bir alternatif dizindir.

add_exports

Dize listesi; varsayılan değer []

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

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

add_opens

Dize listesi; varsayılan değer []

Bu kitaplığın belirtilen module öğesine yansıtıcı şekilde erişmesine izin ver veya package.

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

bootclasspath

Etiket; varsayılan değer None

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

Boole; varsayılan değer False

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

Bir kural, API oluşturan ek açıklama işlemcisi kullanıyorsa diğer kurallar kendileri oluşturulan koda yalnızca derleme işlemleri, oluşturma kuralından sonra programlanır. Bu özelliğinin değeri, Bazel'a --java_header_compilation etkin.

UYARI: Bu özellik, derlemeyi yalnızca gerekli olduğunda kullanın.

javabuilder_jvm_flags

Dize listesi; varsayılan değer []

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

Dize listesi; varsayılan değer []

Bu kitaplık için ek derleyici seçenekleri. "Değişken yap" değişikliğine tabi ve Bourne kabuk belirteçleme.

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. Örnekler IDE eklentileri için IDE API'leri veya her şey için tools.jar bu tür kitaplıklardan biridir çalışıyordum.

neverlink = 1 yönergesinin, derleyicinin materyali satır içine almasını engellemediğini unutmayın. tarafından izin verildiği şekilde, bu kitaplıktan alıp buna bağımlı derleme hedeflerine Dil Özellikleri (ör. String için static final sabit değer veya temel türlerde) ayırmaları gerekir. Bu nedenle tercih edilen kullanım alanı, çalışma zamanı kitaplığının ile aynı olacak.

Çalışma zamanı kitaplığı, derleme kitaplığından farklıysa yalnızca JLS'nin derleyicilerin satır içi yapmasını yasakladığı (ve JLS'nin gelecekteki tüm sürümleri).

output_licenses

Dize listesi; varsayılan değer []

plugins

Etiket listesi; varsayılan değer []

Derleme zamanında çalışacak Java derleyici eklentileri. Bu özellikte belirtilen her java_plugin bu kuralla birlikte çalıştırılır geliştirildi. Bir kitaplık, exported_plugins Kaynaklar oluşturulan dosya, bu kuralın ortaya çıkan jar'ına dahil edilir.
processor_class

String; varsayılan değer ""

İşlemci sınıfı, Java derleyicinin kullanması gereken tam sınıf türüdür. giriş noktası olarak kullanılır. Belirtilmezse bu kural Java derleyicinin ek açıklama işlemesine bir ek açıklama işlemcisi ekler, ancak çalışma zamanı sınıf yolu, derleyicinin ek açıklama işlemci yoluna dahil edilmeye devam eder. (Bu öncelikle tarafından kullanılmak üzere tasarlanmıştır. Yüklenen Error Prone eklentileri kullanarak ek açıklama işlemci yolundan java.util.ServiceLoader.)
proguard_specs

Etiket listesi; varsayılan değer []

ProGuard spesifikasyonu olarak kullanılacak dosyalar. Burada, ProGuard tarafından kullanılacak spesifikasyonlar açıklanır. Belirtilmişse bunlar, bu kitaplığa bağlı olarak herhangi bir android_binary hedefine eklenir. Buraya eklenen dosyalar sadece ideaklı kurallara, yani -dontnote, -dontwarn, yan etkileri ve -keep ile başlayan kuralları içerir. Diğer seçenekler yalnızca android_binary öğesinin proguard_specs (totoolojik olmayan birleştirmeler için)
resource_strip_prefix

String; varsayılan değer ""

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

Belirtilirse bu yol öneki resources içindeki her dosyadan çıkarılır. özelliğini gönderin. Bu, kaynak dosyasının bu dizinde olmamasıyla ilgili bir hatadır. Değilse belirtildiğinde (varsayılan), kaynak dosyasının yolu yine aynı mantığını kaynak dosyalardan oluşan Java paketi olarak kullanır. Örneğin, stuff/java/foo/bar/a.txt şu şekilde konumlandırılacak: foo/bar/a.txt.

java_runtime

Kural kaynağını görüntüle
java_runtime(name, srcs, compatible_with, default_cds, deprecation, distribs, exec_compatible_with, exec_properties, features, hermetic_srcs, hermetic_static_libs, java, java_home, lib_ct_sym, lib_modules, output_licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, version, visibility)

Java çalışma zamanının yapılandırmasını belirtir.

Örnek:



java_runtime(
    name = "jdk-9-ea+153",
    srcs = glob(["jdk9-ea+153/**"]),
    java_home = "jdk9-ea+153",
)


Bağımsız değişkenler

Özellikler
name

Ad; zorunlu

Bu hedef için benzersiz bir ad.

srcs

Etiket listesi; varsayılan değer []

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

Etiket; varsayılan değer None

Hermetik java_runtime için varsayılan CDS arşivi. Hermetik java_binary hedefi için etkinleştirilirse ve hedef yoksa adresini belirterek kendi CDS arşivini sağlayabilir classlist özelliği, java_runtime varsayılan CDS'si, hermetik dağıtım JAR içinde paketlenmiştir.
hermetic_srcs

Etiket listesi; varsayılan değer []

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

Etiket listesi; varsayılan değer []

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

Etiket; varsayılan değer None

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

String; varsayılan değer ""

Çalışma zamanının kök yolu. "Yap" konusuyla ilgili değişkeni ikame değerleridir. Bu yol mutlak ise kural, iyi bilinen ve hermetik olmayan bir Java çalışma zamanını yol'a dokunun. 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 yolunda, yolu şununla biten tam olarak bir dosya var: /lib/ct.sym dosyası kullanılır.
lib_modules

Etiket; varsayılan değer None

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

Dize listesi; varsayılan değer []

version

Tam sayı; varsayılan değer 0

Java çalışma zamanının özellik sürümü. Örneğin, Runtime.version().feature()

java_toolchain

Kural kaynağını görüntüle
java_toolchain(name, android_lint_data, android_lint_jvm_opts, android_lint_opts, android_lint_package_configuration, android_lint_runner, bootclasspath, compatible_javacopts, compatible_with, deprecation, deps_checker, distribs, exec_compatible_with, exec_properties, features, forcibly_disable_header_compilation, genclass, header_compiler, header_compiler_builtin_processors, header_compiler_direct, ijar, jacocorunner, java_runtime, javabuilder, javabuilder_data, javabuilder_jvm_opts, javac_supports_multiplex_workers, javac_supports_worker_cancellation, javac_supports_worker_multiplex_sandboxing, javac_supports_workers, javacopts, jspecify_implicit_deps, jspecify_javacopts, jspecify_packages, jspecify_processor, jspecify_processor_class, jspecify_stubs, jvm_opts, licenses, misc, oneversion, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, proguard_allowlister, reduced_classpath_incompatible_processors, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, toolchains, tools, turbine_data, turbine_jvm_opts, visibility, xlint)

Java derleyici yapılandırmasını belirtir. Kullanılacak araç zinciri, --java_toolchain bağımsız değişkenini kullanır. Normalde bu tür kuralları siz istemeden Java derleyicinizi ayarlayın.

Ö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; zorunlu

Bu hedef için benzersiz bir ad.

android_lint_data

Etiket listesi; varsayılan değer []

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 değer []

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 değer []

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

null; varsayılan değer {}

Dahili API, kullanmayın!
deps_checker

Etiket; varsayılan değer None

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

Boole; varsayılan değer False

Bunu yapmayan platformlarda başlık derlemesini devre dışı bırakmak için --java_header_compilation değerini geçersiz kılar desteklemeniz gerekir, örneğin, JDK 7 Bazel.
genclass

Etiket; varsayılan değer None

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

Etiket; varsayılan değer None

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

Dize listesi; varsayılan değer []

Dahili API, kullanmayın!
header_compiler_direct

Etiket; varsayılan değer None

Şunu yapmayan doğrudan classpath işlemleri için kullanılacak başlık derleyicinin isteğe bağlı etiketi: API oluşturan ek açıklama işlemcileri eklemeyin.

Bu araç, not işlemeyi desteklemez.

ijar

Etiket; varsayılan değer None

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

Etiket; varsayılan değer None

Bu araç zinciriyle kullanılacak java_runtime kodu. Varsayılan olarak java_runtime değerine ayarlanır. nasıl yapılandırılacakları hakkında daha fazla bilgi edinin.
javabuilder

Etiket; varsayılan değer None

JavaBuilder dağıtım deposunun etiketi.
javabuilder_data

Etiket listesi; varsayılan değer []

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_worker_cancellation

Boole; varsayılan değer True

JavaBuilder kalıcı çalışanların iptal edilmesini destekliyorsa doğru, desteklenmiyorsa false'tur.
javac_supports_worker_multiplex_sandboxing

Boole; varsayılan değer False

JavaBuilder, korumalı alan ile Multiplex kalıcı çalışan olarak çalıştırmayı destekliyorsa doğru, desteklenmiyorsa false değerini döndürür.
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. Lütfen Java derleyicisine bakın listesine göz atın.
jspecify_implicit_deps

Etiket; varsayılan değer None

Deneysel, kullanmayın!
jspecify_javacopts

Dize listesi; varsayılan değer []

Deneysel, kullanmayın!
jspecify_packages

Etiket listesi; varsayılan değer []

Deneysel, kullanmayın!
jspecify_processor

Etiket; varsayılan değer None

Deneysel, kullanmayın!
jspecify_processor_class

String; varsayılan değer ""

Deneysel, kullanmayın!
jspecify_stubs

Etiket listesi; varsayılan değer []

Deneysel, kullanmayı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. Lütfen Java'ya bakın sanal makine dokümanlarına göz atın.
misc

Dize listesi; varsayılan değer []

Desteği sonlandırıldı: Bunun yerine javacopts kullanı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 izin verilenler listesinin etiketi.
package_configuration

Etiket listesi; varsayılan değer []

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

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

ProGuard izin verilenler listesinin etiketi.
reduced_classpath_incompatible_processors

Dize listesi; varsayılan değer []

Dahili API, kullanmayın!
singlejar

Etiket; varsayılan değer None

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

String; varsayılan değer ""

Java kaynak sürümü (ör. "6" veya "7"). Hangi kod yapısı grubunu Java kaynak kodunda izin verilir.
target_version

String; varsayılan değer ""

Java hedef sürümü (ör. "6" veya "7"). Sınıfın hangi Java çalışma zamanı için olduğunu belirtir derlemeniz gerekir.
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ığıdır.
tools

Etiket listesi; varsayılan değer []

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

Etiket listesi; varsayılan değer []

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. Öncesinde tire işareti bulunan dosyayı kaldırır. Daha fazla bilgi için lütfen -Xlint seçenekleriyle ilgili Javac dokümanlarına bakın.