Aturan Java

Laporkan masalah Lihat sumber

Aturan

java_biner

Lihat sumber aturan
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)

Membuat arsip Java ("file jar"), plus 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 tempat biner bergantung.

Skrip wrapper menerima beberapa flag unik. Lihat //src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt untuk mengetahui daftar flag yang dapat dikonfigurasi dan variabel lingkungan yang diterima oleh wrapper.

Target output implisit

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

    Membuat target <name>_deploy.jar untuk aturan Anda akan membuat file jar mandiri dengan manifes yang memungkinkannya dijalankan dengan perintah java -jar atau dengan opsi --singlejar skrip wrapper. Skrip skrip lebih disukai 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. Class ini juga berisi library native yang diperlukan untuk dependensi. Keduanya secara otomatis dimuat ke JVM saat runtime.

    Jika target Anda menentukan atribut launcher, maka file _deploy.jar akan berupa biner native, bukan file JAR normal. Ini akan berisi peluncur ditambah dependensi native (C++) dari aturan Anda, semua yang ditautkan ke biner statis. Byte file jar yang sebenarnya akan ditambahkan ke biner native tersebut, dengan membuat blob biner tunggal yang berisi kode Java dan file yang dapat dieksekusi. Anda dapat menjalankan file jar yang dihasilkan secara langsung seperti halnya mengeksekusi biner native.

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

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
)

Sebagai gantinya, lakukan hal berikut:

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

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.


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

List of labels; optional

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

List of labels; optional

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

File sumber jenis .java dikompilasi. Dalam kasus file .java yang dihasilkan, sebaiknya tempatkan nama aturan yang dihasilkan di sini, bukan nama file itu sendiri. Hal ini tidak hanya meningkatkan keterbacaan, tetapi juga membuat aturan lebih tahan terhadap perubahan di masa mendatang: jika aturan yang menghasilkan menghasilkan file yang berbeda di masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan yang menghasilkan. Anda tidak boleh mencantumkan aturan yang menghasilkan di deps karena ini adalah tanpa pengoperasian.

File sumber jenis .srcjar akan diekstrak dan dikompilasi. (Ini berguna jika Anda perlu membuat kumpulan file .java dengan genrule.)

Aturan: jika aturan (biasanya genrule atau filegroup) menghasilkan salah satu file yang tercantum di atas, aturan 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.

resources

List of labels; optional

Daftar file data yang akan disertakan dalam jar Java.

Jika ditentukan, resource tersebut akan dipaketkan dalam jar bersama dengan file .class biasa yang dihasilkan oleh kompilasi. Lokasi resource di dalam file jar ditentukan oleh struktur project. Bazel terlebih dahulu mencari tata letak direktori standar Maven, (direktori "src" diikuti dengan cucu direktori "resource"). 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, tetapi atribut resource_strip_prefix dapat digunakan untuk menentukan direktori alternatif khusus untuk file resource.

Resource dapat berupa file sumber atau file yang dihasilkan.

classpath_resources

List of labels; optional

JANGAN GUNAKAN OPSI INI KECUALI JIKA TIDAK ADA CARA LAIN)

Daftar resource yang harus ditempatkan di root hierarki java. Satu-satunya tujuan atribut ini adalah untuk mendukung library pihak ketiga yang mengharuskan resource mereka ditemukan di classpath sebagai tepat "myconfig.xml". Kebijakan ini hanya diizinkan pada biner, bukan library, karena adanya konflik konflik namespace.

create_executable

Boolean; optional; nonconfigurable; default is True

Apakah biner dapat dieksekusi. Biner yang tidak dapat dieksekusi mengumpulkan dependensi Java runtime transitif ke dalam jar deployment, tetapi tidak dapat dijalankan secara langsung. Tidak ada skrip wrapper yang dibuat jika atribut ini ditetapkan. Ini adalah error untuk menetapkan ini ke 0 jika atribut launcher atau main_class ditetapkan.
deploy_env

List of labels; optional

Daftar target java_binary lainnya yang mewakili lingkungan deployment untuk biner ini. Tetapkan atribut ini saat membuat plugin yang akan dimuat oleh java_binary lain.
Setelan 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

List of strings; optional

Daftar baris yang akan ditambahkan ke file META-INF/manifest.mf yang dibuat untuk target *_deploy.jar. Konten atribut ini tidak tunduk pada substitusi "Make variabel".
javacopts

