Aturan Java

Laporkan masalah Lihat sumber Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Aturan

java_binary

Lihat sumber aturan
java_binary(name, deps, srcs, data, resources, add_exports, add_opens, args, bootclasspath, classpath_resources, compatible_with, create_executable, deploy_env, deploy_manifest_lines, deprecation, env, exec_compatible_with, exec_group_compatible_with, exec_properties, features, javacopts, jvm_flags, launcher, licenses, main_class, neverlink, output_licenses, package_metadata, plugins, resource_strip_prefix, restricted_to, runtime_deps, stamp, tags, target_compatible_with, testonly, toolchains, use_launcher, use_testrunner, visibility)

Membangun arsip Java ("file jar"), serta skrip shell wrapper dengan nama yang sama dengan aturan. Skrip shell wrapper menggunakan classpath yang mencakup, antara lain, file jar untuk setiap library yang menjadi dependensi biner. Saat menjalankan skrip shell wrapper, variabel lingkungan JAVABIN yang tidak kosong akan diprioritaskan daripada versi yang ditentukan melalui flag --java_runtime_version Bazel.

Skrip wrapper menerima beberapa tanda unik. Lihat java_stub_template.txt untuk mengetahui daftar flag dan variabel lingkungan yang dapat dikonfigurasi yang diterima oleh wrapper.

Target output implisit

  • name.jar: Arsip Java, yang berisi file class dan resource lain yang sesuai dengan dependensi langsung biner.
  • name-src.jar: Arsip yang berisi sumber ("source jar").
  • name_deploy.jar: Arsip Java yang cocok untuk deployment (hanya dibuat jika diminta secara eksplisit).

    Membangun target <name>_deploy.jar untuk aturan Anda membuat file jar mandiri dengan manifes yang memungkinkannya dijalankan dengan perintah java -jar atau dengan opsi --singlejar skrip wrapper. Penggunaan skrip wrapper lebih disarankan daripada java -jar karena juga meneruskan flag JVM dan opsi untuk memuat library native.

    JAR deployment berisi semua class yang akan ditemukan oleh classloader yang menelusuri classpath dari skrip wrapper biner dari awal hingga akhir. Direktori ini juga berisi library native yang diperlukan untuk dependensi. File ini otomatis dimuat ke dalam JVM saat runtime.

    Jika target Anda menentukan atribut peluncur, maka _deploy.jar akan menjadi biner native, bukan file JAR biasa. Ini akan berisi peluncur dan dependensi native (C++) dari aturan Anda, yang semuanya ditautkan ke dalam biner statis. Byte file jar sebenarnya akan ditambahkan ke biner native tersebut, sehingga membuat blob biner tunggal yang berisi kode Java dan yang dapat dieksekusi. Anda dapat menjalankan file jar yang dihasilkan secara langsung seperti menjalankan biner native lainnya.

  • name_deploy-src.jar: Arsip yang berisi sumber yang dikumpulkan dari penutupan transitif target. Ini akan cocok dengan class di deploy.jar kecuali jika jar tidak memiliki jar sumber yang cocok.

Sebaiknya gunakan nama file sumber yang merupakan titik entri utama aplikasi (tanpa ekstensi). Misalnya, jika titik entri Anda disebut Main.java, maka nama Anda bisa Main.

Atribut deps tidak diizinkan dalam aturan java_binary tanpa srcs; aturan tersebut memerlukan main_class yang disediakan oleh runtime_deps.

Cuplikan kode berikut mengilustrasikan kesalahan umum:


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

Lakukan hal berikut:


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

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

deps

Daftar label; defaultnya adalah []

Daftar library lain yang akan ditautkan ke target. Lihat komentar umum tentang deps di Atribut umum yang ditentukan oleh sebagian besar aturan build.
srcs

Daftar label; defaultnya adalah []

Daftar file sumber yang diproses untuk membuat target. Atribut ini hampir selalu diperlukan; lihat pengecualian di bawah.

File sumber berjenis .java dikompilasi. Jika file .java yang dihasilkan, sebaiknya masukkan nama aturan pembuatan di sini, bukan nama file itu sendiri. Hal ini tidak hanya meningkatkan keterbacaan, tetapi juga membuat aturan lebih tangguh terhadap perubahan di masa mendatang: jika aturan pembuatan menghasilkan file yang berbeda di masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan pembuatan. Anda tidak boleh mencantumkan aturan pembuatan di deps karena tidak ada operasi.

File sumber berjenis .srcjar akan diekstrak dan dikompilasi. (Hal ini berguna jika Anda perlu membuat sekumpulan file .java dengan genrule.)

Aturan: jika aturan (biasanya genrule atau filegroup) menghasilkan file apa pun yang tercantum di atas, file tersebut akan digunakan dengan cara yang sama seperti yang dijelaskan untuk file sumber.

Argumen ini hampir selalu diperlukan, kecuali jika atribut main_class menentukan class pada classpath runtime atau Anda menentukan argumen runtime_deps.

data

Daftar label; defaultnya adalah []

Daftar file yang diperlukan oleh library ini saat runtime. Lihat komentar umum tentang data di Atribut umum yang ditentukan oleh sebagian besar aturan build.
resources

Daftar label; defaultnya adalah []

Daftar file data yang akan disertakan dalam jar Java.

Aset dapat berupa file sumber atau file yang dihasilkan.

Jika ditentukan, resource akan dibundel dalam JAR bersama dengan file .class biasa yang dihasilkan oleh kompilasi. Lokasi resource di dalam file jar ditentukan oleh struktur project. Bazel pertama-tama mencari tata letak direktori standar Maven, (direktori "src" yang diikuti dengan direktori "resources" cucu). Jika tidak ditemukan, Bazel akan mencari direktori teratas yang bernama "java" atau "javatests" (jadi, misalnya, jika resource berada di <workspace root>/x/java/y/java/z, jalur resource akan menjadi y/java/z. Heuristik ini tidak dapat diganti, namun, atribut resource_strip_prefix dapat digunakan untuk menentukan direktori alternatif tertentu untuk file resource.

add_exports

Daftar string; defaultnya adalah []

Izinkan library ini mengakses module atau package yang diberikan.

Ini sesuai dengan flag --add-exports= javac dan JVM.

add_opens

Daftar string; defaultnya adalah []

Izinkan library ini untuk mengakses module atau package yang diberikan secara reflektif.

Ini sesuai dengan flag --add-opens= javac dan JVM.

bootclasspath

Label; defaultnya adalah None

API terbatas, jangan gunakan!
classpath_resources

Daftar label; defaultnya adalah []

JANGAN GUNAKAN OPSI INI KECUALI TIDAK ADA CARA LAIN)

Daftar resource yang harus berada di root pohon java. Satu-satunya tujuan atribut ini adalah untuk mendukung library pihak ketiga yang mengharuskan resource-nya ditemukan di classpath sebagai "myconfig.xml". Hal ini hanya diizinkan pada biner dan bukan library, karena bahaya konflik namespace.

create_executable

Boolean; defaultnya adalah True

Tidak digunakan lagi, gunakan java_single_jar sebagai gantinya.
deploy_env

Daftar label; defaultnya adalah []

Daftar target java_binary lainnya yang merepresentasikan lingkungan deployment untuk biner ini. Tetapkan atribut ini saat membangun plugin yang akan dimuat oleh java_binary lain.
Menetapkan atribut ini akan mengecualikan semua dependensi dari classpath runtime (dan jar deployment) biner ini yang dibagikan antara biner ini dan target yang ditentukan dalam deploy_env.
deploy_manifest_lines

