Aturan Java

Laporkan masalah Lihat sumber Malam · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

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, di antara hal lain, file jar untuk setiap {i>library<i} di mana biner bergantung. Saat menjalankan skrip shell wrapper, setiap elemen yang tidak kosong Variabel lingkungan JAVABIN akan lebih diprioritaskan daripada versi yang ditentukan melalui Bendera --java_runtime_version Bazel.

Skrip wrapper menerima beberapa tanda unik. Rujuk ke //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 kelas dan resource yang sesuai dengan dependensi langsung biner.
  • name-src.jar: Arsip yang berisi sumber ("sumber stoples").
  • name_deploy.jar: Arsip Java yang cocok untuk deployment (hanya dibangun jika diminta secara eksplisit).

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

    Jar deploy berisi semua class yang akan ditemukan oleh classloader yang mencari classpath dari skrip wrapper biner dari awal hingga akhir. Ini juga berisi library native yang dibutuhkan untuk dependensi. URL ini dimuat secara otomatis ke dalam JVM saat runtime.

    Jika target Anda menentukan peluncur , alih-alih menjadi file JAR normal, _deploy.jar akan menjadi biner native. Ini akan berisi peluncur beserta dependensi native (C++) dari aturan Anda, semua ditautkan ke dalam biner statis. Byte file jar yang sebenarnya akan ditambahkan ke biner native tersebut, membuat satu blob biner yang berisi file yang dapat dieksekusi dan kode Java. Anda dapat langsung mengeksekusi file jar yang dihasilkan seperti Anda akan mengeksekusi biner native apa pun.

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

Atribut deps tidak diizinkan dalam aturan java_binary tanpa srcs aturan tersebut memerlukan main_class 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 Main.java, maka nama Anda bisa menjadi Main.
deps

Daftar label; default adalah []

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

Daftar label; default adalah []

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

File sumber jenis .java dikompilasi. Jika dibuat .java file biasanya disarankan untuk memasukkan nama aturan pembuatan di sini alih-alih nama file itu sendiri. Ini tidak hanya meningkatkan keterbacaan tetapi membuat aturan lebih tahan terhadap perubahan mendatang: jika aturan yang file yang berbeda di masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan pembuatan. Anda tidak boleh mencantumkan aturan pembuatan di deps karena tidak dioperasikan.