List of strings; optional

Opsi compiler tambahan untuk library ini. Tunduk pada substitusi "Make variabel" dan tokenisasi shell Shell.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

jvm_flags

List of strings; optional

Daftar flag untuk disematkan dalam skrip wrapper yang dihasilkan untuk menjalankan biner ini. Tunduk pada substitusi $(location) dan "Makevariable", dan Bourne shell tokenization.

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

Perlu diketahui bahwa atribut ini tidak berpengaruh pada output *_deploy.jar.

launcher

Label; optional

Tentukan biner yang akan digunakan untuk menjalankan program Java, bukan program bin/java normal yang disertakan dengan JDK. Targetnya harus berupa cc_binary. Setiap cc_binary 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) akan dibuat secara berbeda, bergantung pada apakah Anda menggunakan peluncur JDK atau peluncur lainnya:

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

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

main_class

String; optional

Nama class dengan metode main() untuk digunakan sebagai titik entri. Jika aturan menggunakan opsi ini, daftar srcs=[...] tidak diperlukan. 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 pada 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.

plugins

List of labels; optional

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 aturan yang dihasilkan.
resource_jars

List of labels; optional

Tidak digunakan lagi: Sebagai gantinya, gunakan java_import dan dependensi atau runtime_deps.
resource_strip_prefix

String; optional

Awalan jalur untuk menghapus resource dari resource Java.

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

runtime_deps

List of labels; optional

Library untuk disediakan ke biner akhir atau pengujian hanya pada runtime. Seperti deps biasa, ini akan muncul di classpath runtime, tetapi tidak seperti itu, bukan 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

Integer; optional; default is -1

Apakah mengenkode informasi build ke dalam biner. Nilai yang memungkinkan:
  • stamp = 1: Selalu cap informasi informasi ke biner, bahkan dalam build --nostamp. Setelan ini harus dihindari, karena berpotensi menghentikan caching jarak jauh untuk biner dan tindakan downstream yang bergantung padanya.
  • stamp = 0: Selalu mengganti informasi build dengan nilai konstanta. Ini memberikan penyimpanan hasil build yang baik ke dalam cache.
  • stamp = -1: Penyematan informasi build dikontrol oleh tanda --[no]stamp.

Biner yang distempel tidak dibuat ulang kecuali jika dependensinya berubah.

use_launcher

Boolean; optional; default is True

Apakah biner harus menggunakan peluncur kustom.

Jika atribut ini ditetapkan ke false, atribut peluncur dan flag --java_launcher terkait akan diabaikan untuk target ini.

use_testrunner

Boolean; optional; default is False

Gunakan class runner pengujian (secara default com.google.testing.junit.runner.BazelTestRunner) sebagai titik entri utama untuk program Java, dan berikan class pengujian kepada runner pengujian sebagai nilai properti sistem bazel.test_suite. Anda dapat menggunakan ini untuk mengganti perilaku default, yaitu menggunakan runner pengujian untuk aturan java_test, dan tidak menggunakannya untuk aturan java_binary. kecil kemungkinan Anda ingin melakukannya. Salah satu penggunaannya adalah untuk aturan AllTest yang dipanggil oleh aturan lain (misalnya, untuk menyiapkan database sebelum menjalankan pengujian). Aturan AllTest harus dideklarasikan sebagai java_binary, tetapi tetap harus 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, compatible_with, constraints, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, proguard_specs, restricted_to, runtime_deps, srcjar, tags, target_compatible_with, testonly, visibility)

Aturan ini mengizinkan 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

Name; required

Nama unik untuk target ini.

deps

List of labels; optional

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

List of strings; optional; nonconfigurable

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

List of labels; optional

Target untuk tersedia bagi pengguna aturan ini. Lihat java_library.exports.
jars

List of labels; required

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

Boolean; optional; default is False

Hanya gunakan library ini 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

List of labels; optional

File yang akan digunakan sebagai spesifikasi Proguard. Hal ini akan menjelaskan kumpulan spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, nilai tersebut akan ditambahkan ke target android_binary mana pun, bergantung pada library ini. File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarn, asumsinosideef, dan aturan yang diawali dengan -keep. Opsi lainnya hanya dapat muncul dalam proguard_spec android_binary, untuk memastikan penggabungan non-tekologis.
runtime_deps

List of labels; optional