Daftar string; defaultnya adalah []

Daftar baris yang akan ditambahkan ke file META-INF/manifest.mf yang dihasilkan untuk target *_deploy.jar. Isi atribut ini tidak tunduk pada penggantian "Jadikan variabel".
javacopts

Daftar string; defaultnya adalah []

Opsi compiler tambahan untuk biner ini. Tunduk pada penggantian "Buat variabel" dan tokenisasi Bourne shell.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

jvm_flags

Daftar string; defaultnya adalah []

Daftar flag yang akan disematkan dalam skrip wrapper yang dibuat untuk menjalankan biner ini. Tunduk pada substitusi $(location) dan "Buat variabel", serta tokenisasi Bourne shell.

Skrip wrapper untuk biner Java mencakup definisi CLASSPATH (untuk menemukan semua jar dependen) dan memanggil interpreter Java yang tepat. Baris perintah yang dihasilkan oleh skrip wrapper mencakup nama class utama yang diikuti dengan "$@" sehingga Anda dapat meneruskan argumen lain setelah nama class. Namun, argumen yang ditujukan untuk parsing oleh JVM harus ditentukan sebelum nama class di command line. Konten jvm_flags ditambahkan ke skrip wrapper sebelum nama class dicantumkan.

Perhatikan bahwa atribut ini tidak berpengaruh pada output *_deploy.jar.

launcher

Label; defaultnya adalah None

Tentukan biner yang akan digunakan untuk menjalankan program Java Anda, bukan program bin/java normal yang disertakan dengan JDK. Target harus berupa cc_binary. cc_binary apa pun yang menerapkan Java Invocation API dapat ditentukan sebagai nilai untuk atribut ini.

Secara default, Bazel akan menggunakan peluncur JDK normal (bin/java atau java.exe).

Flag Bazel --java_launcher terkait hanya memengaruhi target java_binary dan java_test yang belum menentukan atribut launcher.

Perhatikan bahwa dependensi native (C++, SWIG, JNI) Anda akan dibangun secara berbeda, bergantung pada apakah Anda menggunakan peluncur JDK atau peluncur lain:

  • Jika Anda menggunakan peluncur JDK normal (default), dependensi native akan dibangun sebagai library bersama bernama {name}_nativedeps.so, dengan {name} adalah atribut name dari aturan java_binary ini. Kode yang tidak digunakan tidak dihapus oleh linker dalam konfigurasi ini.
  • Jika Anda menggunakan peluncur lain, dependensi native (C++) ditautkan secara statis ke dalam biner bernama {name}_nativedeps, dengan {name} adalah atribut name dari aturan java_binary ini. Dalam hal ini, linker akan menghapus kode apa pun yang dianggap tidak digunakan dari biner yang dihasilkan, yang berarti kode C++ apa pun yang diakses hanya melalui JNI mungkin tidak ditautkan kecuali target cc_library tersebut menentukan alwayslink = True.

Saat menggunakan peluncur selain peluncur JDK default, format output *_deploy.jar akan berubah. Lihat dokumentasi java_binary utama untuk mengetahui detailnya.

main_class

String; default-nya adalah ""

Nama class dengan metode main() yang akan digunakan sebagai titik entri. Jika menggunakan opsi ini, aturan tidak memerlukan daftar srcs=[...]. Dengan demikian, dengan atribut ini, Anda dapat membuat file yang dapat dieksekusi dari library Java yang sudah berisi satu atau beberapa metode main().

Nilai atribut ini adalah nama class, bukan file sumber. Class harus tersedia saat runtime: class dapat dikompilasi oleh aturan ini (dari srcs) atau disediakan oleh dependensi langsung atau transitif (melalui runtime_deps atau deps). Jika class tidak tersedia, biner akan gagal saat runtime; tidak ada pemeriksaan waktu build.

Boolean; defaultnya adalah False

plugins

Daftar label; defaultnya adalah []

Plugin compiler Java untuk dijalankan pada waktu kompilasi. Setiap java_plugin yang ditentukan dalam atribut ini akan dijalankan setiap kali aturan ini dibuat. Library juga dapat mewarisi plugin dari dependensi yang menggunakan exported_plugins. Resource yang dihasilkan oleh plugin akan disertakan dalam jar yang dihasilkan dari aturan ini.
resource_strip_prefix

String; default-nya adalah ""

Awalan jalur yang akan dihapus dari resource Java.

Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam atribut resources. File resource yang tidak berada di direktori ini adalah error. Jika tidak ditentukan (default), jalur file resource ditentukan sesuai dengan logika yang sama dengan paket Java file sumber. Misalnya, file sumber di stuff/java/foo/bar/a.txt akan berada di foo/bar/a.txt.

runtime_deps

Daftar label; defaultnya adalah []

Library yang hanya tersedia untuk biner atau pengujian akhir saat runtime. Seperti deps biasa, ini akan muncul di classpath runtime, tetapi tidak seperti itu, tidak di classpath waktu kompilasi. Dependensi yang hanya diperlukan saat runtime harus dicantumkan di sini. Alat analisis dependensi harus mengabaikan target yang muncul di runtime_deps dan deps.
stamp

Bilangan bulat; defaultnya adalah -1

Apakah akan mengenkode informasi build ke dalam biner. Nilai yang mungkin:
  • stamp = 1: Selalu stempel informasi build ke dalam biner, bahkan dalam build --nostamp. Setelan ini harus dihindari, karena berpotensi menghentikan penyimpanan cache jarak jauh untuk biner dan tindakan hilir yang bergantung padanya.
  • stamp = 0: Selalu ganti informasi build dengan nilai konstanta. Hal ini memberikan penyiapan cache hasil build yang baik.
  • stamp = -1: Penyematan informasi build dikontrol oleh flag --[no]stamp.

Biner yang diberi stempel tidak dibangun ulang kecuali jika dependensinya berubah.

use_launcher

Boolean; defaultnya adalah True

Apakah biner harus menggunakan peluncur kustom.

Jika atribut ini disetel ke salah (false), atribut peluncur dan tanda --java_launcher terkait akan diabaikan untuk target ini.

use_testrunner

Boolean; defaultnya adalah False

Gunakan class runner pengujian (secara default com.google.testing.junit.runner.BazelTestRunner) sebagai titik entri utama untuk program Java, dan berikan class pengujian ke runner pengujian sebagai nilai properti sistem bazel.test_suite.
Anda dapat menggunakannya untuk mengganti perilaku default, yaitu menggunakan peluncur pengujian untuk aturan java_test, dan tidak menggunakannya untuk aturan java_binary. Anda kemungkinan tidak ingin melakukannya. Salah satu penggunaannya adalah untuk AllTest aturan yang dipanggil oleh aturan lain (misalnya, untuk menyiapkan database sebelum menjalankan pengujian). Aturan AllTest harus dideklarasikan sebagai java_binary, tetapi harus tetap menggunakan runner pengujian sebagai titik entri utamanya. Nama class test runner dapat diganti dengan atribut main_class.

java_import

Lihat sumber aturan
java_import(name, deps, data, add_exports, add_opens, compatible_with, constraints, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, package_metadata, proguard_specs, restricted_to, runtime_deps, srcjar, tags, target_compatible_with, testonly, toolchains, visibility)

Aturan ini memungkinkan penggunaan file .jar yang telah dikompilasi sebelumnya sebagai library untuk aturan java_library dan java_binary.

Contoh


    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",
        ],
    )

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

deps

Daftar label; defaultnya adalah []

Daftar library lain yang akan ditautkan ke target. Lihat java_library.deps.
data