File sumber jenis .srcjar diekstrak dan dikompilasi. (Ini berguna jika Anda harus 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 .

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

resources

Daftar label; default adalah []

Daftar file data untuk disertakan dalam jar Java.

Jika sudah ditentukan, resource akan dikelompokkan dalam stoples bersama dengan .class file yang dihasilkan oleh kompilasi. Lokasi resource di dalam dari file jar ditentukan oleh struktur proyek. Bazel pertama-tama mencari versi Maven tata letak direktori standar, (direktori "src" diikuti dengan cucu direktori "resources"). Jika bukan ditemukan, Bazel kemudian mencari direktori paling atas bernama "{i>java<i}" atau "javatests" (jadi, untuk misalnya, jika resource berada di <workspace root>/x/java/y/java/z, jalur resource akan menjadi y/java/z. Heuristik ini tidak dapat diabaikan, tetapi, atribut resource_strip_prefix dapat digunakan untuk menentukan direktori alternatif tertentu untuk file sumber daya.

Resource dapat berupa file sumber atau file yang dihasilkan.

classpath_resources

Daftar label; default adalah []

JANGAN GUNAKAN OPSI INI KECUALI TIDAK ADA CARA LAINNYA)

Daftar resource yang harus ditempatkan di root hierarki java. Atribut ini satu-satunya tujuannya adalah untuk mendukung pustaka pihak ketiga yang mengharuskan sumber daya mereka yang ditemukan di classpath tepatnya "myconfig.xml". Hanya diizinkan di biner dan bukan library, karena bahayanya konflik namespace.

create_executable

Boolean; tidak dapat dikonfigurasi; default adalah True

Tidak digunakan lagi, gunakan java_single_jar sebagai gantinya.
deploy_env

Daftar label; default adalah []

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

Daftar {i>string<i}; default-nya adalah []

Daftar baris yang akan ditambahkan ke file META-INF/manifest.mf yang dibuat untuk Target *_deploy.jar. Konten atribut ini tidak subjek ke "Buat variabel".
javacopts

Daftar {i>string<i}; default-nya adalah []

Opsi compiler tambahan untuk library ini. Tunduk kepada substitusi "Buat variabel" dan Tokenisasi shell Bourne.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

jvm_flags

Daftar {i>string<i}; default-nya adalah []

Daftar tanda yang akan disematkan dalam skrip wrapper yang dihasilkan untuk menjalankan biner ini. Tunduk kepada $(location) dan Penggantian "Buat variabel", dan Tokenisasi shell Bourne.

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

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

launcher

Label; default adalah None

Menentukan biner yang akan digunakan untuk menjalankan program Java Anda, alih-alih program bin/java normal yang disertakan dengan JDK. Target harus berupa cc_binary. Setiap cc_binary yang mengimplementasikan Java Invocation API dapat ditetapkan sebagai nilai untuk atribut ini.

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

Tanda Bazel --java_launcher terkait hanya memengaruhi yang Target java_binary dan java_test yang memiliki tidak 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 dibuat 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 lainnya, dependensi native (C++) akan secara statis ditautkan ke biner bernama {name}_nativedeps, dengan {name} adalah atribut name dari aturan java_binary ini. Dalam kasus ini, {i>penaut<i} akan menghapus kode apa pun yang dianggap tidak terpakai dari biner yang dihasilkan, yang berarti setiap kode C++ yang hanya diakses melalui JNI tidak boleh ditautkan kecuali target cc_library tersebut menentukan alwayslink = 1.

Saat menggunakan peluncur selain peluncur JDK default, format perubahan output *_deploy.jar. Lihat yang utama Dokumentasi java_binary untuk mengetahui detailnya.

main_class

String; default-nya adalah ""

Nama class dengan metode main() untuk digunakan sebagai titik entri. Jika menggunakan opsi ini, aturan tidak memerlukan daftar srcs=[...]. Sehingga, dengan atribut ini kita bisa membuat {i>executable<i} dari pustaka Java yang sudah berisi satu atau beberapa metode main().

Nilai atribut ini adalah nama class, bukan file sumber. Kelas harus tersedia saat runtime: kode 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; di sana bukanlah pemeriksaan waktu build.

plugins

Daftar label; default adalah []

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

Daftar label; default adalah []

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

String; default-nya adalah ""

Awalan jalur yang akan dihapus dari resource Java.

Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam resources . Terjadi error jika file resource tidak berada di direktori ini. Jika tidak ditentukan (default), jalur file sumber daya ditentukan sesuai dengan sebagai paket Java dari file sumber. Misalnya, file sumber di stuff/java/foo/bar/a.txt akan berlokasi di foo/bar/a.txt.

runtime_deps

Daftar label; default adalah []

Library yang akan disediakan untuk biner akhir atau pengujian hanya pada runtime. Seperti deps biasa, class ini akan muncul di classpath runtime, tetapi tidak seperti mereka, bukan pada classpath waktu kompilasi. Dependensi yang hanya diperlukan pada runtime harus yang tercantum di sini. Alat analisis dependensi harus mengabaikan target yang muncul di kedua runtime_deps dan deps.
stamp

{i>Integer<i} (Bilangan bulat): default-nya adalah -1

Apakah ingin mengenkode informasi build ke dalam biner. Nilai yang mungkin:
  • stamp = 1: Selalu tambahkan informasi build ke dalam biner, bahkan dalam --nostamp build. Ini harus dihindari, karena berpotensi mematikan caching jarak jauh untuk biner dan tindakan downstream apa pun yang bergantung padanya.
  • stamp = 0: Selalu ganti informasi build dengan nilai konstanta. 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; default-nya adalah True

Apakah biner harus menggunakan peluncur kustom.

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

use_testrunner

Boolean; default-nya adalah False

Gunakan runner pengujian (secara default com.google.testing.junit.runner.BazelTestRunner) sebagai class titik entri utama untuk program Java, dan menyediakan class pengujian ke runner pengujian sebagai nilai bazel.test_suite properti sistem. Anda dapat menggunakannya untuk mengganti yaitu menggunakan {i> test runner<i} untuk java_test aturan, dan tidak menggunakannya untuk aturan java_binary. Tidak mungkin Anda pasti ingin melakukan ini. Satu penggunaan adalah untuk AllTest aturan yang dipanggil oleh aturan lain (untuk menyiapkan database sebelum menjalankan pengujian, misalnya). AllTest aturan harus dideklarasikan sebagai java_binary, tetapi harus masih menggunakan {i>test runner<i} sebagai titik masuk utamanya. Nama class runner pengujian dapat diganti dengan atribut main_class.

java_import

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

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

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; default adalah []

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

Daftar label; default adalah []

Daftar file yang diperlukan oleh aturan ini saat runtime.
add_exports

Daftar {i>string<i}; default-nya adalah []

Mengizinkan library ini mengakses module atau package yang diberikan.

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

add_opens

Daftar {i>string<i}; default-nya adalah []

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

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

constraints

Daftar {i>string<i}; default-nya adalah []

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

Daftar label; default 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; default-nya 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; default adalah []

File yang akan digunakan sebagai spesifikasi Proguard. Ini akan menjelaskan rangkaian spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, mereka akan ditambahkan ke target android_binary bergantung pada library ini. File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarning, mengasumsikan bahwa efek samping tersebut, dan aturan yang dimulai dengan {i>-keep<i}. Opsi lainnya hanya dapat muncul di proguard_specs android_binary, untuk memastikan penggabungan non-tautoologis.
runtime_deps

Daftar label; default adalah []

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

Label; default adalah None

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

java_library

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

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

Output implisit

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

Argumen

Atribut
name

Nama; wajib diisi

Nama unik untuk target ini.

deps

Daftar label; default adalah []

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

Stoples yang dibuat oleh aturan java_library yang tercantum di deps akan aktif 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 waktu kompilasi maupun classpath runtime.

srcs

Daftar label; default adalah []

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

File sumber jenis .java dikompilasi. Jika dibuat .java file biasanya disarankan untuk memasukkan nama aturan pembuatan di sini alih-alih nama file itu sendiri. Ini tidak hanya meningkatkan keterbacaan tetapi membuat aturan lebih tahan terhadap perubahan mendatang: jika aturan yang file yang berbeda di masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan pembuatan. Anda tidak boleh mencantumkan aturan pembuatan di deps karena tidak dioperasikan.

File sumber jenis .srcjar diekstrak dan dikompilasi. (Ini berguna jika Anda harus 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 .

File sumber jenis .properties diperlakukan sebagai resource.

Semua file lainnya akan diabaikan, selama ada setidaknya satu file jenis file yang dijelaskan di atas. Jika tidak, error akan muncul.

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

data

Daftar label; default adalah []

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

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

resources

Daftar label; default adalah []

Daftar file data untuk disertakan dalam jar Java.

Resource dapat berupa file sumber atau file yang dihasilkan.

Jika sudah ditentukan, resource akan dikelompokkan dalam stoples bersama dengan .class file yang dihasilkan oleh kompilasi. Lokasi resource di dalam dari file jar ditentukan oleh struktur proyek. Bazel pertama-tama mencari versi Maven tata letak direktori standar, (direktori "src" diikuti dengan cucu direktori "resources"). Jika bukan ditemukan, Bazel kemudian mencari direktori paling atas bernama "{i>java<i}" atau "javatests" (jadi, untuk misalnya, jika resource berada di <workspace root>/x/java/y/java/z, jalur resource akan menjadi y/java/z. Heuristik ini tidak dapat diabaikan, tetapi, atribut resource_strip_prefix dapat digunakan untuk menentukan direktori alternatif tertentu untuk file sumber daya.

add_exports

Daftar {i>string<i}; default-nya adalah []

Mengizinkan library ini mengakses module atau package yang diberikan.

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

add_opens

Daftar {i>string<i}; default-nya adalah []

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

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

bootclasspath

Label; default adalah None

API Terbatas, jangan digunakan
exported_plugins

Daftar label; default adalah []

Daftar java_plugin (mis. anotasi pemroses) untuk mengekspor ke library yang bergantung langsung pada library ini.

Daftar java_plugin yang ditentukan akan diterapkan ke library yang secara langsung bergantung pada library ini, seolah-olah library tersebut label di plugins.

exports

Daftar label; default adalah []

Library yang diekspor.

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

Ringkasan: aturan X dapat mengakses kode di Y jika ada dependensi jalur di antara keduanya yang dimulai dengan tepi deps diikuti dengan nol atau lebih exports tepi. 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 dari A, sehingga mengubah sumber C dan membangun ulang A akan membangun ulang semuanya dengan benar. Namun, A tidak akan dapat menggunakan class di C. Untuk mengizinkan itu, baik A harus mendeklarasikan C dalam deps-nya, atau B dapat membuatnya lebih mudah bagi A (dan apa pun yang mungkin bergantung pada A) dengan mendeklarasikan C dalam exports (B) miliknya .

Penutupan library yang diekspor tersedia untuk semua aturan induk langsung. Ambil sedikit contoh yang 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 {i>library<i}, C' dan D' masing-masing, A hanya bisa mengakses C' dan bukan D'.

Penting: aturan yang diekspor bukan merupakan dependensi reguler. Berpegang pada contoh sebelumnya, jika B mengekspor C dan ingin juga menggunakan C, ia juga harus mencantumkannya sendiri deps.

javabuilder_jvm_flags

Daftar {i>string<i}; default-nya adalah []

API Terbatas, jangan digunakan
javacopts

Daftar {i>string<i}; default-nya adalah []

Opsi compiler tambahan untuk library ini. Tunduk kepada substitusi "Buat variabel" dan Tokenisasi shell Bourne.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

Boolean; default-nya adalah False

Apakah library ini hanya boleh digunakan untuk kompilasi, bukan saat runtime. Berguna jika library akan disediakan oleh lingkungan runtime selama eksekusi. Contoh dari library tersebut adalah IDE API untuk plugin IDE atau tools.jar untuk semuanya yang berjalan pada JDK standar.

Perlu diketahui bahwa neverlink = 1 tidak mencegah compiler agar tidak menyisipkan materi dari library ini ke target kompilasi yang bergantung padanya, seperti yang diizinkan oleh paket Spesifikasi Bahasa (mis., Konstanta static final dari String atau 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 semua versi mendatang JLS).

plugins

Daftar label; default adalah []

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

Daftar label; default adalah []

File yang akan digunakan sebagai spesifikasi Proguard. Ini akan menjelaskan rangkaian spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, mereka akan ditambahkan ke target android_binary bergantung pada library ini. File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarning, mengasumsikan bahwa efek samping tersebut, dan aturan yang dimulai dengan {i>-keep<i}. Opsi lainnya hanya dapat muncul di proguard_specs android_binary, untuk memastikan penggabungan non-tautoologis.
resource_strip_prefix

String; default-nya adalah ""

Awalan jalur yang akan dihapus dari resource Java.

Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam resources . Terjadi error jika file resource tidak berada di direktori ini. Jika tidak ditentukan (default), jalur file sumber daya ditentukan sesuai dengan sebagai paket Java dari file sumber. Misalnya, file sumber di stuff/java/foo/bar/a.txt akan berlokasi di foo/bar/a.txt.

runtime_deps

Daftar label; default adalah []

Library yang akan disediakan untuk biner akhir atau pengujian hanya pada runtime. Seperti deps biasa, class ini akan muncul di classpath runtime, tetapi tidak seperti mereka, bukan pada classpath waktu kompilasi. Dependensi yang hanya diperlukan pada runtime harus yang tercantum di sini. Alat analisis dependensi harus mengabaikan target yang muncul di kedua runtime_deps dan deps.

java_lite_proto_library

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

java_lite_proto_library membuat kode Java dari file .proto.

deps harus mengarah ke aturan proto_library .

Contoh:


java_library(
    name = "lib",
    runtime_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; default adalah []

Daftar proto_library aturan untuk menghasilkan kode Java.

java_proto_library

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

java_proto_library membuat kode Java dari file .proto.

deps harus mengarah ke aturan proto_library .

Contoh:


java_library(
    name = "lib",
    runtime_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; default adalah []

Daftar proto_library aturan untuk menghasilkan kode Java.

java_test

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

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

Target output implisit

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

Lihat bagian tentang argumen java_binary(). Aturan ini juga mendukung semua atribut yang umum ke 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; default adalah []

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

Daftar label; default adalah []

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

File sumber jenis .java dikompilasi. Jika dibuat .java file biasanya disarankan untuk memasukkan nama aturan pembuatan di sini alih-alih nama file itu sendiri. Ini tidak hanya meningkatkan keterbacaan tetapi membuat aturan lebih tahan terhadap perubahan mendatang: jika aturan yang file yang berbeda di masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan pembuatan. Anda tidak boleh mencantumkan aturan pembuatan di deps karena tidak dioperasikan.

File sumber jenis .srcjar diekstrak dan dikompilasi. (Ini berguna jika Anda harus 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 .

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

data

Daftar label; default adalah []

Daftar file yang dibutuhkan library ini saat runtime. Lihat komentar umum tentang data pada Atribut umum didefinisikan oleh sebagian besar aturan build.
resources

Daftar label; default adalah []

Daftar file data untuk disertakan dalam jar Java.

Resource dapat berupa file sumber atau file yang dihasilkan.

Jika sudah ditentukan, resource akan dikelompokkan dalam stoples bersama dengan .class file yang dihasilkan oleh kompilasi. Lokasi resource di dalam dari file jar ditentukan oleh struktur proyek. Bazel pertama-tama mencari versi Maven tata letak direktori standar, (direktori "src" diikuti dengan cucu direktori "resources"). Jika bukan ditemukan, Bazel kemudian mencari direktori paling atas bernama "{i>java<i}" atau "javatests" (jadi, untuk misalnya, jika resource berada di <workspace root>/x/java/y/java/z, jalur resource akan menjadi y/java/z. Heuristik ini tidak dapat diabaikan, tetapi, atribut resource_strip_prefix dapat digunakan untuk menentukan direktori alternatif tertentu untuk file sumber daya.

add_exports

Daftar {i>string<i}; default-nya adalah []

Mengizinkan library ini mengakses module atau package yang diberikan.

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

add_opens

Daftar {i>string<i}; default-nya adalah []

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

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

bootclasspath

Label; default adalah None

API Terbatas, jangan digunakan
classpath_resources

Daftar label; default adalah []

JANGAN GUNAKAN OPSI INI KECUALI TIDAK ADA CARA LAINNYA)

Daftar resource yang harus ditempatkan di root hierarki java. Atribut ini satu-satunya tujuannya adalah untuk mendukung pustaka pihak ketiga yang mengharuskan sumber daya mereka yang ditemukan di classpath tepatnya "myconfig.xml". Hanya diizinkan di biner dan bukan library, karena bahayanya konflik namespace.

create_executable

Boolean; default-nya adalah True

Tidak digunakan lagi, gunakan java_single_jar sebagai gantinya.
deploy_manifest_lines

Daftar {i>string<i}; default-nya adalah []

Daftar baris yang akan ditambahkan ke file META-INF/manifest.mf yang dibuat untuk Target *_deploy.jar. Konten atribut ini tidak subjek ke "Buat variabel".
javacopts

Daftar {i>string<i}; default-nya adalah []

Opsi compiler tambahan untuk biner ini. Tunduk kepada substitusi "Buat variabel" dan Tokenisasi shell Bourne.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

jvm_flags

Daftar {i>string<i}; default-nya adalah []

Daftar tanda yang akan disematkan dalam skrip wrapper yang dihasilkan untuk menjalankan biner ini. Tunduk kepada $(location) dan Penggantian "Buat variabel", dan Tokenisasi shell Bourne.

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

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

launcher

Label; default adalah None

Menentukan biner yang akan digunakan untuk menjalankan program Java Anda, alih-alih program bin/java normal yang disertakan dengan JDK. Target harus berupa cc_binary. Setiap cc_binary yang mengimplementasikan Java Invocation API dapat ditetapkan sebagai nilai untuk atribut ini.

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

Tanda Bazel --java_launcher terkait hanya memengaruhi yang Target java_binary dan java_test yang memiliki tidak 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 dibuat 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 lainnya, dependensi native (C++) akan secara statis ditautkan ke biner bernama {name}_nativedeps, dengan {name} adalah atribut name dari aturan java_binary ini. Dalam kasus ini, {i>penaut<i} akan menghapus kode apa pun yang dianggap tidak terpakai dari biner yang dihasilkan, yang berarti setiap kode C++ yang hanya diakses melalui JNI tidak boleh ditautkan kecuali target cc_library tersebut menentukan alwayslink = 1.

Saat menggunakan peluncur selain peluncur JDK default, format perubahan output *_deploy.jar. Lihat yang utama Dokumentasi java_binary untuk mengetahui detailnya.

main_class

String; default-nya adalah ""

Nama class dengan metode main() untuk digunakan sebagai titik entri. Jika menggunakan opsi ini, aturan tidak memerlukan daftar srcs=[...]. Sehingga, dengan atribut ini kita bisa membuat {i>executable<i} dari pustaka Java yang sudah berisi satu atau beberapa metode main().

Nilai atribut ini adalah nama class, bukan file sumber. Kelas harus tersedia saat runtime: kode 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; di sana bukanlah pemeriksaan waktu build.

Boolean; default-nya adalah False

plugins

Daftar label; default adalah []

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

String; default-nya adalah ""

Awalan jalur yang akan dihapus dari resource Java.

Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam resources . Terjadi error jika file resource tidak berada di direktori ini. Jika tidak ditentukan (default), jalur file sumber daya ditentukan sesuai dengan sebagai paket Java dari file sumber. Misalnya, file sumber di stuff/java/foo/bar/a.txt akan berlokasi di foo/bar/a.txt.

runtime_deps

Daftar label; default adalah []

Library yang akan disediakan untuk biner akhir atau pengujian hanya pada runtime. Seperti deps biasa, class ini akan muncul di classpath runtime, tetapi tidak seperti mereka, bukan pada classpath waktu kompilasi. Dependensi yang hanya diperlukan pada runtime harus yang tercantum di sini. Alat analisis dependensi harus mengabaikan target yang muncul di kedua runtime_deps dan deps.
stamp

{i>Integer<i} (Bilangan bulat): default-nya adalah 0

Apakah ingin mengenkode informasi build ke dalam biner. Nilai yang mungkin:
  • stamp = 1: Selalu tambahkan informasi build ke dalam biner, bahkan dalam --nostamp build. Ini harus dihindari, karena berpotensi mematikan caching jarak jauh untuk biner dan tindakan downstream apa pun yang bergantung padanya.
  • stamp = 0: Selalu ganti informasi build dengan nilai konstanta. 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; default-nya adalah ""

Class Java yang akan dimuat oleh runner pengujian.

Secara default, jika argumen ini tidak didefinisikan, maka mode lawas akan digunakan dan argumen pengujian digunakan sebagai gantinya. Menetapkan tanda --nolegacy_bazel_java_test untuk tidak melakukan penggantian pada argumen pertama.

Atribut ini menetapkan nama class Java yang akan dijalankan pengujian ini. Hal ini jarang terjadi. Jika argumen ini dihilangkan, tujuan akan disimpulkan menggunakan name target dan jalur relatif root-root. Jika pengujian berada di luar jaringan yang diketahui, root sumber, Bazel akan melaporkan error jika test_class tidak disetel.

Untuk JUnit3, class pengujian harus berupa subclass dari junit.framework.TestCase atau harus memiliki metode suite() statis yang menampilkan junit.framework.Test (atau subclass dari Test). Untuk JUnit4, class 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 (mis. melalui jvm_flags=['-Dkey=value']) sehingga memiliki perilaku yang berbeda pada setiap kasus, seperti menjalankan subset pengujian. Atribut ini juga memungkinkan penggunaan Pengujian Java di luar hierarki javatests.

use_launcher

Boolean; default-nya adalah True

Apakah biner harus menggunakan peluncur kustom.

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

use_testrunner

Boolean; default-nya adalah True

Gunakan runner pengujian (secara default com.google.testing.junit.runner.BazelTestRunner) sebagai class titik entri utama untuk program Java, dan menyediakan class pengujian ke runner pengujian sebagai nilai bazel.test_suite properti sistem.
Anda dapat menggunakannya untuk mengganti yaitu menggunakan {i> test runner<i} untuk java_test aturan, dan tidak menggunakannya untuk aturan java_binary. Tidak mungkin Anda pasti ingin melakukan ini. Satu penggunaan adalah untuk AllTest aturan yang dipanggil oleh aturan lain (untuk menyiapkan database sebelum menjalankan pengujian, misalnya). AllTest aturan harus dideklarasikan sebagai java_binary, tetapi harus masih menggunakan {i>test runner<i} 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, exec_compatible_with, exec_properties, features, javacopts, output_licenses, packages, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

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

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; default adalah []

Daftar file yang dibutuhkan oleh konfigurasi ini pada runtime.
javacopts

Daftar {i>string<i}; default-nya adalah []

Tanda compiler Java.
output_licenses

Daftar {i>string<i}; default-nya adalah []

packages

Daftar label; default adalah []

Kumpulan package_group konfigurasi harus diterapkan.

java_plugin

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

java_plugin menentukan plugin untuk compiler Java yang dijalankan oleh Bazel. Tujuan satu-satunya jenis plugin yang didukung adalah pemroses anotasi. java_library atau Aturan java_binary dapat menjalankan plugin dengan bergantung padanya melalui plugins . java_library juga dapat mengekspor plugin secara otomatis ke library yang secara langsung bergantung pada {i>cloud<i} 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; default adalah []

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

Stoples yang dibuat oleh aturan java_library yang tercantum di deps akan aktif 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 waktu kompilasi maupun classpath runtime.

srcs

Daftar label; default adalah []

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

File sumber jenis .java dikompilasi. Jika dibuat .java file biasanya disarankan untuk memasukkan nama aturan pembuatan di sini alih-alih nama file itu sendiri. Ini tidak hanya meningkatkan keterbacaan tetapi membuat aturan lebih tahan terhadap perubahan mendatang: jika aturan yang file yang berbeda di masa mendatang, Anda hanya perlu memperbaiki satu tempat: outs dari aturan pembuatan. Anda tidak boleh mencantumkan aturan pembuatan di deps karena tidak dioperasikan.

File sumber jenis .srcjar diekstrak dan dikompilasi. (Ini berguna jika Anda harus 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 .

File sumber jenis .properties diperlakukan sebagai resource.

Semua file lainnya akan diabaikan, selama ada setidaknya satu file jenis file yang dijelaskan di atas. Jika tidak, error akan muncul.

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

data

Daftar label; default adalah []

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

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

resources

Daftar label; default adalah []

Daftar file data untuk disertakan dalam jar Java.

Resource dapat berupa file sumber atau file yang dihasilkan.

Jika sudah ditentukan, resource akan dikelompokkan dalam stoples bersama dengan .class file yang dihasilkan oleh kompilasi. Lokasi resource di dalam dari file jar ditentukan oleh struktur proyek. Bazel pertama-tama mencari versi Maven tata letak direktori standar, (direktori "src" diikuti dengan cucu direktori "resources"). Jika bukan ditemukan, Bazel kemudian mencari direktori paling atas bernama "{i>java<i}" atau "javatests" (jadi, untuk misalnya, jika resource berada di <workspace root>/x/java/y/java/z, jalur resource akan menjadi y/java/z. Heuristik ini tidak dapat diabaikan, tetapi, atribut resource_strip_prefix dapat digunakan untuk menentukan direktori alternatif tertentu untuk file sumber daya.

add_exports

Daftar {i>string<i}; default-nya adalah []

Mengizinkan library ini mengakses module atau package yang diberikan.

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

add_opens

Daftar {i>string<i}; default-nya adalah []

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

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

bootclasspath

Label; default adalah None

API Terbatas, jangan digunakan
generates_api

Boolean; default-nya adalah False

Atribut ini menandai pemroses anotasi yang menghasilkan kode API.

Jika aturan menggunakan pemroses anotasi pembuatan API, aturan lainnya tergantung pada {i>router<i} itu dapat merujuk ke kode yang dihasilkan hanya jika tindakan kompilasi dijadwalkan setelah aturan pembuatan. Ini menginstruksikan Bazel untuk memperkenalkan batasan penjadwalan saat --java_header_compilation diaktifkan.

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

javabuilder_jvm_flags

Daftar {i>string<i}; default-nya adalah []

API Terbatas, jangan digunakan
javacopts

Daftar {i>string<i}; default-nya adalah []

Opsi compiler tambahan untuk library ini. Tunduk kepada substitusi "Buat variabel" dan Tokenisasi shell Bourne.

Opsi compiler ini diteruskan ke javac setelah opsi compiler global.

Boolean; default-nya adalah False

Apakah library ini hanya boleh digunakan untuk kompilasi, bukan saat runtime. Berguna jika library akan disediakan oleh lingkungan runtime selama eksekusi. Contoh dari library tersebut adalah IDE API untuk plugin IDE atau tools.jar untuk semuanya yang berjalan pada JDK standar.

Perlu diketahui bahwa neverlink = 1 tidak mencegah compiler agar tidak menyisipkan materi dari library ini ke target kompilasi yang bergantung padanya, seperti yang diizinkan oleh paket Spesifikasi Bahasa (mis., Konstanta static final dari String atau 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 semua versi mendatang JLS).

output_licenses

Daftar {i>string<i}; default-nya adalah []

plugins

Daftar label; default adalah []

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

String; default-nya adalah ""

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

Daftar label; default adalah []

File yang akan digunakan sebagai spesifikasi Proguard. Ini akan menjelaskan rangkaian spesifikasi yang akan digunakan oleh Proguard. Jika ditentukan, mereka akan ditambahkan ke target android_binary bergantung pada library ini. File yang disertakan di sini hanya boleh memiliki aturan idempoten, yaitu -dontnote, -dontwarning, mengasumsikan bahwa efek samping tersebut, dan aturan yang dimulai dengan {i>-keep<i}. Opsi lainnya hanya dapat muncul di proguard_specs android_binary, untuk memastikan penggabungan non-tautoologis.
resource_strip_prefix

String; default-nya adalah ""

Awalan jalur yang akan dihapus dari resource Java.

Jika ditentukan, awalan jalur ini akan dihapus dari setiap file dalam resources . Terjadi error jika file resource tidak berada di direktori ini. Jika tidak ditentukan (default), jalur file sumber daya ditentukan sesuai dengan sebagai paket Java dari file sumber. Misalnya, file sumber di stuff/java/foo/bar/a.txt akan berlokasi di foo/bar/a.txt.

java_runtime

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

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; default adalah []

Semua file dalam runtime.
default_cds

Label; default adalah None

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

Daftar label; default adalah []

File dalam runtime yang diperlukan untuk deployment hermetic.
hermetic_static_libs

Daftar label; default adalah []

Library yang terhubung secara statis dengan peluncur untuk deployment hermetic
java

Label; default adalah None

Jalur ke file java yang dapat dieksekusi.
java_home

String; default-nya adalah ""

Jalur ke root runtime. Tunduk kepada "Merek" variabel. Jika jalur ini absolut, aturan akan menunjukkan runtime Java non-hermetik dengan instance . Dalam hal ini, atribut srcs dan java harus kosong.
lib_ct_sym

Label; default 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 digunakan.
lib_modules

Label; default adalah None

File lib/modules diperlukan untuk deployment hermetic.
output_licenses

Daftar {i>string<i}; default-nya adalah []

version

{i>Integer<i} (Bilangan bulat): default-nya 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_javacopts, compatible_with, deprecation, deps_checker, distribs, exec_compatible_with, exec_properties, features, forcibly_disable_header_compilation, genclass, header_compiler, header_compiler_builtin_processors, header_compiler_direct, ijar, jacocorunner, java_runtime, javabuilder, javabuilder_data, javabuilder_jvm_opts, javac_supports_multiplex_workers, javac_supports_worker_cancellation, javac_supports_worker_multiplex_sandboxing, javac_supports_workers, javacopts, jspecify_implicit_deps, jspecify_javacopts, jspecify_packages, jspecify_processor, jspecify_processor_class, jspecify_stubs, jvm_opts, licenses, misc, oneversion, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, proguard_allowlister, reduced_classpath_incompatible_processors, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, toolchains, tools, turbine_data, turbine_jvm_opts, visibility, xlint)

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

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; default adalah []

Label alat yang tersedia untuk perluasan label di android_lint_jvm_opts.
android_lint_jvm_opts

Daftar {i>string<i}; default-nya adalah []

Daftar argumen untuk JVM saat memanggil Android Lint.
android_lint_opts

Daftar {i>string<i}; default-nya adalah []

Daftar argumen Android Lint.
android_lint_package_configuration

Daftar label; default adalah []

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

Label; default adalah None

Label runner Android Lint, jika ada.
bootclasspath

Daftar label; default adalah []

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

null; default-nya adalah {}

API internal, jangan digunakan.
deps_checker

Label; default adalah None

Label dari jar deploy ImportDepsChecker.
forcibly_disable_header_compilation

Boolean; default-nya adalah False

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

Label; default adalah None

Label jar deploy GenClass.
header_compiler

Label; default adalah None

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

Daftar {i>string<i}; default-nya adalah []

API internal, jangan digunakan.
header_compiler_direct

Label; default adalah None

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

Label; default adalah None

Label dari file ijar yang dapat dieksekusi.
jacocorunner

Label; default adalah None

Label jar deploy JacocoCoverageRunner.
java_runtime

Label; default adalah None

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

Label; default adalah None

Label jar deploy JavaBuilder.
javabuilder_data

Daftar label; default adalah []

Label data yang tersedia untuk label-perluasan di javabuilder_jvm_opts.
javabuilder_jvm_opts

Daftar {i>string<i}; default-nya adalah []

Daftar argumen untuk JVM saat memanggil JavaBuilder.
javac_supports_multiplex_workers

Boolean; default-nya adalah True

Benar jika JavaBuilder mendukung pengoperasian sebagai pekerja persisten multipleks, salah jika tidak.
javac_supports_worker_cancellation

Boolean; default-nya adalah True

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

Boolean; default-nya adalah False

Benar jika JavaBuilder mendukung pengoperasian sebagai pekerja persisten multipleks dengan sandbox, salah jika tidak.
javac_supports_workers

Boolean; default-nya adalah True

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

Daftar {i>string<i}; default-nya adalah []

Daftar argumen tambahan untuk compiler Java. Lihat compiler Java untuk mengetahui daftar lengkap kemungkinan flag compiler Java.
jspecify_implicit_deps

Label; default adalah None

Eksperimental, jangan digunakan.
jspecify_javacopts

Daftar {i>string<i}; default-nya adalah []

Eksperimental, jangan digunakan.
jspecify_packages

Daftar label; default adalah []

Eksperimental, jangan digunakan.
jspecify_processor

Label; default adalah None

Eksperimental, jangan digunakan.
jspecify_processor_class

String; default-nya adalah ""

Eksperimental, jangan digunakan.
jspecify_stubs

Daftar label; default adalah []

Eksperimental, jangan digunakan.
jvm_opts

Daftar {i>string<i}; default-nya adalah []

Daftar argumen untuk JVM saat memanggil compiler Java. Silakan lihat Java dokumentasi virtual machine untuk daftar lengkap tanda yang mungkin untuk opsi ini.
misc

Daftar {i>string<i}; default-nya adalah []

Tidak digunakan lagi: gunakan javacopts
oneversion

Label; default adalah None

Label biner penerapan satu versi.
oneversion_allowlist_for_tests

Label; default adalah None

Label daftar yang diizinkan satu versi untuk pengujian.
oneversion_whitelist

Label; default adalah None

Label daftar yang diizinkan satu versi.
package_configuration

Daftar label; default adalah []

Konfigurasi yang harus diterapkan ke grup paket yang ditentukan.
proguard_allowlister

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

Label daftar yang diizinkan Proguard.
reduced_classpath_incompatible_processors

Daftar {i>string<i}; default-nya adalah []

API internal, jangan digunakan.
singlejar

Label; default adalah None

Label jar deploy SingleJar.
source_version

String; default-nya adalah ""

Versi sumber Java (mis., '6' atau '7'). Ini menentukan set struktur kode diizinkan dalam kode sumber Java.
target_version

String; default-nya adalah ""

Versi target Java (mis., '6' atau '7'). Ini menentukan untuk runtime Java mana class harus dibangun.
timezone_data

Label; default adalah None

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

Daftar label; default adalah []

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

Daftar label; default adalah []

Label data yang tersedia untuk ekspansi label di turbine_jvm_opts.
turbine_jvm_opts

Daftar {i>string<i}; default-nya adalah []

Daftar argumen untuk JVM saat memanggil turbin.
xlint

Daftar {i>string<i}; default-nya adalah []

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