Library untuk disediakan ke biner akhir atau pengujian hanya pada runtime. Lihat java_library.runtime_deps.
srcjar

Label; optional

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

library_java

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

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

Target output implisit

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

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

deps

List of labels; optional

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 dalam deps akan berada di classpath waktu kompilasi aturan ini. Selanjutnya, penutupan transitif deps, runtime_deps, dan exports akan berada di classpath runtime.

Sebaliknya, target dalam atribut data disertakan dalam runfile, tetapi tidak pada classpath waktu kompilasi atau classpath runtime.

srcs

List of labels; optional

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

File sumber jenis .java dikompilasi. Dalam kasus file .java yang dihasilkan, sebaiknya tempatkan nama aturan yang dihasilkan di sini, bukan nama file itu sendiri. Hal ini tidak hanya meningkatkan keterbacaan, tetapi juga membuat aturan lebih tahan terhadap perubahan di masa mendatang: jika aturan yang menghasilkan menghasilkan file yang berbeda di masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan yang menghasilkan. Anda tidak boleh mencantumkan aturan yang menghasilkan di deps karena ini adalah tanpa pengoperasian.

File sumber jenis .srcjar akan diekstrak dan dikompilasi. (Ini berguna jika Anda perlu membuat kumpulan file .java dengan genrule.)

Aturan: jika aturan (biasanya genrule atau filegroup) menghasilkan salah satu file yang tercantum di atas, aturan 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

List of labels; optional

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 mem-build java_library, Bazel tidak akan menempatkan file ini di mana pun; jika file data adalah file yang dibuat, Bazel akan menghasilkannya. Saat membuat pengujian yang bergantung pada java_library Bazel ini akan menyalin atau menautkan file data ke area runfiles.

resources

List of labels; optional

Daftar file data yang akan disertakan dalam jar Java.

Jika ditentukan, resource tersebut akan dipaketkan dalam jar bersama dengan file .class biasa yang dihasilkan oleh kompilasi. Lokasi resource di dalam file jar ditentukan oleh struktur project. Bazel terlebih dahulu mencari tata letak direktori standar Maven, (direktori "src" diikuti dengan cucu direktori "resource"). 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, tetapi atribut resource_strip_prefix dapat digunakan untuk menentukan direktori alternatif khusus untuk file resource.

Resource dapat berupa file sumber atau file yang dihasilkan.

exported_plugins

List of labels; optional

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

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

exports

List of labels; optional

Library yang diekspor.

Aturan listingan di sini akan membuat aturan tersebut tersedia untuk aturan induk, seolah-olah induk tersebut 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 beberapa tepi exports. Mari kita lihat beberapa contoh untuk menggambarkan hal ini.

Asumsikan A bergantung pada B dan B bergantung pada C. Dalam hal ini, C adalah dependensi transitif A, jadi mengubah sumber C dan mem-build ulang A akan mem-build ulang semuanya dengan benar. Namun, A tidak akan dapat menggunakan class di C. Untuk memungkinkannya, A harus mendeklarasikan C dalam deps-nya, atau B dapat mempermudah A (dan apa pun yang mungkin bergantung pada A) dengan mendeklarasikan C dalam 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, dan juga mengekspor C tetapi tidak D. Sekarang A memiliki akses ke C, tetapi tidak ke D. Sekarang, jika C dan D mengekspor beberapa library, C' dan D', masing-masing hanya dapat mengakses C', tetapi tidak D'.

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

javacopts

List of strings; optional

Opsi compiler tambahan untuk library ini. Tunduk pada substitusi "Make variabel" dan tokenisasi shell Shell.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

Boolean; optional; default is False

Apakah library ini hanya boleh digunakan untuk kompilasi dan bukan saat 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 = 1 tidak mencegah compiler menyisipkan materi dari library ini ke dalam target kompilasi yang bergantung padanya, seperti yang diizinkan oleh Spesifikasi Bahasa Java (misalnya, konstanta static final dari String atau jenis primitif). Oleh karena itu, kasus penggunaan yang diinginkan adalah jika 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 compiler JLS untuk inline (dan yang harus disimpan untuk semua versi JLS mendatang).

plugins

List of labels; optional

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 aturan yang dihasilkan.
proguard_specs

List of labels; optional