Daftar label; defaultnya adalah []

Daftar file yang diperlukan oleh aturan ini saat runtime.
add_exports

Daftar string; defaultnya adalah []

Izinkan library ini mengakses module atau package yang diberikan.

Ini sesuai dengan flag --add-exports= javac dan JVM.

add_opens

Daftar string; defaultnya adalah []

Izinkan library ini untuk mengakses module atau package yang diberikan secara reflektif.

Ini sesuai dengan flag --add-opens= javac dan JVM.

constraints

Daftar string; defaultnya adalah []

Batasan tambahan yang diterapkan pada aturan ini sebagai library Java.
exports

Daftar label; defaultnya adalah []

Target yang akan tersedia bagi pengguna aturan ini. Lihat java_library.exports.
jars

Daftar label; wajib diisi

Daftar file JAR yang disediakan untuk target Java yang bergantung pada target ini.

Boolean; defaultnya adalah False

Gunakan library ini hanya untuk kompilasi dan bukan saat runtime. Berguna jika library akan disediakan oleh lingkungan runtime selama eksekusi. Contoh library seperti ini adalah IDE API untuk plugin IDE atau tools.jar untuk apa pun yang berjalan di JDK standar.
proguard_specs

Daftar label; defaultnya adalah []

File yang akan digunakan sebagai spesifikasi Proguard. Setelan ini akan menjelaskan kumpulan spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, target tersebut akan ditambahkan ke target android_binary mana pun yang bergantung pada library ini. File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarn, assumenosideeffects, dan aturan yang dimulai dengan -keep. Opsi lain hanya dapat muncul di proguard_specs android_binary, untuk memastikan penggabungan non-tautologis.
runtime_deps

Daftar label; defaultnya adalah []

Library yang hanya tersedia untuk biner atau pengujian akhir saat runtime. Lihat java_library.runtime_deps.
srcjar

Label; defaultnya adalah None

File JAR yang berisi kode sumber untuk file JAR yang dikompilasi.

java_library

Lihat sumber aturan
java_library(name, deps, srcs, data, resources, add_exports, add_opens, bootclasspath, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, exported_plugins, exports, features, javabuilder_jvm_flags, javacopts, licenses, neverlink, package_metadata, plugins, proguard_specs, resource_strip_prefix, restricted_to, runtime_deps, tags, target_compatible_with, testonly, toolchains, visibility)

Aturan ini mengompilasi dan menautkan sumber ke dalam file .jar.

Output implisit

  • libname.jar: Arsip Java yang berisi file class.
  • libname-src.jar: Arsip yang berisi sumber ("source jar").

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

deps

Daftar label; defaultnya adalah []

Daftar library yang akan ditautkan ke library ini. Lihat komentar umum tentang deps di Atribut umum yang ditentukan oleh sebagian besar aturan build.

JAR yang dibuat oleh aturan java_library yang tercantum di deps akan berada di jalur class waktu kompilasi aturan ini. Selain itu, penutupan transitif dari deps, runtime_deps, dan exports akan berada di classpath runtime.

Sebaliknya, target dalam atribut data disertakan dalam runfile, tetapi tidak ada di classpath waktu kompilasi maupun runtime.

srcs

Daftar label; defaultnya adalah []

Daftar file sumber yang diproses untuk membuat target. Atribut ini hampir selalu diperlukan; lihat pengecualian di bawah.

File sumber berjenis .java dikompilasi. Jika file .java yang dihasilkan, sebaiknya masukkan nama aturan pembuatan di sini, bukan nama file itu sendiri. Hal ini tidak hanya meningkatkan keterbacaan, tetapi juga membuat aturan lebih tangguh terhadap perubahan di masa mendatang: jika aturan pembuatan menghasilkan file yang berbeda di masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan pembuatan. Anda tidak boleh mencantumkan aturan pembuatan di deps karena tidak ada operasi.

File sumber berjenis .srcjar akan diekstrak dan dikompilasi. (Hal ini berguna jika Anda perlu membuat sekumpulan file .java dengan genrule.)

Aturan: jika aturan (biasanya genrule atau filegroup) menghasilkan file apa pun yang tercantum di atas, file tersebut akan digunakan dengan cara yang sama seperti yang dijelaskan untuk file sumber.

File sumber berjenis .properties diperlakukan sebagai resource.

Semua file lain akan diabaikan, asalkan ada setidaknya satu file dengan jenis file yang dijelaskan di atas. Jika tidak, error akan muncul.

Argumen ini hampir selalu diperlukan, kecuali jika Anda menentukan argumen runtime_deps.

data

Daftar label; defaultnya adalah []

Daftar file yang diperlukan oleh library ini saat runtime. Lihat komentar umum tentang data di Atribut umum yang ditentukan oleh sebagian besar aturan build.

Saat membangun java_library, Bazel tidak menempatkan file ini di mana pun; jika file data adalah file yang dihasilkan, Bazel akan membuatnya. Saat membangun pengujian yang bergantung pada java_library ini, Bazel akan menyalin atau menautkan file data ke area runfile.

resources

Daftar label; defaultnya adalah []

Daftar file data yang akan disertakan dalam jar Java.

Aset dapat berupa file sumber atau file yang dihasilkan.

