Aturan Java

{3/2.0.20.2. Laporkan masalah Lihat sumber

Aturan

java_binary

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)

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

Skrip wrapper menerima beberapa tanda 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 lain yang sesuai dengan dependensi langsung biner.
  • name-src.jar: Arsip yang berisi sumber ("jar 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 menghasilkan file jar yang berdiri sendiri dengan manifes yang memungkinkannya dijalankan dengan perintah java -jar atau dengan opsi --singlejar skrip wrapper. Penggunaan skrip wrapper lebih disukai daripada java -jar karena juga akan meneruskan flag JVM dan opsi untuk memuat library native.

    Deploy jar berisi semua class yang akan ditemukan oleh classloader yang menelusuri classpath dari skrip wrapper biner dari awal hingga akhir. Library ini juga berisi library native yang diperlukan untuk dependensi. Link tersebut otomatis dimuat ke dalam JVM saat runtime.

    Jika target Anda menentukan atribut peluncur, maka alih-alih menjadi file JAR normal, _deploy.jar akan menjadi biner native. File ini akan berisi peluncur serta dependensi native (C++) apa pun dari aturan Anda, semuanya ditautkan ke dalam biner statis. Byte file jar yang sebenarnya akan ditambahkan ke biner native tersebut, sehingga menghasilkan satu blob biner yang berisi file yang dapat dieksekusi dan kode Java. Anda dapat menjalankan file jar yang dihasilkan secara langsung seperti Anda menjalankan biner native apa pun.

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

Atribut deps tidak diizinkan dalam aturan java_binary tanpa srcs; aturan seperti itu 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 diisi

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, nama Anda bisa menjadi Main.
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 jenis .java dikompilasi. Dalam hal file .java yang dihasilkan, biasanya disarankan untuk memasukkan nama aturan pembuatan di sini, bukan nama file itu sendiri. Hal ini tidak hanya meningkatkan keterbacaan, tetapi juga membuat aturan lebih tahan terhadap perubahan mendatang: jika aturan pembuatan menghasilkan file yang berbeda pada masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan yang dibuat. Anda tidak boleh mencantumkan aturan pembuatan di deps karena tidak menjalankan pengoperasian.

File sumber jenis .srcjar diekstrak dan dikompilasi. (Hal 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, 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.

resources

Daftar label; defaultnya adalah []

Daftar file data untuk disertakan dalam jar Java.

Jika ditentukan, resource akan digabungkan dalam jar bersama file .class biasa yang dihasilkan oleh kompilasi. Lokasi resource di dalam file jar ditentukan oleh struktur project. Bazel terlebih dahulu akan mencari tata letak direktori standar Maven, (direktori "src" diikuti dengan cucu direktori "resources"). 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 tertentu untuk file resource.

Resource dapat berupa file sumber atau file yang dihasilkan.

classpath_resources

Daftar label; defaultnya adalah []

JANGAN GUNAKAN OPSI INI KECUALI TIDAK ADA CARA LAINNYA)

Daftar resource yang harus ditempatkan di root hierarki java. Satu-satunya tujuan atribut ini adalah mendukung library pihak ketiga yang mengharuskan resource-nya ditemukan di classpath persis seperti "myconfig.xml". Class ini hanya diizinkan pada biner, bukan library, karena bahaya konflik namespace.

create_executable

Boolean; tidak dapat dikonfigurasi; defaultnya adalah True

Tidak digunakan lagi, gunakan java_single_jar sebagai gantinya.
deploy_env

Daftar label; defaultnya adalah []

Daftar target java_binary lainnya yang mewakili lingkungan deployment untuk biner ini. Tetapkan atribut ini saat mem-build plugin yang akan dimuat oleh java_binary lain.
Menetapkan atribut ini akan mengecualikan semua dependensi dari classpath runtime (dan jar deploy) biner ini yang digunakan bersama oleh 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 dibuat untuk target *_deploy.jar. Konten atribut ini tidak tunduk pada substitusi "Buat variabel".
javacopts

Daftar string; defaultnya adalah []

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

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

jvm_flags

Daftar string; defaultnya adalah []

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

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 dimaksudkan untuk mengurai oleh JVM harus ditentukan sebelum classname pada command line. Konten jvm_flags ditambahkan ke skrip wrapper sebelum classname 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, bukan program bin/java normal yang disertakan dengan JDK. Target harus berupa cc_binary. Setiap cc_binary yang menerapkan Java Invocation API dapat ditetapkan 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 dibangun sebagai library bersama dengan nama {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 lainnya, 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, linker akan menghapus kode yang dianggap tidak digunakan dari biner yang dihasilkan, yang berarti kode C++ apa pun yang hanya diakses melalui JNI mungkin tidak terhubung kecuali jika target cc_library menetapkan alwayslink = 1.

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

main_class

String; defaultnya adalah ""

Nama class dengan metode main() untuk digunakan sebagai titik entri. Jika menggunakan opsi ini, aturan tidak memerlukan daftar srcs=[...]. Oleh karena itu, dengan atribut ini, kita 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: 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

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 aturan ini.
resource_jars

Daftar label; defaultnya adalah []

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

String; defaultnya adalah ""

Awalan jalur yang akan dihapus dari resource Java.

Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam atribut resources. Terjadi error jika file resource tidak berada di direktori ini. Jika tidak ditentukan (default), jalur file resource ditentukan sesuai dengan logika yang sama seperti 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 akan disediakan untuk biner akhir atau pengujian hanya pada runtime. Seperti deps biasa, class ini akan muncul di classpath runtime, tetapi berbeda dengan miliknya, class ini tidak muncul di classpath waktu kompilasi. Dependensi yang hanya diperlukan saat runtime harus tercantum di sini. Alat analisis dependensi akan mengabaikan target yang muncul dalam runtime_deps dan deps.
stamp

Bilangan bulat; defaultnya adalah -1

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

Biner yang distempel tidak dibangun ulang kecuali jika dependensinya berubah.

use_launcher

Boolean; defaultnya adalah True

Apakah biner harus menggunakan peluncur kustom.

Jika atribut ini ditetapkan ke false, atribut peluncur dan flag --java_launcher yang 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 kepada runner pengujian sebagai nilai properti sistem bazel.test_suite. Anda dapat menggunakannya untuk mengganti perilaku default, yaitu menggunakan runner pengujian untuk aturan java_test, dan tidak menggunakannya untuk aturan java_binary. Anda mungkin tidak ingin melakukan hal ini. Salah satu kegunaannya 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 masuk utamanya. Nama class runner pengujian 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

Nama; wajib diisi

Nama unik untuk target ini.

deps

Daftar label; defaultnya adalah []

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

Daftar string; nonconfigurable; defaultnya adalah []

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

Daftar label; defaultnya adalah []

Target untuk disediakan kepada pengguna aturan ini. Lihat java_library.exports.
jars

Daftar label; wajib diisi

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

Boolean; defaultnya adalah False

Hanya gunakan library ini untuk kompilasi, 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. Ini akan menjelaskan rangkaian spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, semuanya akan ditambahkan ke target android_binary bergantung pada library ini. File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarning, asumsinoside Effects, dan aturan yang diawali dengan -keep. Opsi lainnya hanya dapat muncul di proguard_specs android_binary, untuk memastikan penggabungan non-tautoologis.
runtime_deps

Daftar label; defaultnya adalah []

Library yang akan disediakan untuk biner akhir atau pengujian hanya pada 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, 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 ("jar sumber").

Argumen

Atribut
name

Nama; wajib diisi

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 dibangun oleh aturan java_library yang tercantum dalam deps akan berada di classpath waktu kompilasi aturan ini. Selain itu, penutupan transitif deps, runtime_deps, dan exports akan berada pada classpath runtime.

Sebaliknya, target dalam atribut data tidak disertakan dalam runfile, tetapi tidak disertakan dalam classpath waktu kompilasi maupun classpath 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 jenis .java dikompilasi. Dalam hal file .java yang dihasilkan, biasanya disarankan untuk memasukkan nama aturan pembuatan di sini, bukan nama file itu sendiri. Hal ini tidak hanya meningkatkan keterbacaan, tetapi juga membuat aturan lebih tahan terhadap perubahan mendatang: jika aturan pembuatan menghasilkan file yang berbeda pada masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan yang dibuat. Anda tidak boleh mencantumkan aturan pembuatan di deps karena tidak menjalankan pengoperasian.

File sumber jenis .srcjar diekstrak dan dikompilasi. (Hal 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, 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 dibutuhkan library ini saat runtime. Lihat komentar umum tentang data di Atribut umum yang ditentukan oleh sebagian besar aturan build.

Saat membuat java_library, Bazel tidak akan meletakkan file ini di mana pun; jika file data merupakan file yang dibuat, Bazel akan membuat file tersebut. Saat membuat 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 untuk disertakan dalam jar Java.

Jika ditentukan, resource akan digabungkan dalam jar bersama file .class biasa yang dihasilkan oleh kompilasi. Lokasi resource di dalam file jar ditentukan oleh struktur project. Bazel terlebih dahulu akan mencari tata letak direktori standar Maven, (direktori "src" diikuti dengan cucu direktori "resources"). 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 tertentu untuk file resource.

Resource dapat berupa file sumber atau file yang dihasilkan.

exported_plugins

Daftar label; defaultnya adalah []

Daftar java_plugin (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 secara langsung bergantung pada library ini, seolah-olah library tersebut telah mendeklarasikan label ini secara eksplisit di plugins.

exports

Daftar label; defaultnya adalah []

Library yang diekspor.

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

Ringkasan: aturan X dapat mengakses kode di Y jika terdapat jalur dependensi di antara keduanya yang dimulai dengan tepi deps diikuti dengan nol atau beberapa tepi exports. Mari kita lihat beberapa contoh untuk mengilustrasikan hal ini.

Asumsikan A bergantung pada B dan B bergantung pada C. Dalam hal ini, C adalah dependensi transitif A, sehingga mengubah sumber C dan mem-build ulang A akan membangun ulang semuanya dengan benar. Namun, A tidak akan dapat menggunakan class di C. Untuk memungkinkan hal tersebut, A harus mendeklarasikan C dalam deps, 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 masing-masing library, C' dan D', A hanya dapat mengakses C', tetapi tidak D'.

Penting: aturan yang diekspor bukan merupakan dependensi reguler. Tetap berpegang pada contoh sebelumnya, jika B mengekspor C dan juga ingin menggunakan C, kode tersebut juga harus mencantumkannya dalam deps-nya sendiri.

javacopts

Daftar string; defaultnya adalah []

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

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

Boolean; defaultnya adalah False

Apakah library ini hanya boleh digunakan untuk kompilasi, 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 pada JDK standar.

Perlu diperhatikan bahwa neverlink = 1 tidak mencegah compiler agar tidak menyisipkan materi dari library ini ke dalam target kompilasi yang bergantung padanya, seperti yang diizinkan oleh Spesifikasi Bahasa Java (misalnya, static final dari String atau dari jenis primitif). Oleh karena itu, kasus penggunaan yang 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 JLS melarang compiler untuk inline (dan yang harus disimpan 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 aturan ini.
proguard_specs

Daftar label; defaultnya adalah []

File yang akan digunakan sebagai spesifikasi Proguard. Ini akan menjelaskan rangkaian spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, semuanya akan ditambahkan ke target android_binary bergantung pada library ini. File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarning, asumsinoside Effects, dan aturan yang diawali dengan -keep. Opsi lainnya hanya dapat muncul di proguard_specs android_binary, untuk memastikan penggabungan non-tautoologis.
resource_jars

Daftar label; defaultnya adalah []

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

String; defaultnya adalah ""

Awalan jalur yang akan dihapus dari resource Java.

Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam atribut resources. Terjadi error jika file resource tidak berada di direktori ini. Jika tidak ditentukan (default), jalur file resource ditentukan sesuai dengan logika yang sama seperti 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 akan disediakan untuk biner akhir atau pengujian hanya pada runtime. Seperti deps biasa, class ini akan muncul di classpath runtime, tetapi berbeda dengan miliknya, class ini tidak muncul di classpath waktu kompilasi. Dependensi yang hanya diperlukan saat runtime harus tercantum di sini. Alat analisis dependensi akan mengabaikan target yang muncul dalam 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 membuat kode Java dari file .proto.

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

Nama; wajib diisi

Nama unik untuk target ini.

deps

Daftar label; defaultnya adalah []

Daftar aturan proto_library untuk membuat kode Java.

java_proto_library

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 membuat kode Java dari file .proto.

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

Nama; wajib diisi

Nama unik untuk target ini.

deps

Daftar label; defaultnya adalah []

Daftar aturan proto_library untuk membuat kode Java.

java_test

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 dipanggil, bukan class utama yang 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 tentang argumen java_binary(). Aturan ini juga mendukung semua atribut yang 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 diisi

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 jenis .java dikompilasi. Dalam hal file .java yang dihasilkan, biasanya disarankan untuk memasukkan nama aturan pembuatan di sini, bukan nama file itu sendiri. Hal ini tidak hanya meningkatkan keterbacaan, tetapi juga membuat aturan lebih tahan terhadap perubahan mendatang: jika aturan pembuatan menghasilkan file yang berbeda pada masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan yang dibuat. Anda tidak boleh mencantumkan aturan pembuatan di deps karena tidak menjalankan pengoperasian.

File sumber jenis .srcjar diekstrak dan dikompilasi. (Hal 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, 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.

resources

Daftar label; defaultnya adalah []

Daftar file data untuk disertakan dalam jar Java.

Jika ditentukan, resource akan digabungkan dalam jar bersama file .class biasa yang dihasilkan oleh kompilasi. Lokasi resource di dalam file jar ditentukan oleh struktur project. Bazel terlebih dahulu akan mencari tata letak direktori standar Maven, (direktori "src" diikuti dengan cucu direktori "resources"). 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 tertentu untuk file resource.

Resource dapat berupa file sumber atau file yang dihasilkan.

classpath_resources

Daftar label; defaultnya adalah []

JANGAN GUNAKAN OPSI INI KECUALI TIDAK ADA CARA LAINNYA)

Daftar resource yang harus ditempatkan di root hierarki java. Satu-satunya tujuan atribut ini adalah mendukung library pihak ketiga yang mengharuskan resource-nya ditemukan di classpath persis seperti "myconfig.xml". Class ini hanya diizinkan pada biner, bukan library, karena bahaya konflik namespace.

create_executable

Boolean; tidak dapat dikonfigurasi; 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 dibuat untuk target *_deploy.jar. Konten atribut ini tidak tunduk pada substitusi "Buat variabel".
javacopts

Daftar string; defaultnya adalah []

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

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

jvm_flags

Daftar string; defaultnya adalah []

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

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 dimaksudkan untuk mengurai oleh JVM harus ditentukan sebelum classname pada command line. Konten jvm_flags ditambahkan ke skrip wrapper sebelum classname 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, bukan program bin/java normal yang disertakan dengan JDK. Target harus berupa cc_binary. Setiap cc_binary yang menerapkan Java Invocation API dapat ditetapkan 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 dibangun sebagai library bersama dengan nama {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 lainnya, 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, linker akan menghapus kode yang dianggap tidak digunakan dari biner yang dihasilkan, yang berarti kode C++ apa pun yang hanya diakses melalui JNI mungkin tidak terhubung kecuali jika target cc_library menetapkan alwayslink = 1.

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

main_class

String; defaultnya adalah ""

Nama class dengan metode main() untuk digunakan sebagai titik entri. Jika menggunakan opsi ini, aturan tidak memerlukan daftar srcs=[...]. Oleh karena itu, dengan atribut ini, kita 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: 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

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 aturan ini.
resource_jars

Daftar label; defaultnya adalah []

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

String; defaultnya adalah ""

Awalan jalur yang akan dihapus dari resource Java.

Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam atribut resources. Terjadi error jika file resource tidak berada di direktori ini. Jika tidak ditentukan (default), jalur file resource ditentukan sesuai dengan logika yang sama seperti 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 akan disediakan untuk biner akhir atau pengujian hanya pada runtime. Seperti deps biasa, class ini akan muncul di classpath runtime, tetapi berbeda dengan miliknya, class ini tidak muncul di classpath waktu kompilasi. Dependensi yang hanya diperlukan saat runtime harus tercantum di sini. Alat analisis dependensi akan mengabaikan target yang muncul dalam runtime_deps dan deps.
stamp

Bilangan bulat; defaultnya adalah 0

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

Biner yang distempel tidak dibangun ulang kecuali jika dependensinya berubah.

test_class

String; defaultnya adalah ""

Class Java yang akan dimuat oleh runner pengujian.

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

Atribut ini menetapkan 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 sumber yang diketahui, Bazel akan melaporkan error jika test_class tidak disetel.

Untuk JUnit3, class pengujian harus berupa subclass junit.framework.TestCase atau harus memiliki metode suite() statis publik yang menampilkan junit.framework.Test (atau subclass dari Test). Untuk JUnit4, class ini perlu 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 (misalnya, melalui jvm_flags=['-Dkey=value']) sehingga perilakunya berbeda pada 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 ditetapkan ke false, atribut peluncur dan flag --java_launcher yang 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 kepada runner pengujian sebagai nilai properti sistem bazel.test_suite. Anda dapat menggunakannya untuk mengganti perilaku default, yaitu menggunakan runner pengujian untuk aturan java_test, dan tidak menggunakannya untuk aturan java_binary. Anda mungkin tidak ingin melakukan hal ini. Salah satu kegunaannya 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 masuk utamanya. Nama class runner pengujian dapat diganti dengan atribut main_class.

java_package_configuration

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 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 diisi

Nama unik untuk target ini.

data

Daftar label; defaultnya adalah []

Daftar file yang dibutuhkan oleh konfigurasi ini pada runtime.
javacopts

Daftar string; defaultnya adalah []

Tanda compiler Java.
packages

Daftar label; defaultnya adalah []

Kumpulan package_group tempat konfigurasi akan diterapkan.

java_plugin

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 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 identik dengan java_library, kecuali untuk penambahan argumen processor_class.

Argumen

Atribut
name

Nama; wajib diisi

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 dibangun oleh aturan java_library yang tercantum dalam deps akan berada di classpath waktu kompilasi aturan ini. Selain itu, penutupan transitif deps, runtime_deps, dan exports akan berada pada classpath runtime.

Sebaliknya, target dalam atribut data tidak disertakan dalam runfile, tetapi tidak disertakan dalam classpath waktu kompilasi maupun classpath 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 jenis .java dikompilasi. Dalam hal file .java yang dihasilkan, biasanya disarankan untuk memasukkan nama aturan pembuatan di sini, bukan nama file itu sendiri. Hal ini tidak hanya meningkatkan keterbacaan, tetapi juga membuat aturan lebih tahan terhadap perubahan mendatang: jika aturan pembuatan menghasilkan file yang berbeda pada masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan yang dibuat. Anda tidak boleh mencantumkan aturan pembuatan di deps karena tidak menjalankan pengoperasian.

File sumber jenis .srcjar diekstrak dan dikompilasi. (Hal 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, 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 dibutuhkan library ini saat runtime. Lihat komentar umum tentang data di Atribut umum yang ditentukan oleh sebagian besar aturan build.

Saat membuat java_library, Bazel tidak akan meletakkan file ini di mana pun; jika file data merupakan file yang dibuat, Bazel akan membuat file tersebut. Saat membuat 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 untuk disertakan dalam jar Java.

Jika ditentukan, resource akan digabungkan dalam jar bersama file .class biasa yang dihasilkan oleh kompilasi. Lokasi resource di dalam file jar ditentukan oleh struktur project. Bazel terlebih dahulu akan mencari tata letak direktori standar Maven, (direktori "src" diikuti dengan cucu direktori "resources"). 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 tertentu untuk file resource.

Resource dapat berupa file sumber atau file yang dihasilkan.

generates_api

Boolean; defaultnya adalah False

Atribut ini menandai pemroses anotasi yang menghasilkan kode API.

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

PERINGATAN: Atribut ini memengaruhi performa build. Gunakan hanya jika diperlukan.

javacopts

Daftar string; defaultnya adalah []

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

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

Boolean; defaultnya adalah False

Apakah library ini hanya boleh digunakan untuk kompilasi, 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 pada JDK standar.

Perlu diperhatikan bahwa neverlink = 1 tidak mencegah compiler agar tidak menyisipkan materi dari library ini ke dalam target kompilasi yang bergantung padanya, seperti yang diizinkan oleh Spesifikasi Bahasa Java (misalnya, static final dari String atau dari jenis primitif). Oleh karena itu, kasus penggunaan yang 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 JLS melarang compiler untuk inline (dan yang harus disimpan untuk semua versi JLS mendatang).

output_licenses

Jenis lisensi; defaultnya adalah ["none"]

Lihat common attributes
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 aturan ini.
processor_class

String; defaultnya adalah ""

Class pemroses adalah jenis class yang sepenuhnya memenuhi syarat dan harus digunakan oleh compiler Java sebagai titik entri ke pemroses anotasi. Jika tidak ditentukan, aturan ini tidak akan berkontribusi pada pemroses anotasi pada pemrosesan anotasi compiler Java, tetapi classpath runtime-nya akan tetap disertakan pada jalur pemroses anotasi compiler. (Hal 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. Ini akan menjelaskan rangkaian spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, semuanya akan ditambahkan ke target android_binary bergantung pada library ini. File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarning, asumsinoside Effects, dan aturan yang diawali dengan -keep. Opsi lainnya hanya dapat muncul di proguard_specs android_binary, untuk memastikan penggabungan non-tautoologis.
resource_jars

Daftar label; defaultnya adalah []

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

String; defaultnya adalah ""

Awalan jalur yang akan dihapus dari resource Java.

Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam atribut resources. Terjadi error jika file resource tidak berada di direktori ini. Jika tidak ditentukan (default), jalur file resource ditentukan sesuai dengan logika yang sama seperti 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, distribs, features, hermetic_srcs, java, java_home, lib_ct_sym, 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

Nama; wajib diisi

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 hermetic. Saat hermetic 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

Daftar label; defaultnya adalah []

File dalam runtime yang diperlukan untuk deployment hermetic.
java

Label; defaultnya adalah None

Jalur ke file java yang dapat dieksekusi.
java_home

String; defaultnya adalah ""

Jalur ke root runtime. Tunduk pada substitusi variabel"Buat". 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_ct_sym

Label; defaultnya adalah None

File lib/ct.sym yang diperlukan untuk kompilasi dengan --release. Jika tidak ditentukan dan hanya ada satu file di srcs yang jalurnya diakhiri dengan /lib/ct.sym, file tersebut akan digunakan.
lib_modules

Label; defaultnya adalah None

File lib/modules diperlukan untuk deployment hermetic.
version

Bilangan bulat; defaultnya adalah 0

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

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

Menentukan konfigurasi untuk compiler Java. Toolchain mana 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 diisi

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 ditetapkan.
android_lint_runner

Label; defaultnya adalah None

Label runner Android Lint, jika ada.
bootclasspath

Daftar label; defaultnya adalah []

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

Daftar label; defaultnya adalah []

Label dari jar deploy ImportDepsChecker.
forcibly_disable_header_compilation

Boolean; defaultnya adalah False

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

Daftar label; wajib diisi

Label jar deploy GenClass.
header_compiler

Daftar label; defaultnya adalah []

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

Daftar label; defaultnya adalah []

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

Alat ini tidak mendukung pemrosesan anotasi.

ijar

Daftar label; wajib diisi

Label dari file ijar yang dapat dieksekusi.
jacocorunner

Label; defaultnya adalah None

Label jar deployment JacocoCoverageRunner.
java_runtime

Label; wajib diisi

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

Daftar label; wajib diisi

Label jar deploy JavaBuilder.
javabuilder_data

Daftar label; defaultnya adalah []

Label data yang tersedia untuk label-perluasan 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 pengoperasian sebagai pekerja persisten multipleks, 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 compiler Java untuk mengetahui daftar lengkap kemungkinan tanda compiler Java.
jvm_opts

Daftar string; defaultnya adalah []

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

Label; defaultnya adalah None

Label biner penerapan satu versi.
oneversion_allowlist_for_tests

Label; defaultnya adalah None

Label daftar yang diizinkan satu versi untuk pengujian.
oneversion_whitelist

Label; defaultnya adalah None

Label daftar putih satu versi.
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.
resourcejar

Daftar label; defaultnya adalah []

Label eksekusi builder jar resource yang dapat dieksekusi.
singlejar

Daftar label; wajib diisi

Label jar deploy SingleJar.
source_version

String; defaultnya adalah ""

Versi sumber Java (mis., '6' atau '7'). Kode ini menentukan rangkaian struktur kode yang diizinkan dalam kode sumber Java.
target_version

String; defaultnya adalah ""

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

Label; defaultnya adalah None

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

Daftar label; defaultnya adalah []

Label alat yang tersedia untuk label-perluasan di jvm_opts.
turbine_data

Daftar label; defaultnya adalah []

Label data yang tersedia untuk ekspansi label di turbine_jvm_opts.
turbine_jvm_opts

Daftar string; defaultnya adalah []

Daftar argumen untuk JVM saat memanggil turbin.
xlint

Daftar string; defaultnya adalah []

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