File yang akan digunakan sebagai spesifikasi Proguard. Hal ini akan menjelaskan kumpulan spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, nilai tersebut akan ditambahkan ke target android_binary mana pun, bergantung pada library ini. File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarn, asumsinosideef, dan aturan yang diawali dengan -keep. Opsi lainnya hanya dapat muncul dalam proguard_spec android_binary, untuk memastikan penggabungan non-tekologis.
resource_jars

List of labels; optional

Tidak digunakan lagi: Sebagai gantinya, gunakan java_import dan dependensi atau runtime_deps.
resource_strip_prefix

String; optional

Awalan jalur untuk menghapus resource dari resource Java.

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

runtime_deps

List of labels; optional

Library untuk disediakan ke biner akhir atau pengujian hanya pada runtime. Seperti deps biasa, ini akan muncul di classpath runtime, tetapi tidak seperti itu, bukan 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_lite_proto_library

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

java_lite_proto_library menghasilkan kode Java dari .proto file.

deps harus mengarah ke aturan proto_library .

Contoh:

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

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

proto_library(
    name = "bar",
)

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

deps

List of labels; optional

Daftar aturan proto_library untuk menghasilkan kode Java.

library_java_proto

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

java_proto_library menghasilkan kode Java dari .proto file.

deps harus mengarah ke aturan proto_library .

Contoh:

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

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

proto_library(
    name = "foo_proto",
)

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

deps

List of labels; optional

Daftar aturan proto_library untuk menghasilkan kode Java.

pengujian_java

Lihat sumber aturan
java_test(name, deps, srcs, data, resources, args, classpath_resources, compatible_with, create_executable, deploy_manifest_lines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, launcher, licenses, local, main_class, plugins, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, use_testrunner, visibility)

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

Target output implisit

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

Lihat bagian argumen java_binary(). Aturan ini juga mendukung semua atribut yang sama 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

Name; required

Nama unik untuk target ini.

deps

List of labels; optional

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

List of labels; optional

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

File sumber jenis .java dikompilasi. Dalam kasus file .java yang dihasilkan, sebaiknya tempatkan nama aturan yang dihasilkan di sini, bukan nama file itu sendiri. Hal ini tidak hanya meningkatkan keterbacaan, tetapi juga membuat aturan lebih tahan terhadap perubahan di masa mendatang: jika aturan yang menghasilkan menghasilkan file yang berbeda di masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan yang menghasilkan. Anda tidak boleh mencantumkan aturan yang menghasilkan di deps karena ini adalah tanpa pengoperasian.

File sumber jenis .srcjar akan diekstrak dan dikompilasi. (Ini berguna jika Anda perlu membuat kumpulan file .java dengan genrule.)

Aturan: jika aturan (biasanya genrule atau filegroup) menghasilkan salah satu file yang tercantum di atas, aturan 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.

resources

List of labels; optional

Daftar file data yang akan disertakan dalam jar Java.

Jika ditentukan, resource tersebut akan dipaketkan dalam jar bersama dengan file .class biasa yang dihasilkan oleh kompilasi. Lokasi resource di dalam file jar ditentukan oleh struktur project. Bazel terlebih dahulu mencari tata letak direktori standar Maven, (direktori "src" diikuti dengan cucu direktori "resource"). 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, tetapi atribut resource_strip_prefix dapat digunakan untuk menentukan direktori alternatif khusus untuk file resource.

Resource dapat berupa file sumber atau file yang dihasilkan.

classpath_resources

List of labels; optional

JANGAN GUNAKAN OPSI INI KECUALI JIKA TIDAK ADA CARA LAIN)

Daftar resource yang harus ditempatkan di root hierarki java. Satu-satunya tujuan atribut ini adalah untuk mendukung library pihak ketiga yang mengharuskan resource mereka ditemukan di classpath sebagai tepat "myconfig.xml". Kebijakan ini hanya diizinkan pada biner, bukan library, karena adanya konflik konflik namespace.

create_executable

Boolean; optional; nonconfigurable; default is True

Apakah biner dapat dieksekusi. Biner yang tidak dapat dieksekusi mengumpulkan dependensi Java runtime transitif ke dalam jar deployment, tetapi tidak dapat dijalankan secara langsung. Tidak ada skrip wrapper yang dibuat jika atribut ini ditetapkan. Ini adalah error untuk menetapkan ini ke 0 jika atribut launcher atau main_class ditetapkan.
deploy_manifest_lines

List of strings; optional