Jika ditentukan, resource akan dibundel dalam JAR bersama dengan file .class biasa yang dihasilkan oleh kompilasi. Lokasi resource di dalam file jar ditentukan oleh struktur project. Bazel pertama-tama mencari tata letak direktori standar Maven, (direktori "src" yang diikuti dengan direktori "resources" cucu). Jika tidak ditemukan, Bazel akan mencari direktori teratas yang bernama "java" atau "javatests" (jadi, misalnya, jika resource berada di <workspace root>/x/java/y/java/z, jalur resource akan menjadi y/java/z. Heuristik ini tidak dapat diganti, namun, atribut resource_strip_prefix dapat digunakan untuk menentukan direktori alternatif tertentu untuk file resource.

add_exports

Daftar string; defaultnya adalah []

Izinkan library ini mengakses module atau package yang diberikan.

Ini sesuai dengan flag --add-exports= javac dan JVM.

add_opens

Daftar string; defaultnya adalah []

Izinkan library ini untuk mengakses module atau package yang diberikan secara reflektif.

Ini sesuai dengan flag --add-opens= javac dan JVM.

bootclasspath

Label; defaultnya adalah None

API terbatas, jangan gunakan!
exported_plugins

Daftar label; defaultnya adalah []

Daftar java_plugins (misalnya, pemroses anotasi) yang akan diekspor ke library yang bergantung langsung pada library ini.

Daftar java_plugin yang ditentukan akan diterapkan ke library apa pun yang bergantung langsung pada library ini, sama seperti jika library tersebut telah secara eksplisit mendeklarasikan label ini di plugins.

exports

Daftar label; defaultnya adalah []

Library yang diekspor.

Mencantumkan aturan di sini akan membuatnya tersedia untuk aturan induk, seolah-olah induk secara eksplisit bergantung pada aturan ini. Hal ini tidak berlaku untuk deps reguler (yang tidak diekspor).

Ringkasan: aturan X dapat mengakses kode di Y jika ada jalur dependensi di antara keduanya yang dimulai dengan tepi deps, diikuti dengan nol atau lebih tepi exports. Mari kita lihat beberapa contoh untuk mengilustrasikannya.

Asumsikan A bergantung pada B dan B bergantung pada C. Dalam hal ini C adalah dependensi transitif dari A, jadi mengubah sumber C dan membangun ulang A akan membangun ulang semuanya dengan benar. Namun, A tidak akan dapat menggunakan class di C. Untuk mengizinkan hal tersebut, A harus mendeklarasikan C di deps-nya, atau B dapat mempermudah A (dan apa pun yang mungkin bergantung pada A) dengan mendeklarasikan C di atribut exports (B).

Penutupan library yang diekspor tersedia untuk semua aturan induk langsung. Ambil contoh yang sedikit berbeda: A bergantung pada B, B bergantung pada C dan D, serta mengekspor C, tetapi tidak mengekspor D. Sekarang A memiliki akses ke C, tetapi tidak ke D. Sekarang, jika C dan D mengekspor beberapa pustaka, C' dan D' masing-masing, A hanya dapat mengakses C', tetapi tidak dapat mengakses D'.

Penting: aturan yang diekspor bukanlah dependensi reguler. Mengikuti contoh sebelumnya, jika B mengekspor C dan ingin menggunakan C juga, B harus mencantumkannya juga di deps-nya sendiri.

javabuilder_jvm_flags

Daftar string; defaultnya adalah []

API terbatas, jangan gunakan!
javacopts

Daftar string; defaultnya adalah []

Opsi compiler tambahan untuk library ini. Tunduk pada penggantian "Buat variabel" dan tokenisasi Bourne shell.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

Boolean; defaultnya adalah False

Apakah library ini hanya boleh digunakan untuk kompilasi dan tidak pada runtime. Berguna jika library akan disediakan oleh lingkungan runtime selama eksekusi. Contoh library tersebut adalah IDE API untuk plugin IDE atau tools.jar untuk apa pun yang berjalan di JDK standar.

Perhatikan bahwa neverlink = True tidak mencegah compiler menyisipkan materi dari library ini ke target kompilasi yang bergantung padanya, sebagaimana diizinkan oleh Spesifikasi Bahasa Java (misalnya, Konstanta static final dari String atau jenis primitif). Oleh karena itu, kasus penggunaan yang lebih disukai adalah saat library runtime identik dengan library kompilasi.

Jika library runtime berbeda dengan library kompilasi, Anda harus memastikan bahwa library tersebut hanya berbeda di tempat yang dilarang oleh JLS untuk di-inline oleh compiler (dan hal ini harus berlaku untuk semua versi JLS mendatang).

plugins

Daftar label; defaultnya adalah []

Plugin compiler Java untuk dijalankan pada waktu kompilasi. Setiap java_plugin yang ditentukan dalam atribut ini akan dijalankan setiap kali aturan ini dibuat. Library juga dapat mewarisi plugin dari dependensi yang menggunakan exported_plugins. Resource yang dihasilkan oleh plugin akan disertakan dalam jar yang dihasilkan dari aturan ini.
proguard_specs

Daftar label; defaultnya adalah []

File yang akan digunakan sebagai spesifikasi Proguard. Setelan ini akan menjelaskan kumpulan spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, target tersebut akan ditambahkan ke target android_binary mana pun yang bergantung pada library ini. File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarn, assumenosideeffects, dan aturan yang dimulai dengan -keep. Opsi lain hanya dapat muncul di proguard_specs android_binary, untuk memastikan penggabungan non-tautologis.
resource_strip_prefix

String; default-nya adalah ""

Awalan jalur yang akan dihapus dari resource Java.

Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam atribut resources. File resource yang tidak berada di direktori ini adalah error. Jika tidak ditentukan (default), jalur file resource ditentukan sesuai dengan logika yang sama dengan paket Java file sumber. Misalnya, file sumber di stuff/java/foo/bar/a.txt akan berada di foo/bar/a.txt.

runtime_deps

Daftar label; defaultnya adalah []

Library yang hanya tersedia untuk biner atau pengujian akhir saat runtime. Seperti deps biasa, ini akan muncul di classpath runtime, tetapi tidak seperti itu, tidak di classpath waktu kompilasi. Dependensi yang hanya diperlukan saat runtime harus dicantumkan di sini. Alat analisis dependensi harus mengabaikan target yang muncul di runtime_deps dan deps.

java_test

Lihat sumber aturan
java_test(name, deps, srcs, data, resources, add_exports, add_opens, args, bootclasspath, classpath_resources, compatible_with, create_executable, deploy_manifest_lines, deprecation, env, env_inherit, exec_compatible_with, exec_group_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, launcher, licenses, local, main_class, neverlink, package_metadata, 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)

Aturan java_test() mengompilasi pengujian Java. Pengujian adalah wrapper biner di sekitar kode pengujian Anda. Metode utama pelaksana pengujian dipanggil, bukan class utama yang dikompilasi.

Target output implisit

  • name.jar: Arsip Java.
  • name_deploy.jar: Arsip Java yang sesuai untuk deployment. (Hanya dibuat jika diminta secara eksplisit.) Lihat deskripsi output name_deploy.jar dari java_binary untuk mengetahui detail selengkapnya.

Lihat bagian tentang argumen java_binary(). Aturan ini juga mendukung semua atribut umum untuk semua aturan pengujian (*_test).

Contoh



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",
    ],
)

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

deps

Daftar label; defaultnya adalah []

Daftar library lain yang akan ditautkan ke target. Lihat komentar umum tentang deps di Atribut umum yang ditentukan oleh sebagian besar aturan build.
srcs

Daftar label; defaultnya adalah []

Daftar file sumber yang diproses untuk membuat target. Atribut ini hampir selalu diperlukan; lihat pengecualian di bawah.

File sumber berjenis .java dikompilasi. Jika file .java yang dihasilkan, sebaiknya masukkan nama aturan pembuatan di sini, bukan nama file itu sendiri. Hal ini tidak hanya meningkatkan keterbacaan, tetapi juga membuat aturan lebih tangguh terhadap perubahan di masa mendatang: jika aturan pembuatan menghasilkan file yang berbeda di masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan pembuatan. Anda tidak boleh mencantumkan aturan pembuatan di deps karena tidak ada operasi.

File sumber berjenis .srcjar akan diekstrak dan dikompilasi. (Hal ini berguna jika Anda perlu membuat sekumpulan file .java dengan genrule.)

Aturan: jika aturan (biasanya genrule atau filegroup) menghasilkan file apa pun yang tercantum di atas, file tersebut akan digunakan dengan cara yang sama seperti yang dijelaskan untuk file sumber.

Argumen ini hampir selalu diperlukan, kecuali jika atribut main_class menentukan class pada classpath runtime atau Anda menentukan argumen runtime_deps.

data

Daftar label; defaultnya adalah []

Daftar file yang diperlukan oleh library ini saat runtime. Lihat komentar umum tentang data di Atribut umum yang ditentukan oleh sebagian besar aturan build.
resources

Daftar label; defaultnya adalah []

Daftar file data yang akan disertakan dalam jar Java.

Aset dapat berupa file sumber atau file yang dihasilkan.

Jika ditentukan, resource akan dibundel dalam JAR bersama dengan file .class biasa yang dihasilkan oleh kompilasi. Lokasi resource di dalam file jar ditentukan oleh struktur project. Bazel pertama-tama mencari tata letak direktori standar Maven, (direktori "src" yang diikuti dengan direktori "resources" cucu). Jika tidak ditemukan, Bazel akan mencari direktori teratas yang bernama "java" atau "javatests" (jadi, misalnya, jika resource berada di <workspace root>/x/java/y/java/z, jalur resource akan menjadi y/java/z. Heuristik ini tidak dapat diganti, namun, atribut resource_strip_prefix dapat digunakan untuk menentukan direktori alternatif tertentu untuk file resource.

add_exports

Daftar string; defaultnya adalah []

Izinkan library ini mengakses module atau package yang diberikan.

Ini sesuai dengan flag --add-exports= javac dan JVM.

add_opens

Daftar string; defaultnya adalah []

Izinkan library ini untuk mengakses module atau package yang diberikan secara reflektif.

Ini sesuai dengan flag --add-opens= javac dan JVM.

bootclasspath

Label; defaultnya adalah None

API terbatas, jangan gunakan!
classpath_resources

Daftar label; defaultnya adalah []

JANGAN GUNAKAN OPSI INI KECUALI TIDAK ADA CARA LAIN)

Daftar resource yang harus berada di root pohon java. Satu-satunya tujuan atribut ini adalah untuk mendukung library pihak ketiga yang mengharuskan resource-nya ditemukan di classpath sebagai "myconfig.xml". Hal ini hanya diizinkan pada biner dan bukan library, karena bahaya konflik namespace.

create_executable

Boolean; defaultnya adalah True

Tidak digunakan lagi, gunakan java_single_jar sebagai gantinya.
deploy_manifest_lines

Daftar string; defaultnya adalah []

Daftar baris yang akan ditambahkan ke file META-INF/manifest.mf yang dihasilkan untuk target *_deploy.jar. Isi atribut ini tidak tunduk pada penggantian "Jadikan variabel".
javacopts

Daftar string; defaultnya adalah []

Opsi compiler tambahan untuk biner ini. Tunduk pada penggantian "Buat variabel" dan tokenisasi Bourne shell.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

jvm_flags

Daftar string; defaultnya adalah []

Daftar flag yang akan disematkan dalam skrip wrapper yang dibuat untuk menjalankan biner ini. Tunduk pada substitusi $(location) dan "Buat variabel", serta tokenisasi Bourne shell.

Skrip wrapper untuk biner Java mencakup definisi CLASSPATH (untuk menemukan semua jar dependen) dan memanggil interpreter Java yang tepat. Baris perintah yang dihasilkan oleh skrip wrapper mencakup nama class utama yang diikuti dengan "$@" sehingga Anda dapat meneruskan argumen lain setelah nama class. Namun, argumen yang ditujukan untuk parsing oleh JVM harus ditentukan sebelum nama class di command line. Konten jvm_flags ditambahkan ke skrip wrapper sebelum nama class dicantumkan.

Perhatikan bahwa atribut ini tidak berpengaruh pada output *_deploy.jar.

launcher

Label; defaultnya adalah None

Tentukan biner yang akan digunakan untuk menjalankan program Java Anda, bukan program bin/java normal yang disertakan dengan JDK. Target harus berupa cc_binary. cc_binary apa pun yang menerapkan Java Invocation API dapat ditentukan sebagai nilai untuk atribut ini.

Secara default, Bazel akan menggunakan peluncur JDK normal (bin/java atau java.exe).

Flag Bazel --java_launcher terkait hanya memengaruhi target java_binary dan java_test yang belum menentukan atribut launcher.

Perhatikan bahwa dependensi native (C++, SWIG, JNI) Anda akan dibangun secara berbeda, bergantung pada apakah Anda menggunakan peluncur JDK atau peluncur lain:

  • Jika Anda menggunakan peluncur JDK normal (default), dependensi native akan dibangun sebagai library bersama bernama {name}_nativedeps.so, dengan {name} adalah atribut name dari aturan java_binary ini. Kode yang tidak digunakan tidak dihapus oleh linker dalam konfigurasi ini.
  • Jika Anda menggunakan peluncur lain, dependensi native (C++) ditautkan secara statis ke dalam biner bernama {name}_nativedeps, dengan {name} adalah atribut name dari aturan java_binary ini. Dalam hal ini, linker akan menghapus kode apa pun yang dianggap tidak digunakan dari biner yang dihasilkan, yang berarti kode C++ apa pun yang diakses hanya melalui JNI mungkin tidak ditautkan kecuali target cc_library tersebut menentukan alwayslink = True.

Saat menggunakan peluncur selain peluncur JDK default, format output *_deploy.jar akan berubah. Lihat dokumentasi java_binary utama untuk mengetahui detailnya.

main_class

String; default-nya adalah ""

Nama class dengan metode main() yang akan digunakan sebagai titik entri. Jika menggunakan opsi ini, aturan tidak memerlukan daftar srcs=[...]. Dengan demikian, dengan atribut ini, Anda dapat membuat file yang dapat dieksekusi dari library Java yang sudah berisi satu atau beberapa metode main().

Nilai atribut ini adalah nama class, bukan file sumber. Class harus tersedia saat runtime: class dapat dikompilasi oleh aturan ini (dari srcs) atau disediakan oleh dependensi langsung atau transitif (melalui runtime_deps atau deps). Jika class tidak tersedia, biner akan gagal saat runtime; tidak ada pemeriksaan waktu build.

Boolean; defaultnya adalah False

plugins

Daftar label; defaultnya adalah []

Plugin compiler Java untuk dijalankan pada waktu kompilasi. Setiap java_plugin yang ditentukan dalam atribut ini akan dijalankan setiap kali aturan ini dibuat. Library juga dapat mewarisi plugin dari dependensi yang menggunakan exported_plugins. Resource yang dihasilkan oleh plugin akan disertakan dalam jar yang dihasilkan dari aturan ini.
resource_strip_prefix

String; default-nya adalah ""

Awalan jalur yang akan dihapus dari resource Java.

Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam atribut resources. File resource yang tidak berada di direktori ini adalah error. Jika tidak ditentukan (default), jalur file resource ditentukan sesuai dengan logika yang sama dengan paket Java file sumber. Misalnya, file sumber di stuff/java/foo/bar/a.txt akan berada di foo/bar/a.txt.

runtime_deps

Daftar label; defaultnya adalah []

Library yang hanya tersedia untuk biner atau pengujian akhir saat runtime. Seperti deps biasa, ini akan muncul di classpath runtime, tetapi tidak seperti itu, tidak di classpath waktu kompilasi. Dependensi yang hanya diperlukan saat runtime harus dicantumkan di sini. Alat analisis dependensi harus mengabaikan target yang muncul di runtime_deps dan deps.
stamp

Bilangan bulat; defaultnya adalah 0

Apakah akan mengenkode informasi build ke dalam biner. Nilai yang mungkin:
  • stamp = 1: Selalu stempel informasi build ke dalam biner, bahkan dalam build --nostamp. Setelan ini harus dihindari, karena berpotensi menghentikan penyimpanan cache jarak jauh untuk biner dan tindakan hilir yang bergantung padanya.
  • stamp = 0: Selalu ganti informasi build dengan nilai konstanta. Hal ini memberikan penyiapan cache hasil build yang baik.
  • stamp = -1: Penyematan informasi build dikontrol oleh flag --[no]stamp.

Biner yang diberi stempel tidak dibangun ulang kecuali jika dependensinya berubah.

test_class

String; default-nya adalah ""

Class Java yang akan dimuat oleh test runner.

Secara default, jika argumen ini tidak ditentukan, mode lama akan digunakan dan argumen pengujian akan digunakan sebagai gantinya. Tetapkan flag --nolegacy_bazel_java_test agar tidak melakukan penggantian ke argumen pertama.

Atribut ini menentukan nama class Java yang akan dijalankan oleh pengujian ini. Anda jarang perlu menyetelnya. Jika argumen ini tidak ada, argumen akan disimpulkan menggunakan name target dan jalur relatif root sumbernya. Jika pengujian berada di luar root sumber yang diketahui, Bazel akan melaporkan error jika test_class tidak ditetapkan.