Daftar baris yang akan ditambahkan ke file META-INF/manifest.mf yang dibuat untuk target *_deploy.jar. Konten atribut ini tidak tunduk pada substitusi "Make variabel".
javacopts

List of strings; optional

Opsi compiler tambahan untuk library ini. Tunduk pada substitusi "Make variabel" dan tokenisasi shell Shell.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

jvm_flags

List of strings; optional

Daftar flag untuk disematkan dalam skrip wrapper yang dihasilkan untuk menjalankan biner ini. Tunduk pada substitusi $(location) dan "Makevariable", dan Bourne shell tokenization.

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

Perlu diketahui bahwa atribut ini tidak berpengaruh pada output *_deploy.jar.

launcher

Label; optional

Tentukan biner yang akan digunakan untuk menjalankan program Java, bukan program bin/java normal yang disertakan dengan JDK. Targetnya harus berupa cc_binary. Setiap cc_binary 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) akan dibuat secara berbeda, bergantung pada apakah Anda menggunakan peluncur JDK atau peluncur lainnya:

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

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

main_class

String; optional

Nama class dengan metode main() untuk digunakan sebagai titik entri. Jika aturan menggunakan opsi ini, daftar srcs=[...] tidak diperlukan. 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 pada 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.

plugins

List of labels; optional

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 aturan yang dihasilkan.
resource_jars

List of labels; optional

Tidak digunakan lagi: Sebagai gantinya, gunakan java_import dan dependensi atau runtime_deps.
resource_strip_prefix

String; optional

Awalan jalur untuk menghapus resource dari resource Java.

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

runtime_deps

List of labels; optional

Library untuk disediakan ke biner akhir atau pengujian hanya pada runtime. Seperti deps biasa, ini akan muncul di classpath runtime, tetapi tidak seperti itu, bukan 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

Integer; optional; default is 0

Apakah mengenkode informasi build ke dalam biner. Nilai yang memungkinkan:
  • stamp = 1: Selalu cap informasi informasi ke biner, bahkan dalam build --nostamp. Setelan ini harus dihindari, karena berpotensi menghentikan caching jarak jauh untuk biner dan tindakan downstream yang bergantung padanya.
  • stamp = 0: Selalu mengganti informasi build dengan nilai konstanta. Ini memberikan penyimpanan hasil build yang baik ke dalam cache.
  • stamp = -1: Penyematan informasi build dikontrol oleh tanda --[no]stamp.

Biner yang distempel tidak dibuat ulang kecuali jika dependensinya berubah.

test_class

String; optional

Class Java yang akan dimuat oleh runner pengujian.

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

Atribut ini menentukan nama class Java yang akan dijalankan oleh pengujian ini. Hal ini jarang terjadi. Jika dihilangkan, argumen ini akan disimpulkan menggunakan name target dan jalur relatif root sumbernya. Jika pengujian berada di luar root source 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 suite() statis publik yang menampilkan junit.framework.Test (atau subclass Test). Untuk JUnit4, class harus dianotasi dengan org.junit.runner.RunWith.