Untuk JUnit3, class pengujian harus berupa subclass junit.framework.TestCase atau harus memiliki metode statis publik suite() yang menampilkan junit.framework.Test (atau subclass Test).

Atribut ini memungkinkan beberapa aturan java_test untuk berbagi Test yang sama (TestCase, TestSuite, ...). Biasanya, informasi tambahan diteruskan ke Test (misalnya melalui jvm_flags=['-Dkey=value']) sehingga perilakunya berbeda dalam setiap kasus, seperti menjalankan subset pengujian yang berbeda. Atribut ini juga memungkinkan penggunaan pengujian Java di luar hierarki javatests.

use_launcher

Boolean; defaultnya adalah True

Apakah biner harus menggunakan peluncur kustom.

Jika atribut ini disetel ke salah (false), atribut peluncur dan tanda --java_launcher terkait akan diabaikan untuk target ini.

use_testrunner

Boolean; defaultnya adalah True

Gunakan class runner pengujian (secara default com.google.testing.junit.runner.BazelTestRunner) sebagai titik entri utama untuk program Java, dan berikan class pengujian ke runner pengujian sebagai nilai properti sistem bazel.test_suite.
Anda dapat menggunakannya untuk mengganti perilaku default, yaitu menggunakan peluncur pengujian untuk aturan java_test, dan tidak menggunakannya untuk aturan java_binary. Anda kemungkinan tidak ingin melakukannya. Salah satu penggunaannya adalah untuk AllTest aturan yang dipanggil oleh aturan lain (misalnya, untuk menyiapkan database sebelum menjalankan pengujian). Aturan AllTest harus dideklarasikan sebagai java_binary, tetapi harus tetap menggunakan runner pengujian sebagai titik entri utamanya. Nama class test runner dapat diganti dengan atribut main_class.

java_package_configuration

Lihat sumber aturan
java_package_configuration(name, data, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, javacopts, output_licenses, package_metadata, packages, restricted_to, system, tags, target_compatible_with, testonly, toolchains, visibility)

Konfigurasi yang akan diterapkan ke sekumpulan paket. Konfigurasi dapat ditambahkan ke java_toolchain.javacopts.

Contoh:



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",
    ]
)


Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

data

Daftar label; defaultnya adalah []

Daftar file yang diperlukan oleh konfigurasi ini saat runtime.
javacopts

Daftar string; defaultnya adalah []

Flag compiler Java.
output_licenses

Daftar string; defaultnya adalah []

packages

Daftar label; defaultnya adalah []

Kumpulan package_group yang konfigurasinya harus diterapkan.
system

Label; defaultnya adalah None

Sesuai dengan flag --system javac.

java_plugin

Lihat sumber aturan
java_plugin(name, deps, srcs, data, resources, add_exports, add_opens, bootclasspath, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, generates_api, javabuilder_jvm_flags, javacopts, licenses, neverlink, output_licenses, package_metadata, plugins, processor_class, proguard_specs, resource_strip_prefix, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_plugin menentukan plugin untuk compiler Java yang dijalankan oleh Bazel. Jenis plugin yang didukung hanyalah pemroses anotasi. Aturan java_library atau java_binary dapat menjalankan plugin dengan bergantung pada plugin tersebut melalui atribut plugins. java_library juga dapat otomatis mengekspor plugin ke library yang bergantung langsung padanya menggunakan exported_plugins.

Target output implisit

  • libname.jar: Arsip Java.

Argumen adalah subset dari (dan dengan semantik yang identik dengan) argumen java_library(), kecuali penambahan argumen processor_class dan generates_api.

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

deps

Daftar label; defaultnya adalah []

Daftar library yang akan ditautkan ke library ini. Lihat komentar umum tentang deps di Atribut umum yang ditentukan oleh sebagian besar aturan build.

JAR yang dibuat oleh aturan java_library yang tercantum di deps akan berada di jalur class waktu kompilasi aturan ini. Selain itu, penutupan transitif dari deps, runtime_deps, dan exports akan berada di classpath runtime.

Sebaliknya, target dalam atribut data disertakan dalam runfile, tetapi tidak ada di classpath waktu kompilasi maupun runtime.

srcs

Daftar label; defaultnya adalah []

Daftar file sumber yang diproses untuk membuat target. Atribut ini hampir selalu diperlukan; lihat pengecualian di bawah.

File sumber berjenis .java dikompilasi. Jika file .java yang dihasilkan, sebaiknya masukkan nama aturan pembuatan di sini, bukan nama file itu sendiri. Hal ini tidak hanya meningkatkan keterbacaan, tetapi juga membuat aturan lebih tangguh terhadap perubahan di masa mendatang: jika aturan pembuatan menghasilkan file yang berbeda di masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan pembuatan. Anda tidak boleh mencantumkan aturan pembuatan di deps karena tidak ada operasi.

File sumber berjenis .srcjar akan diekstrak dan dikompilasi. (Hal ini berguna jika Anda perlu membuat sekumpulan file .java dengan genrule.)

Aturan: jika aturan (biasanya genrule atau filegroup) menghasilkan file apa pun yang tercantum di atas, file tersebut akan digunakan dengan cara yang sama seperti yang dijelaskan untuk file sumber.

File sumber berjenis .properties diperlakukan sebagai resource.

Semua file lain akan diabaikan, asalkan ada setidaknya satu file dengan jenis file yang dijelaskan di atas. Jika tidak, error akan muncul.

Argumen ini hampir selalu diperlukan, kecuali jika Anda menentukan argumen runtime_deps.

data

Daftar label; defaultnya adalah []

Daftar file yang diperlukan oleh library ini saat runtime. Lihat komentar umum tentang data di Atribut umum yang ditentukan oleh sebagian besar aturan build.

Saat membangun java_library, Bazel tidak menempatkan file ini di mana pun; jika file data adalah file yang dihasilkan, Bazel akan membuatnya. Saat membangun pengujian yang bergantung pada java_library ini, Bazel akan menyalin atau menautkan file data ke area runfile.

resources

Daftar label; defaultnya adalah []

Daftar file data yang akan disertakan dalam jar Java.

Aset dapat berupa file sumber atau file yang dihasilkan.

Jika ditentukan, resource akan dibundel dalam JAR bersama dengan file .class biasa yang dihasilkan oleh kompilasi. Lokasi resource di dalam file jar ditentukan oleh struktur project. Bazel pertama-tama mencari tata letak direktori standar Maven, (direktori "src" yang diikuti dengan direktori "resources" cucu). Jika tidak ditemukan, Bazel akan mencari direktori teratas yang bernama "java" atau "javatests" (jadi, misalnya, jika resource berada di <workspace root>/x/java/y/java/z, jalur resource akan menjadi y/java/z. Heuristik ini tidak dapat diganti, namun, atribut resource_strip_prefix dapat digunakan untuk menentukan direktori alternatif tertentu untuk file resource.

add_exports

Daftar string; defaultnya adalah []

Izinkan library ini mengakses module atau package yang diberikan.

Ini sesuai dengan flag --add-exports= javac dan JVM.

add_opens

Daftar string; defaultnya adalah []

Izinkan library ini untuk mengakses module atau package yang diberikan secara reflektif.

Ini sesuai dengan flag --add-opens= javac dan JVM.

bootclasspath

Label; defaultnya adalah None

API terbatas, jangan gunakan!
generates_api

Boolean; defaultnya adalah False

Atribut ini menandai pemroses anotasi yang menghasilkan kode API.

Jika aturan menggunakan pemroses anotasi yang menghasilkan API, aturan lain yang bergantung padanya hanya dapat merujuk ke kode yang dihasilkan jika tindakan kompilasinya dijadwalkan setelah aturan yang menghasilkan. Atribut ini menginstruksikan Bazel untuk memperkenalkan batasan penjadwalan saat --java_header_compilation diaktifkan.

PERINGATAN: Atribut ini memengaruhi performa build, gunakan hanya jika diperlukan.

javabuilder_jvm_flags

Daftar string; defaultnya adalah []

API terbatas, jangan gunakan!
javacopts

Daftar string; defaultnya adalah []

Opsi compiler tambahan untuk library ini. Tunduk pada penggantian "Buat variabel" dan tokenisasi Bourne shell.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

Boolean; defaultnya adalah False

Apakah library ini hanya boleh digunakan untuk kompilasi dan tidak pada runtime. Berguna jika library akan disediakan oleh lingkungan runtime selama eksekusi. Contoh library tersebut adalah IDE API untuk plugin IDE atau tools.jar untuk apa pun yang berjalan di JDK standar.

Perhatikan bahwa neverlink = True tidak mencegah compiler menyisipkan materi dari library ini ke target kompilasi yang bergantung padanya, sebagaimana diizinkan oleh Spesifikasi Bahasa Java (misalnya, Konstanta static final dari String atau jenis primitif). Oleh karena itu, kasus penggunaan yang lebih disukai adalah saat library runtime identik dengan library kompilasi.

Jika library runtime berbeda dengan library kompilasi, Anda harus memastikan bahwa library tersebut hanya berbeda di tempat yang dilarang oleh JLS untuk di-inline oleh compiler (dan hal ini harus berlaku untuk semua versi JLS mendatang).

output_licenses

Daftar string; defaultnya adalah []

plugins

Daftar label; defaultnya adalah []

Plugin compiler Java untuk dijalankan pada waktu kompilasi. Setiap java_plugin yang ditentukan dalam atribut ini akan dijalankan setiap kali aturan ini dibuat. Library juga dapat mewarisi plugin dari dependensi yang menggunakan exported_plugins. Resource yang dihasilkan oleh plugin akan disertakan dalam jar yang dihasilkan dari aturan ini.
processor_class

String; default-nya adalah ""

Class pemroses adalah jenis class yang sepenuhnya memenuhi syarat yang harus digunakan oleh kompiler Java sebagai titik entri ke pemroses anotasi. Jika tidak ditentukan, aturan ini tidak akan memberikan pemroses anotasi ke pemrosesan anotasi kompiler Java, tetapi classpath runtimenya akan tetap disertakan di jalur pemroses anotasi kompiler. (Tindakan ini terutama ditujukan untuk digunakan oleh plugin Error Prone, yang dimuat dari jalur pemroses anotasi menggunakan java.util.ServiceLoader.)
proguard_specs

Daftar label; defaultnya adalah []

File yang akan digunakan sebagai spesifikasi Proguard. Setelan ini akan menjelaskan kumpulan spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, target tersebut akan ditambahkan ke target android_binary mana pun yang bergantung pada library ini. File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarn, assumenosideeffects, dan aturan yang dimulai dengan -keep. Opsi lain hanya dapat muncul di proguard_specs android_binary, untuk memastikan penggabungan non-tautologis.
resource_strip_prefix

String; default-nya adalah ""

Awalan jalur yang akan dihapus dari resource Java.

Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam atribut resources. File resource yang tidak berada di direktori ini adalah error. Jika tidak ditentukan (default), jalur file resource ditentukan sesuai dengan logika yang sama dengan paket Java file sumber. Misalnya, file sumber di stuff/java/foo/bar/a.txt akan berada di foo/bar/a.txt.

java_runtime

Lihat sumber aturan
java_runtime(name, srcs, compatible_with, default_cds, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, hermetic_srcs, hermetic_static_libs, java, java_home, lib_ct_sym, lib_modules, output_licenses, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, version, visibility)

Menentukan konfigurasi untuk runtime Java.

Contoh:



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


Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

srcs

Daftar label; defaultnya adalah []

Semua file dalam runtime.
default_cds

Label; defaultnya adalah None

Arsip CDS default untuk java_runtime hermetik. Jika hermetik diaktifkan untuk target java_binary, CDS default java_runtime akan dikemas dalam JAR deployment hermetik.
hermetic_srcs

Daftar label; defaultnya adalah []

File di runtime yang diperlukan untuk deployment hermetik.
hermetic_static_libs

Daftar label; defaultnya adalah []

Library yang ditautkan secara statis dengan peluncur untuk deployment hermetik
java

Label; defaultnya adalah None

Jalur ke file java yang dapat dieksekusi.
java_home

String; default-nya adalah ""

Jalur ke root runtime. Tunduk pada penggantian variabel "Make". Jika jalur ini bersifat absolut, aturan menunjukkan runtime Java non-hermetik dengan jalur yang sudah dikenal. Dalam hal ini, atribut srcs dan java harus kosong.
lib_ct_sym

Label; defaultnya adalah None

File lib/ct.sym yang diperlukan untuk kompilasi dengan --release. Jika tidak ditentukan dan ada tepat satu file di srcs yang jalur file-nya berakhiran dengan /lib/ct.sym, file tersebut akan digunakan.
lib_modules

Label; defaultnya adalah None

File lib/modules yang diperlukan untuk deployment hermetik.
output_licenses

Daftar string; defaultnya adalah []

version

Bilangan bulat; defaultnya adalah 0

Versi fitur runtime Java. Yaitu, bilangan bulat yang ditampilkan oleh Runtime.version().feature().

java_single_jar

Lihat sumber aturan
java_single_jar(name, deps, compatible_with, compress, deploy_env, deploy_manifest_lines, deprecation, exclude_build_data, exec_compatible_with, exec_group_compatible_with, exec_properties, features, multi_release, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Mengumpulkan dependensi Java dan file jar ke dalam satu jar `java_single_jar` mengumpulkan dependensi Java dan file jar ke dalam satu jar. Ini mirip dengan java_binary dengan semua yang terkait dengan file yang dapat dieksekusi dinonaktifkan, dan memberikan alternatif untuk "hack jar deployment" java_binary. ## Contoh ```skylark load("//tools/build_defs/java_single_jar:java_single_jar.bzl", "java_single_jar") java_single_jar( name = "my_single_jar", deps = [ "//java/com/google/foo", "//java/com/google/bar", ], ) ``` Output: {name}.jar: Satu JAR yang berisi semua input.

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

deps

Daftar label; defaultnya adalah []

Target Java (termasuk java_import dan java_library) untuk mengumpulkan dependensi transitif dari. Dependensi runtime dikumpulkan melalui deps, exports, dan runtime_deps. Resource juga dikumpulkan. Dependensi cc_library atau java_wrap_cc native tidak.
compress

String; default-nya adalah "preserve"

Apakah akan selalu melakukan deflasi ("yes"), selalu menyimpan ("no"), atau meneruskan tanpa diubah ("preserve"). Defaultnya adalah "pertahankan", dan merupakan opsi yang paling efisien -- tidak ada pekerjaan tambahan yang dilakukan untuk memperbesar atau memperkecil.
deploy_env

Daftar label; defaultnya adalah []

Daftar target `java_binary` atau `java_single_jar` yang merepresentasikan lingkungan deployment untuk biner ini. Tetapkan atribut ini saat membangun plugin yang akan dimuat oleh `java_binary` lain. Dependensi `deploy_env` dikecualikan dari jar yang dibangun oleh aturan ini.
deploy_manifest_lines

Daftar string; defaultnya adalah []

Daftar baris yang akan ditambahkan ke file META-INF/manifest.mf.
exclude_build_data

Boolean; defaultnya adalah True

Apakah akan menghapus file build-data.properties yang dibuat secara default.
multi_release

Boolean; defaultnya adalah True

Apakah akan mengaktifkan JAR output Multi-Release atau tidak.

java_toolchain

Lihat sumber aturan
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, exec_compatible_with, exec_group_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, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, package_metadata, 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)

Menentukan konfigurasi untuk compiler Java. Toolchain yang akan digunakan dapat diubah melalui argumen --java_toolchain. Biasanya Anda tidak boleh menulis aturan semacam itu kecuali jika Anda ingin menyesuaikan compiler Java.

Contoh

Contoh sederhananya adalah:



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",
)

Argumen

Atribut
name

Nama; wajib

Nama unik untuk target ini.

android_lint_data

Daftar label; defaultnya adalah []

Label alat yang tersedia untuk perluasan label di android_lint_jvm_opts.
android_lint_jvm_opts

Daftar string; defaultnya adalah []

Daftar argumen untuk JVM saat memanggil Android Lint.
android_lint_opts

Daftar string; defaultnya adalah []

Daftar argumen Android Lint.
android_lint_package_configuration

Daftar label; defaultnya adalah []

Konfigurasi Android Lint yang harus diterapkan ke grup paket yang ditentukan.
android_lint_runner

Label; defaultnya adalah None

Label pelaksana Android Lint, jika ada.
bootclasspath

Daftar label; defaultnya adalah []

Entri bootclasspath target Java. Sesuai dengan flag -bootclasspath javac.
compatible_javacopts

null; default-nya adalah {}

API internal, jangan digunakan.
deps_checker

Label; defaultnya adalah None

Label jar deployment ImportDepsChecker.
forcibly_disable_header_compilation

Boolean; defaultnya adalah False

Menggantikan --java_header_compilation untuk menonaktifkan kompilasi header di platform yang tidak mendukungnya, misalnya Bazel JDK 7.
genclass

Label; defaultnya adalah None

Label file jar deployment GenClass.
header_compiler

Label; defaultnya adalah None

Label compiler header. Wajib jika --java_header_compilation diaktifkan.
header_compiler_builtin_processors

Daftar string; defaultnya adalah []

API internal, jangan digunakan.
header_compiler_direct

Label; defaultnya adalah None

Label opsional dari compiler header yang akan digunakan untuk tindakan classpath langsung yang tidak menyertakan pemroses anotasi yang menghasilkan API.

Alat ini tidak mendukung pemrosesan anotasi.

ijar

Label; defaultnya adalah None

Label file yang dapat dieksekusi ijar.
jacocorunner

Label; defaultnya adalah None

Label jar deployment JacocoCoverageRunner.
java_runtime

Label; defaultnya adalah None

java_runtime yang akan digunakan dengan toolchain ini. Defaultnya adalah java_runtime dalam konfigurasi eksekusi.
javabuilder

Label; defaultnya adalah None

Label jar deployment JavaBuilder.
javabuilder_data

Daftar label; defaultnya adalah []

Label data yang tersedia untuk perluasan label di javabuilder_jvm_opts.
javabuilder_jvm_opts

Daftar string; defaultnya adalah []

Daftar argumen untuk JVM saat memanggil JavaBuilder.
javac_supports_multiplex_workers

Boolean; defaultnya adalah True

Benar jika JavaBuilder mendukung berjalan sebagai pekerja persisten multiplex, salah jika tidak.
javac_supports_worker_cancellation

Boolean; defaultnya adalah True

Benar jika JavaBuilder mendukung pembatalan pekerja persisten, salah jika tidak.
javac_supports_worker_multiplex_sandboxing

Boolean; defaultnya adalah False

Benar jika JavaBuilder mendukung berjalan sebagai pekerja persisten multiplex dengan sandboxing, salah jika tidak.
javac_supports_workers

Boolean; defaultnya adalah True

Benar jika JavaBuilder mendukung berjalan sebagai pekerja persisten, salah jika tidak.
javacopts

Daftar string; defaultnya adalah []

Daftar argumen tambahan untuk compiler Java. Lihat dokumentasi Java Compiler untuk mengetahui daftar lengkap kemungkinan tanda Java Compiler.
jspecify_implicit_deps

Label; defaultnya adalah None

Eksperimental, jangan gunakan.
jspecify_javacopts

Daftar string; defaultnya adalah []

Eksperimental, jangan gunakan.
jspecify_packages

Daftar label; defaultnya adalah []

Eksperimental, jangan gunakan.
jspecify_processor

Label; defaultnya adalah None

Eksperimental, jangan gunakan.
jspecify_processor_class

String; default-nya adalah ""

Eksperimental, jangan gunakan.
jspecify_stubs

Daftar label; defaultnya adalah []

Eksperimental, jangan gunakan.
jvm_opts

Daftar string; defaultnya adalah []

Daftar argumen untuk JVM saat memanggil compiler Java. Lihat dokumentasi virtual machine Java untuk mengetahui daftar lengkap kemungkinan tanda untuk opsi ini.
misc

Daftar string; defaultnya adalah []

Tidak digunakan lagi: gunakan javacopts sebagai gantinya
oneversion

Label; defaultnya adalah None

Label biner penegakan satu versi.
oneversion_allowlist

Label; defaultnya adalah None

Label daftar yang diizinkan satu versi.
oneversion_allowlist_for_tests

Label; defaultnya adalah None

Label daftar yang diizinkan satu versi untuk pengujian.
oneversion_whitelist

Label; defaultnya adalah None

Tidak digunakan lagi: gunakan oneversion_allowlist sebagai gantinya
package_configuration

Daftar label; defaultnya adalah []

Konfigurasi yang harus diterapkan ke grup paket yang ditentukan.
proguard_allowlister

Label; defaultnya adalah "@bazel_tools//tools/jdk:proguard_whitelister"

Label daftar yang diizinkan Proguard.
reduced_classpath_incompatible_processors

Daftar string; defaultnya adalah []

API internal, jangan digunakan.
singlejar

Label; defaultnya adalah None

Label jar deployment SingleJar.
source_version

String; default-nya adalah ""

Versi sumber Java (misalnya, '6' atau '7'). Menentukan kumpulan struktur kode mana yang diizinkan dalam kode sumber Java.
target_version

String; default-nya adalah ""

Versi target Java (misalnya, '6' atau '7'). Menentukan runtime Java yang digunakan untuk membangun class.
timezone_data

Label; defaultnya adalah None

Label jar resource yang berisi data zona waktu. Jika disetel, data zona waktu akan ditambahkan sebagai dependensi runtime implisit dari semua aturan java_binary.
tools

Daftar label; defaultnya adalah []

Label alat yang tersedia untuk perluasan label di jvm_opts.
turbine_data

Daftar label; defaultnya adalah []

Label data yang tersedia untuk perluasan label di turbine_jvm_opts.
turbine_jvm_opts

Daftar string; defaultnya adalah []

Daftar argumen untuk JVM saat memanggil turbine.
xlint

Daftar string; defaultnya adalah []

Daftar peringatan yang akan ditambahkan atau dihapus dari daftar default. Awali dengan tanda hubung untuk menghapusnya. Lihat dokumentasi Javac tentang opsi -Xlint untuk mengetahui informasi selengkapnya.