Atribut ini memungkinkan beberapa aturan java_test untuk berbagi Test yang sama (TestCase, TestSuite, ...). Biasanya informasi tambahan diteruskan ke aturan tersebut (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; optional; default is True

Apakah biner harus menggunakan peluncur kustom.

Jika atribut ini ditetapkan ke false, atribut peluncur dan flag --java_launcher terkait akan diabaikan untuk target ini.

use_testrunner

Boolean; optional; default is True

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

konfigurasi_java_paket

Lihat sumber aturan
java_package_configuration(name, data, compatible_with, deprecation, distribs, features, javacopts, licenses, packages, restricted_to, tags, target_compatible_with, testonly, visibility)

Konfigurasi yang akan diterapkan ke kumpulan 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

Name; required

Nama unik untuk target ini.

data

List of labels; optional

Daftar file yang diperlukan oleh konfigurasi ini saat runtime.
javacopts

List of strings; optional

Flag compiler Java.
packages

List of labels; optional

Kumpulan package_group yang harus diterapkan konfigurasi tersebut.

plugin_java

Lihat sumber aturan
java_plugin(name, deps, srcs, data, resources, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, generates_api, javacopts, licenses, neverlink, output_licenses, plugins, processor_class, proguard_specs, resource_jars, resource_strip_prefix, restricted_to, tags, target_compatible_with, testonly, visibility)

java_plugin menentukan plugin untuk compiler Java yang dijalankan oleh Bazel. Saat ini, satu-satunya jenis plugin yang didukung adalah pemroses anotasi. Aturan java_library atau java_binary dapat menjalankan plugin dengan bergantung padanya 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 identik dengan java_library, kecuali untuk penambahan argumen processor_class.

Argumen

Atribut
name

Name; required

Nama unik untuk target ini.

deps

List of labels; optional

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 dalam deps akan berada di classpath waktu kompilasi aturan ini. Selanjutnya, penutupan transitif deps, runtime_deps, dan exports akan berada di classpath runtime.

Sebaliknya, target dalam atribut data disertakan dalam runfile, tetapi tidak pada classpath waktu kompilasi atau classpath runtime.

srcs

List of labels; optional

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

File sumber jenis .java dikompilasi. Dalam kasus file .java yang dihasilkan, sebaiknya tempatkan nama aturan yang dihasilkan di sini, bukan nama file itu sendiri. Hal ini tidak hanya meningkatkan keterbacaan, tetapi juga membuat aturan lebih tahan terhadap perubahan di masa mendatang: jika aturan yang menghasilkan menghasilkan file yang berbeda di masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan yang menghasilkan. Anda tidak boleh mencantumkan aturan yang menghasilkan di deps karena ini adalah tanpa pengoperasian.

File sumber jenis .srcjar akan diekstrak dan dikompilasi. (Ini berguna jika Anda perlu membuat kumpulan file .java dengan genrule.)

Aturan: jika aturan (biasanya genrule atau filegroup) menghasilkan salah satu file yang tercantum di atas, aturan 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

List of labels; optional

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 mem-build java_library, Bazel tidak akan menempatkan file ini di mana pun; jika file data adalah file yang dibuat, Bazel akan menghasilkannya. Saat membuat pengujian yang bergantung pada java_library Bazel ini akan menyalin atau menautkan file data ke area runfiles.

resources

List of labels; optional

Daftar file data yang akan disertakan dalam jar Java.

Jika ditentukan, resource tersebut akan dipaketkan dalam jar bersama dengan file .class biasa yang dihasilkan oleh kompilasi. Lokasi resource di dalam file jar ditentukan oleh struktur project. Bazel terlebih dahulu mencari tata letak direktori standar Maven, (direktori "src" diikuti dengan cucu direktori "resource"). 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, tetapi atribut resource_strip_prefix dapat digunakan untuk menentukan direktori alternatif khusus untuk file resource.

Resource dapat berupa file sumber atau file yang dihasilkan.

generates_api

Boolean; optional; default is False

Atribut ini menandai pemroses anotasi yang menghasilkan kode API.

Jika aturan menggunakan pemroses anotasi yang menghasilkan API, aturan lain yang bergantung padanya dapat merujuk pada kode yang dihasilkan hanya 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.

javacopts

List of strings; optional

Opsi compiler tambahan untuk library ini. Tunduk pada substitusi "Make variabel" dan tokenisasi shell Shell.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

Boolean; optional; default is False

Apakah library ini hanya boleh digunakan untuk kompilasi dan bukan saat 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 = 1 tidak mencegah compiler menyisipkan materi dari library ini ke dalam target kompilasi yang bergantung padanya, seperti yang diizinkan oleh Spesifikasi Bahasa Java (misalnya, konstanta static final dari String atau jenis primitif). Oleh karena itu, kasus penggunaan yang diinginkan adalah jika 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 compiler JLS untuk inline (dan yang harus disimpan untuk semua versi JLS mendatang).

output_licenses

Licence type; optional

Lihat common attributes
plugins

List of labels; optional

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 aturan yang dihasilkan.
processor_class

String; optional

Class pemroses adalah jenis class yang sepenuhnya memenuhi syarat yang harus digunakan compiler Java sebagai titik entri ke pemroses anotasi. Jika tidak ditentukan, aturan ini tidak akan berkontribusi ke pemroses anotasi ke pemrosesan anotasi compiler Java, tetapi classpath runtime-nya tetap akan disertakan di jalur pemroses anotasi compiler. (Hal ini utamanya dimaksudkan untuk digunakan oleh plugin Error Prone, yang dimuat dari jalur pemroses anotasi menggunakan java.util.ServiceLoader.)
proguard_specs

List of labels; optional

File yang akan digunakan sebagai spesifikasi Proguard. Hal ini akan menjelaskan kumpulan spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, nilai tersebut akan ditambahkan ke target android_binary mana pun, bergantung pada library ini. File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarn, asumsinosideef, dan aturan yang diawali dengan -keep. Opsi lainnya hanya dapat muncul dalam proguard_spec android_binary, untuk memastikan penggabungan non-tekologis.
resource_jars

List of labels; optional

Tidak digunakan lagi: Sebagai gantinya, gunakan java_import dan dependensi atau runtime_deps.
resource_strip_prefix

String; optional

Awalan jalur untuk menghapus resource dari resource Java.

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

runtime_java

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

Name; required

Nama unik untuk target ini.

srcs

List of labels; optional

Semua file dalam runtime.
default_cds

Label; optional

Arsip CDS default untuk java_runtime kedap udara. Jika hermetik diaktifkan untuk target java_binary dan jika target tidak menyediakan arsip CDS-nya sendiri dengan menentukan atribut classlist, CDS default java_runtime akan dikemas dalam JAR deployment hermetic.
hermetic_srcs

List of labels; optional

File dalam runtime yang diperlukan untuk deployment hermetic.
java

Label; optional

Jalur ke java yang dapat dieksekusi.
java_home

String; optional

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

Label; optional

File lib/modules yang diperlukan untuk deployment hermetic.
version

Integer; optional; default is 0

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

java_chain

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

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

Contoh

Contohnya 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

Name; required

Nama unik untuk target ini.

android_lint_data

List of labels; optional

Label alat yang tersedia untuk perluasan label di android_lint_jvm_opts.
android_lint_jvm_opts

List of strings; optional

Daftar argumen untuk JVM saat memanggil Android Lint.
android_lint_opts

List of strings; optional

Daftar argumen Android Lint.
android_lint_package_configuration

List of labels; optional

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

Label; optional

Label runner Android Lint, jika ada.
bootclasspath

List of labels; optional

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

List of labels; optional

Label jar deployment ImportDepsChecker.
forcibly_disable_header_compilation

Boolean; optional; default is False

Mengganti --java_header_compilation untuk menonaktifkan kompilasi header pada platform yang tidak mendukungnya, mis. JDK 7 Bazel.
genclass

List of labels; required

Label jar deployment GenClass.
header_compiler

List of labels; optional

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

List of labels; optional

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

Alat ini tidak mendukung pemrosesan anotasi.

ijar

List of labels; required

Label ijar yang dapat dieksekusi.
jacocorunner

Label; optional

Label jar deployment JacocoCoverageRunner.
java_runtime

Label; required

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

List of labels; required

Label jar deployment JavaBuilder.
javabuilder_data

List of labels; optional

Label data tersedia untuk perluasan label di javabuilder_jvm_opts.
javabuilder_jvm_opts

List of strings; optional

Daftar argumen untuk JVM saat memanggil JavaBuilder.
javac_supports_multiplex_workers

Boolean; optional; default is True

True jika JavaBuilder mendukung berjalan sebagai pekerja persisten multipleks, false jika tidak.
javac_supports_workers

Boolean; optional; default is True

True jika JavaBuilder mendukung berjalan sebagai pekerja persisten, false jika tidak.
javacopts

List of strings; optional

Daftar argumen tambahan untuk compiler Java. Lihat dokumentasi compiler Java untuk daftar lengkap kemungkinan tanda compiler Java.
jvm_opts

List of strings; optional

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

Label; optional

Label biner penerapan satu versi.
oneversion_whitelist

Label; optional

Label daftar putih satu versi.
package_configuration

List of labels; optional

Konfigurasi yang harus diterapkan ke grup paket yang ditentukan.
proguard_allowlister

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

Label daftar yang diizinkan Proguard.
resourcejar

List of labels; optional

Label dari builder jar resource yang dapat dieksekusi.
singlejar

List of labels; required

Label jar deployment SingleJar.
source_version

String; optional

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

String; optional

Versi target Java (mis., '6' atau '7'). File ini menentukan runtime Java mana yang harus dibuat oleh class.
timezone_data

Label; optional

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

List of labels; optional

Label alat yang tersedia untuk perluasan label di jvm_opts.
turbine_data

List of labels; optional

Label data tersedia untuk perluasan label di turbine_jvm_opts.
turbine_jvm_opts

List of strings; optional

Daftar argumen untuk JVM saat memanggil turbin.
xlint

List of strings; optional

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