Quy tắc
- java_binary
- java_import
- java_library
- java_test
- java_package_configuration
- java_plugin
- java_runtime
- java_toolchain
java_binary
Xem nguồn quy tắcjava_binary(name, deps, srcs, data, resources, add_exports, add_opens, args, bootclasspath, 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, neverlink, output_licenses, plugins, resource_strip_prefix, restricted_to, runtime_deps, stamp, tags, target_compatible_with, testonly, toolchains, use_launcher, use_testrunner, visibility)
Tạo một tệp lưu trữ Java ("tệp jar"), cùng với một tập lệnh shell trình bao bọc có cùng tên với quy tắc.
Tập lệnh shell của trình bao bọc sử dụng một đường dẫn lớp bao gồm, trong số những thứ khác, một tệp jar cho mỗi thư viện mà tệp nhị phân phụ thuộc vào. Khi chạy tập lệnh shell trình bao bọc, mọi biến môi trường JAVABIN
không trống sẽ được ưu tiên hơn phiên bản được chỉ định thông qua cờ --java_runtime_version
của Bazel.
Tập lệnh trình bao bọc chấp nhận một số cờ duy nhất. Tham khảo //src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt
để biết danh sách các cờ có thể định cấu hình và biến môi trường mà trình bao bọc chấp nhận.
Mục tiêu đầu ra ngầm ẩn
name.jar
: Tệp lưu trữ Java, chứa các tệp lớp và tài nguyên khác tương ứng với các phần phụ thuộc trực tiếp của tệp nhị phân.name-src.jar
: Một tệp lưu trữ chứa các nguồn ("jar nguồn").name_deploy.jar
: Tệp lưu trữ Java phù hợp để triển khai (chỉ được tạo nếu được yêu cầu rõ ràng).Việc tạo mục tiêu
<name>_deploy.jar
cho quy tắc của bạn sẽ tạo một tệp jar độc lập có tệp kê khai cho phép chạy tệp đó bằng lệnhjava -jar
hoặc bằng tuỳ chọn--singlejar
của tập lệnh trình bao bọc. Bạn nên sử dụng tập lệnh trình bao bọc thay vìjava -jar
vì tập lệnh này cũng truyền cờ JVM và các tuỳ chọn để tải thư viện gốc.Tệp jar triển khai chứa tất cả các lớp mà trình tải lớp sẽ tìm thấy khi tìm kiếm đường dẫn lớp từ đầu đến cuối của tập lệnh trình bao bọc của tệp nhị phân. Tệp này cũng chứa các thư viện gốc cần thiết cho các phần phụ thuộc. Các tệp này được tự động tải vào JVM trong thời gian chạy.
Nếu mục tiêu của bạn chỉ định thuộc tính trình chạy, thì thay vì là tệp JAR thông thường, _deploy.jar sẽ là tệp nhị phân gốc. Tệp này sẽ chứa trình chạy cùng với mọi phần phụ thuộc gốc (C++) của quy tắc, tất cả đều được liên kết thành một tệp nhị phân tĩnh. Các byte của tệp jar thực tế sẽ được thêm vào tệp nhị phân gốc đó, tạo ra một blob nhị phân duy nhất chứa cả tệp thực thi và mã Java. Bạn có thể trực tiếp thực thi tệp jar thu được như cách bạn thực thi bất kỳ tệp nhị phân gốc nào.
name_deploy-src.jar
: Một tệp lưu trữ chứa các nguồn được thu thập từ tập hợp đóng bắc cầu của mục tiêu. Các tệp này sẽ khớp với các lớp trongdeploy.jar
, ngoại trừ trường hợp các tệp jar không có tệp jar nguồn khớp.
Bạn nên sử dụng tên của tệp nguồn là điểm truy cập chính của ứng dụng (trừ phần đuôi). Ví dụ: nếu điểm truy cập của bạn có tên là Main.java
, thì tên của bạn có thể là Main
.
Không được phép sử dụng thuộc tính deps
trong quy tắc java_binary
mà không có srcs
; quy tắc như vậy yêu cầu main_class
do runtime_deps
cung cấp.
Đoạn mã sau đây minh hoạ một lỗi thường gặp:
java_binary(
name = "DontDoThis",
srcs = [
...,
"GeneratedJavaFile.java"
, # a generated .java file
],
deps = [":generating_rule",
], # rule that generates that file
)
Thay vào đó, hãy làm như sau:
java_binary(
name = "DoThisInstead",
srcs = [
...,
":generating_rule",
],
)
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên duy nhất cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là deps tại phần Các thuộc tính thông thường do hầu hết các quy tắc bản dựng xác định.
|
srcs
|
Danh sách nhãn; mặc định là
Các tệp nguồn thuộc loại
Các tệp nguồn thuộc loại
Quy tắc: nếu quy tắc (thường là
Đối số này gần như luôn bắt buộc, ngoại trừ trường hợp thuộc tính |
data
|
Danh sách nhãn; mặc định là data tại Các thuộc tính thông thường do hầu hết các quy tắc bản dựng xác định.
|
resources
|
Danh sách nhãn; mặc định là Tài nguyên có thể là tệp nguồn hoặc tệp được tạo.
Nếu được chỉ định, các tài nguyên sẽ được đóng gói trong tệp jar cùng với các tệp |
add_exports
|
Danh sách chuỗi; mặc định là module hoặc package đã cho.
Điều này tương ứng với cờ javac và JVM --add-exports=. |
add_opens
|
Danh sách chuỗi; mặc định là module hoặc package đã cho.
Điều này tương ứng với cờ javac và JVM --add-opens=. |
bootclasspath
|
Nhãn; mặc định là |
classpath_resources
|
Danh sách nhãn; mặc định là
Danh sách các tài nguyên phải nằm ở gốc của cây java. Mục đích duy nhất của thuộc tính này là hỗ trợ các thư viện bên thứ ba yêu cầu tài nguyên của chúng phải được tìm thấy trên đường dẫn lớp chính xác là |
create_executable
|
Boolean; mặc định là java_single_jar .
|
deploy_env
|
Danh sách nhãn; mặc định là java_binary khác đại diện cho môi trường triển khai của tệp nhị phân này.
Đặt thuộc tính này khi tạo trình bổ trợ sẽ được tải bằng một java_binary khác.Việc đặt thuộc tính này sẽ loại trừ tất cả phần phụ thuộc khỏi đường dẫn lớp thời gian chạy (và tệp jar triển khai) của tệp nhị phân này được chia sẻ giữa tệp nhị phân này và các mục tiêu được chỉ định trong deploy_env .
|
deploy_manifest_lines
|
Danh sách chuỗi; mặc định là META-INF/manifest.mf được tạo cho mục tiêu *_deploy.jar . Nội dung của thuộc tính này không phải tuân theo quy tắc thay thế "Tạo biến".
|
javacopts
|
Danh sách chuỗi; mặc định là Các tuỳ chọn trình biên dịch này được truyền đến javac sau các tuỳ chọn trình biên dịch toàn cục. |
jvm_flags
|
Danh sách chuỗi; mặc định là Tập lệnh trình bao bọc cho tệp nhị phân Java bao gồm định nghĩa CLASSPATH (để tìm tất cả các tệp jar phụ thuộc) và gọi trình thông dịch Java phù hợp.
Dòng lệnh do tập lệnh trình bao bọc tạo ra bao gồm tên của lớp chính, theo sau là Lưu ý rằng thuộc tính này không ảnh hưởng đến đầu ra |
launcher
|
Nhãn; mặc định là bin/java thông thường đi kèm với JDK.
Mục tiêu phải là cc_binary . Bạn có thể chỉ định bất kỳ cc_binary nào triển khai
Java Invocation API làm giá trị cho thuộc tính này.
Theo mặc định, Bazel sẽ sử dụng trình chạy JDK thông thường (bin/java hoặc java.exe). Cờ Bazel Xin lưu ý rằng các phần phụ thuộc gốc (C++, SWIG, JNI) sẽ được tạo theo cách khác nhau tuỳ thuộc vào việc bạn đang sử dụng trình chạy JDK hay một trình chạy khác:
Khi sử dụng trình chạy nào khác ngoài trình chạy JDK mặc định, định dạng của đầu ra |
main_class
|
Chuỗi; mặc định là main() để sử dụng làm điểm truy cập.
Nếu một quy tắc sử dụng tuỳ chọn này, thì quy tắc đó không cần danh sách srcs=[...] .
Do đó, với thuộc tính này, bạn có thể tạo một tệp thực thi từ một thư viện Java đã chứa một hoặc nhiều phương thức main() .
Giá trị của thuộc tính này là tên lớp, chứ không phải tệp nguồn. Lớp phải có sẵn trong thời gian chạy: lớp này có thể được biên dịch theo quy tắc này (từ |
neverlink
|
Boolean; mặc định là |
plugins
|
Danh sách nhãn; mặc định là java_plugin được chỉ định trong thuộc tính này sẽ được chạy bất cứ khi nào quy tắc này được tạo. Thư viện cũng có thể kế thừa các trình bổ trợ từ các phần phụ thuộc sử dụng exported_plugins . Các tài nguyên do trình bổ trợ tạo sẽ được đưa vào tệp jar thu được của quy tắc này.
|
resource_strip_prefix
|
Chuỗi; mặc định là
Nếu được chỉ định, tiền tố đường dẫn này sẽ bị xoá khỏi mọi tệp trong thuộc tính |
runtime_deps
|
Danh sách nhãn; mặc định là deps thông thường, các tệp này sẽ xuất hiện trên đường dẫn lớp thời gian chạy, nhưng không giống như các tệp đó, không xuất hiện trên đường dẫn lớp thời gian biên dịch. Bạn chỉ nên liệt kê các phần phụ thuộc cần thiết tại thời gian chạy tại đây. Các công cụ phân tích phần phụ thuộc phải bỏ qua các mục tiêu xuất hiện trong cả runtime_deps và deps .
|
stamp
|
Số nguyên; mặc định là
Tệp nhị phân được đóng dấu không được tạo lại trừ khi các phần phụ thuộc của tệp đó thay đổi. |
use_launcher
|
Boolean; mặc định là Nếu bạn đặt thuộc tính này thành false, thuộc tính trình chạy và cờ |
use_testrunner
|
Boolean; mặc định là com.google.testing.junit.runner.BazelTestRunner ) làm điểm truy cập chính cho chương trình Java và cung cấp lớp kiểm thử cho trình chạy kiểm thử dưới dạng giá trị của thuộc tính hệ thống bazel.test_suite .
Bạn có thể sử dụng thuộc tính này để ghi đè hành vi mặc định, đó là sử dụng trình chạy kiểm thử cho các quy tắc java_test và không sử dụng cho các quy tắc java_binary . Bạn không nên làm việc này. Một cách sử dụng là dành cho các quy tắc AllTest được một quy tắc khác gọi (ví dụ: để thiết lập cơ sở dữ liệu trước khi chạy kiểm thử). Bạn phải khai báo quy tắc AllTest dưới dạng java_binary , nhưng vẫn phải sử dụng trình chạy kiểm thử làm điểm truy cập chính.
Bạn có thể ghi đè tên của lớp trình chạy kiểm thử bằng thuộc tính main_class .
|
java_import
Xem nguồn quy tắcjava_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)
Quy tắc này cho phép sử dụng các tệp .jar
được biên dịch trước làm thư viện cho các quy tắc java_library
và java_binary
.
Ví dụ
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",
],
)
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên duy nhất cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là |
data
|
Danh sách nhãn; mặc định là |
add_exports
|
Danh sách chuỗi; mặc định là module hoặc package đã cho.
Điều này tương ứng với cờ javac và JVM --add-exports=. |
add_opens
|
Danh sách chuỗi; mặc định là module hoặc package đã cho.
Điều này tương ứng với cờ javac và JVM --add-opens=. |
constraints
|
Danh sách chuỗi; mặc định là |
exports
|
Danh sách nhãn; mặc định là |
jars
|
Danh sách nhãn; bắt buộc Danh sách các tệp JAR được cung cấp cho các mục tiêu Java phụ thuộc vào mục tiêu này. |
neverlink
|
Boolean; mặc định là tools.jar cho mọi thứ chạy trên JDK tiêu chuẩn.
|
proguard_specs
|
Danh sách nhãn; mặc định là android_binary nào tuỳ thuộc vào thư viện này.
Các tệp có trong đây chỉ được có các quy tắc idempotent, cụ thể là -dontnote, -dontwarn, assumenosideeffects và các quy tắc bắt đầu bằng -keep. Các tuỳ chọn khác chỉ có thể xuất hiện trong proguard_specs của android_binary để đảm bảo việc hợp nhất không phải là tự động trùng lặp.
|
runtime_deps
|
Danh sách nhãn; mặc định là |
srcjar
|
Nhãn; mặc định là |
java_library
Xem nguồn quy tắcjava_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)
Quy tắc này biên dịch và liên kết các nguồn vào một tệp .jar
.
Đầu ra ngầm
libname.jar
: Tệp lưu trữ Java chứa các tệp lớp.libname-src.jar
: Một tệp lưu trữ chứa các nguồn ("jar nguồn").
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên duy nhất cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là deps tại phần Các thuộc tính thông thường do hầu hết các quy tắc bản dựng xác định.
Các tệp jar được tạo bằng quy tắc
Ngược lại, các mục tiêu trong thuộc tính |
srcs
|
Danh sách nhãn; mặc định là
Các tệp nguồn thuộc loại
Các tệp nguồn thuộc loại
Quy tắc: nếu quy tắc (thường là
Các tệp nguồn thuộc loại Tất cả các tệp khác đều bị bỏ qua, miễn là có ít nhất một tệp thuộc loại tệp được mô tả ở trên. Nếu không, lỗi sẽ được báo cáo.
Đối số này hầu như luôn bắt buộc, ngoại trừ trường hợp bạn chỉ định đối số |
data
|
Danh sách nhãn; mặc định là data tại phần Các thuộc tính thông thường do hầu hết các quy tắc bản dựng xác định.
Khi tạo |
resources
|
Danh sách nhãn; mặc định là Tài nguyên có thể là tệp nguồn hoặc tệp được tạo.
Nếu được chỉ định, các tài nguyên sẽ được đóng gói trong tệp jar cùng với các tệp |
add_exports
|
Danh sách chuỗi; mặc định là module hoặc package đã cho.
Điều này tương ứng với cờ javac và JVM --add-exports=. |
add_opens
|
Danh sách chuỗi; mặc định là module hoặc package đã cho.
Điều này tương ứng với cờ javac và JVM --add-opens=. |
bootclasspath
|
Nhãn; mặc định là |
exported_plugins
|
Danh sách nhãn; mặc định là java_plugin (ví dụ: trình xử lý chú thích) để xuất sang các thư viện trực tiếp phụ thuộc vào thư viện này.
Danh sách |
exports
|
Danh sách nhãn; mặc định là
Việc liệt kê các quy tắc ở đây sẽ cung cấp các quy tắc đó cho các quy tắc mẹ, như thể các quy tắc mẹ phụ thuộc rõ ràng vào các quy tắc này. Điều này không đúng với
Tóm tắt: quy tắc X có thể truy cập vào mã trong Y nếu có một đường dẫn phần phụ thuộc giữa chúng bắt đầu bằng một cạnh
Giả sử A phụ thuộc vào B và B phụ thuộc vào C. Trong trường hợp này, C là phần phụ thuộc bắc cầu của A, vì vậy, việc thay đổi nguồn của C và tạo lại A sẽ tạo lại mọi thứ một cách chính xác. Tuy nhiên, A sẽ không thể sử dụng các lớp trong C. Để cho phép điều đó, A phải khai báo C trong Tất cả quy tắc mẹ trực tiếp đều có thể đóng thư viện đã xuất. Hãy xem xét một ví dụ khác một chút: A phụ thuộc vào B, B phụ thuộc vào C và D, đồng thời xuất C nhưng không xuất D. Giờ đây, A có quyền truy cập vào C nhưng không có quyền truy cập vào D. Bây giờ, nếu C và D xuất một số thư viện, C' và D' tương ứng, thì A chỉ có thể truy cập vào C' nhưng không thể truy cập vào D'.
Lưu ý quan trọng: quy tắc đã xuất không phải là phần phụ thuộc thông thường. Tiếp tục với ví dụ trước, nếu B xuất C và muốn sử dụng C, thì B cũng phải liệt kê C trong |
javabuilder_jvm_flags
|
Danh sách chuỗi; mặc định là |
javacopts
|
Danh sách chuỗi; mặc định là Các tuỳ chọn trình biên dịch này được truyền đến javac sau các tuỳ chọn trình biên dịch toàn cục. |
neverlink
|
Boolean; mặc định là tools.jar cho mọi thứ chạy trên JDK tiêu chuẩn.
Xin lưu ý rằng Nếu thư viện thời gian chạy khác với thư viện biên dịch, thì bạn phải đảm bảo rằng thư viện thời gian chạy chỉ khác ở những nơi mà JLS cấm trình biên dịch cùng dòng (và điều đó phải đúng cho tất cả các phiên bản JLS trong tương lai). |
plugins
|
Danh sách nhãn; mặc định là java_plugin được chỉ định trong thuộc tính này sẽ được chạy bất cứ khi nào quy tắc này được tạo. Thư viện cũng có thể kế thừa các trình bổ trợ từ các phần phụ thuộc sử dụng exported_plugins . Các tài nguyên do trình bổ trợ tạo sẽ được đưa vào tệp jar thu được của quy tắc này.
|
proguard_specs
|
Danh sách nhãn; mặc định là android_binary nào tuỳ thuộc vào thư viện này.
Các tệp có trong đây chỉ được có các quy tắc idempotent, cụ thể là -dontnote, -dontwarn, assumenosideeffects và các quy tắc bắt đầu bằng -keep. Các tuỳ chọn khác chỉ có thể xuất hiện trong proguard_specs của android_binary để đảm bảo việc hợp nhất không phải là tự động trùng lặp.
|
resource_strip_prefix
|
Chuỗi; mặc định là
Nếu được chỉ định, tiền tố đường dẫn này sẽ bị xoá khỏi mọi tệp trong thuộc tính |
runtime_deps
|
Danh sách nhãn; mặc định là deps thông thường, các tệp này sẽ xuất hiện trên đường dẫn lớp thời gian chạy, nhưng không giống như các tệp đó, không xuất hiện trên đường dẫn lớp thời gian biên dịch. Bạn chỉ nên liệt kê các phần phụ thuộc cần thiết tại thời gian chạy tại đây. Các công cụ phân tích phần phụ thuộc phải bỏ qua các mục tiêu xuất hiện trong cả runtime_deps và deps .
|
java_test
Xem nguồn quy tắcjava_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)
Quy tắc java_test()
biên dịch một chương trình kiểm thử Java. Kiểm thử là một trình bao bọc tệp nhị phân xung quanh mã kiểm thử. Phương thức chính của trình chạy kiểm thử được gọi thay vì lớp chính đang được biên dịch.
Mục tiêu đầu ra ngầm ẩn
name.jar
: Tệp lưu trữ Java.name_deploy.jar
: Tệp lưu trữ Java phù hợp để triển khai. (Chỉ được tạo nếu được yêu cầu rõ ràng.) Hãy xem nội dung mô tả về đầu raname_deploy.jar
từ java_binary để biết thêm chi tiết.
Xem phần về đối số java_binary()
. Quy tắc này cũng hỗ trợ tất cả thuộc tính phổ biến cho tất cả quy tắc kiểm thử (*_test).
Ví dụ
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",
],
)
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên duy nhất cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là deps tại phần Các thuộc tính thông thường do hầu hết các quy tắc bản dựng xác định.
|
srcs
|
Danh sách nhãn; mặc định là
Các tệp nguồn thuộc loại
Các tệp nguồn thuộc loại
Quy tắc: nếu quy tắc (thường là
Đối số này gần như luôn bắt buộc, ngoại trừ trường hợp thuộc tính |
data
|
Danh sách nhãn; mặc định là data tại Các thuộc tính thông thường do hầu hết các quy tắc bản dựng xác định.
|
resources
|
Danh sách nhãn; mặc định là Tài nguyên có thể là tệp nguồn hoặc tệp được tạo.
Nếu được chỉ định, các tài nguyên sẽ được đóng gói trong tệp jar cùng với các tệp |
add_exports
|
Danh sách chuỗi; mặc định là module hoặc package đã cho.
Điều này tương ứng với cờ javac và JVM --add-exports=. |
add_opens
|
Danh sách chuỗi; mặc định là module hoặc package đã cho.
Điều này tương ứng với cờ javac và JVM --add-opens=. |
bootclasspath
|
Nhãn; mặc định là |
classpath_resources
|
Danh sách nhãn; mặc định là
Danh sách các tài nguyên phải nằm ở gốc của cây java. Mục đích duy nhất của thuộc tính này là hỗ trợ các thư viện bên thứ ba yêu cầu tài nguyên của chúng phải được tìm thấy trên đường dẫn lớp chính xác là |
create_executable
|
Boolean; mặc định là java_single_jar .
|
deploy_manifest_lines
|
Danh sách chuỗi; mặc định là META-INF/manifest.mf được tạo cho mục tiêu *_deploy.jar . Nội dung của thuộc tính này không phải tuân theo quy tắc thay thế "Tạo biến".
|
javacopts
|
Danh sách chuỗi; mặc định là Các tuỳ chọn trình biên dịch này được truyền đến javac sau các tuỳ chọn trình biên dịch toàn cục. |
jvm_flags
|
Danh sách chuỗi; mặc định là Tập lệnh trình bao bọc cho tệp nhị phân Java bao gồm định nghĩa CLASSPATH (để tìm tất cả các tệp jar phụ thuộc) và gọi trình thông dịch Java phù hợp.
Dòng lệnh do tập lệnh trình bao bọc tạo ra bao gồm tên của lớp chính, theo sau là Lưu ý rằng thuộc tính này không ảnh hưởng đến đầu ra |
launcher
|
Nhãn; mặc định là bin/java thông thường đi kèm với JDK.
Mục tiêu phải là cc_binary . Bạn có thể chỉ định bất kỳ cc_binary nào triển khai
Java Invocation API làm giá trị cho thuộc tính này.
Theo mặc định, Bazel sẽ sử dụng trình chạy JDK thông thường (bin/java hoặc java.exe). Cờ Bazel Xin lưu ý rằng các phần phụ thuộc gốc (C++, SWIG, JNI) sẽ được tạo theo cách khác nhau tuỳ thuộc vào việc bạn đang sử dụng trình chạy JDK hay một trình chạy khác:
Khi sử dụng trình chạy nào khác ngoài trình chạy JDK mặc định, định dạng của đầu ra |
main_class
|
Chuỗi; mặc định là main() để sử dụng làm điểm truy cập.
Nếu một quy tắc sử dụng tuỳ chọn này, thì quy tắc đó không cần danh sách srcs=[...] .
Do đó, với thuộc tính này, bạn có thể tạo một tệp thực thi từ một thư viện Java đã chứa một hoặc nhiều phương thức main() .
Giá trị của thuộc tính này là tên lớp, chứ không phải tệp nguồn. Lớp phải có sẵn trong thời gian chạy: lớp này có thể được biên dịch theo quy tắc này (từ |
neverlink
|
Boolean; mặc định là |
plugins
|
Danh sách nhãn; mặc định là java_plugin được chỉ định trong thuộc tính này sẽ được chạy bất cứ khi nào quy tắc này được tạo. Thư viện cũng có thể kế thừa các trình bổ trợ từ các phần phụ thuộc sử dụng exported_plugins . Các tài nguyên do trình bổ trợ tạo sẽ được đưa vào tệp jar thu được của quy tắc này.
|
resource_strip_prefix
|
Chuỗi; mặc định là
Nếu được chỉ định, tiền tố đường dẫn này sẽ bị xoá khỏi mọi tệp trong thuộc tính |
runtime_deps
|
Danh sách nhãn; mặc định là deps thông thường, các tệp này sẽ xuất hiện trên đường dẫn lớp thời gian chạy, nhưng không giống như các tệp đó, không xuất hiện trên đường dẫn lớp thời gian biên dịch. Bạn chỉ nên liệt kê các phần phụ thuộc cần thiết tại thời gian chạy tại đây. Các công cụ phân tích phần phụ thuộc phải bỏ qua các mục tiêu xuất hiện trong cả runtime_deps và deps .
|
stamp
|
Số nguyên; mặc định là
Tệp nhị phân được đóng dấu không được tạo lại trừ khi các phần phụ thuộc của tệp đó thay đổi. |
test_class
|
Chuỗi; mặc định là
Theo mặc định, nếu không xác định đối số này, chế độ cũ sẽ được sử dụng và các đối số kiểm thử sẽ được sử dụng thay thế. Đặt cờ
Thuộc tính này chỉ định tên của một lớp Java sẽ được chạy bằng quy trình kiểm thử này. Bạn hiếm khi cần thiết lập giá trị này. Nếu bạn bỏ qua đối số này, hệ thống sẽ suy luận đối số này bằng cách sử dụng
Đối với JUnit3, lớp kiểm thử cần phải là lớp con của
Thuộc tính này cho phép một số quy tắc |
use_launcher
|
Boolean; mặc định là Nếu bạn đặt thuộc tính này thành false, thuộc tính trình chạy và cờ |
use_testrunner
|
Boolean; mặc định là com.google.testing.junit.runner.BazelTestRunner ) làm điểm truy cập chính cho chương trình Java và cung cấp lớp kiểm thử cho trình chạy kiểm thử dưới dạng giá trị của thuộc tính hệ thống bazel.test_suite .
Bạn có thể sử dụng thuộc tính này để ghi đè hành vi mặc định, đó là sử dụng trình chạy kiểm thử cho các quy tắc java_test và không sử dụng cho các quy tắc java_binary . Bạn không nên làm việc này. Một cách sử dụng là dành cho các quy tắc AllTest được một quy tắc khác gọi (ví dụ: để thiết lập cơ sở dữ liệu trước khi chạy kiểm thử). Bạn phải khai báo quy tắc AllTest dưới dạng java_binary , nhưng vẫn phải sử dụng trình chạy kiểm thử làm điểm truy cập chính.
Bạn có thể ghi đè tên của lớp trình chạy kiểm thử bằng thuộc tính main_class .
|
java_package_configuration
Xem nguồn quy tắcjava_package_configuration(name, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, javacopts, output_licenses, packages, restricted_to, system, tags, target_compatible_with, testonly, toolchains, visibility)
Cấu hình để áp dụng cho một nhóm gói.
Bạn có thể thêm cấu hình vào java_toolchain.javacopts
.
Ví dụ:
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",
]
)
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên duy nhất cho mục tiêu này. |
data
|
Danh sách nhãn; mặc định là |
javacopts
|
Danh sách chuỗi; mặc định là |
output_licenses
|
Danh sách chuỗi; mặc định là |
packages
|
Danh sách nhãn; mặc định là package_group mà cấu hình sẽ được áp dụng.
|
system
|
Nhãn; mặc định là |
java_plugin
Xem nguồn quy tắcjava_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
xác định các trình bổ trợ cho trình biên dịch Java do Bazel chạy. Loại trình bổ trợ duy nhất được hỗ trợ là trình xử lý chú thích. Quy tắc java_library
hoặc java_binary
có thể chạy các trình bổ trợ bằng cách phụ thuộc vào các trình bổ trợ đó thông qua thuộc tính plugins
. java_library
cũng có thể tự động xuất các trình bổ trợ sang các thư viện phụ thuộc trực tiếp vào trình bổ trợ đó bằng cách sử dụng exported_plugins
.
Mục tiêu đầu ra ngầm ẩn
libname.jar
: Tệp lưu trữ Java.
Các đối số giống hệt với java_library
, ngoại trừ việc thêm đối số processor_class
.
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên duy nhất cho mục tiêu này. |
deps
|
Danh sách nhãn; mặc định là deps tại phần Các thuộc tính thông thường do hầu hết các quy tắc bản dựng xác định.
Các tệp jar được tạo bằng quy tắc
Ngược lại, các mục tiêu trong thuộc tính |
srcs
|
Danh sách nhãn; mặc định là
Các tệp nguồn thuộc loại
Các tệp nguồn thuộc loại
Quy tắc: nếu quy tắc (thường là
Các tệp nguồn thuộc loại Tất cả các tệp khác đều bị bỏ qua, miễn là có ít nhất một tệp thuộc loại tệp được mô tả ở trên. Nếu không, lỗi sẽ được báo cáo.
Đối số này hầu như luôn bắt buộc, ngoại trừ trường hợp bạn chỉ định đối số |
data
|
Danh sách nhãn; mặc định là data tại phần Các thuộc tính thông thường do hầu hết các quy tắc bản dựng xác định.
Khi tạo |
resources
|
Danh sách nhãn; mặc định là Tài nguyên có thể là tệp nguồn hoặc tệp được tạo.
Nếu được chỉ định, các tài nguyên sẽ được đóng gói trong tệp jar cùng với các tệp |
add_exports
|
Danh sách chuỗi; mặc định là module hoặc package đã cho.
Điều này tương ứng với cờ javac và JVM --add-exports=. |
add_opens
|
Danh sách chuỗi; mặc định là module hoặc package đã cho.
Điều này tương ứng với cờ javac và JVM --add-opens=. |
bootclasspath
|
Nhãn; mặc định là |
generates_api
|
Boolean; mặc định là Nếu một quy tắc sử dụng trình xử lý chú thích tạo API, thì các quy tắc khác phụ thuộc vào quy tắc đó chỉ có thể tham chiếu đến mã được tạo nếu các thao tác biên dịch của chúng được lên lịch sau quy tắc tạo. Thuộc tính này hướng dẫn Bazel đưa ra các quy tắc ràng buộc về lịch biểu khi bật --java_header_compilation. CẢNH BÁO: Thuộc tính này ảnh hưởng đến hiệu suất của bản dựng, chỉ sử dụng thuộc tính này nếu cần. |
javabuilder_jvm_flags
|
Danh sách chuỗi; mặc định là |
javacopts
|
Danh sách chuỗi; mặc định là Các tuỳ chọn trình biên dịch này được truyền đến javac sau các tuỳ chọn trình biên dịch toàn cục. |
neverlink
|
Boolean; mặc định là tools.jar cho mọi thứ chạy trên JDK tiêu chuẩn.
Xin lưu ý rằng Nếu thư viện thời gian chạy khác với thư viện biên dịch, thì bạn phải đảm bảo rằng thư viện thời gian chạy chỉ khác ở những nơi mà JLS cấm trình biên dịch cùng dòng (và điều đó phải đúng cho tất cả các phiên bản JLS trong tương lai). |
output_licenses
|
Danh sách chuỗi; mặc định là |
plugins
|
Danh sách nhãn; mặc định là java_plugin được chỉ định trong thuộc tính này sẽ được chạy bất cứ khi nào quy tắc này được tạo. Thư viện cũng có thể kế thừa các trình bổ trợ từ các phần phụ thuộc sử dụng exported_plugins . Các tài nguyên do trình bổ trợ tạo sẽ được đưa vào tệp jar thu được của quy tắc này.
|
processor_class
|
Chuỗi; mặc định là |
proguard_specs
|
Danh sách nhãn; mặc định là android_binary nào tuỳ thuộc vào thư viện này.
Các tệp có trong đây chỉ được có các quy tắc idempotent, cụ thể là -dontnote, -dontwarn, assumenosideeffects và các quy tắc bắt đầu bằng -keep. Các tuỳ chọn khác chỉ có thể xuất hiện trong proguard_specs của android_binary để đảm bảo việc hợp nhất không phải là tự động trùng lặp.
|
resource_strip_prefix
|
Chuỗi; mặc định là
Nếu được chỉ định, tiền tố đường dẫn này sẽ bị xoá khỏi mọi tệp trong thuộc tính |
java_runtime
Xem nguồn quy tắcjava_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)
Chỉ định cấu hình cho môi trường thời gian chạy Java.
Ví dụ:
java_runtime(
name = "jdk-9-ea+153",
srcs = glob(["jdk9-ea+153/**"]),
java_home = "jdk9-ea+153",
)
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên duy nhất cho mục tiêu này. |
srcs
|
Danh sách nhãn; mặc định là |
default_cds
|
Nhãn; mặc định là java_runtime kín. Khi chế độ kín được bật cho mục tiêu java_binary , CDS mặc định java_runtime sẽ được đóng gói trong tệp JAR triển khai kín.
|
hermetic_srcs
|
Danh sách nhãn; mặc định là |
hermetic_static_libs
|
Danh sách nhãn; mặc định là |
java
|
Nhãn; mặc định là |
java_home
|
Chuỗi; mặc định là srcs và java phải để trống.
|
lib_ct_sym
|
Nhãn; mặc định là --release . Nếu bạn không chỉ định và có đúng một tệp trong srcs có đường dẫn kết thúc bằng /lib/ct.sym , thì tệp đó sẽ được sử dụng.
|
lib_modules
|
Nhãn; mặc định là |
output_licenses
|
Danh sách chuỗi; mặc định là |
version
|
Số nguyên; mặc định là Runtime.version().feature() trả về.
|
java_toolchain
Xem nguồn quy tắcjava_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, 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)
Chỉ định cấu hình cho trình biên dịch Java. Bạn có thể thay đổi chuỗi công cụ sẽ sử dụng thông qua đối số --java_toolchain. Thông thường, bạn không nên viết những loại quy tắc đó trừ phi bạn muốn điều chỉnh trình biên dịch Java.
Ví dụ
Ví dụ đơn giản:
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",
)
Đối số
Thuộc tính | |
---|---|
name |
Tên; bắt buộc Tên duy nhất cho mục tiêu này. |
android_lint_data
|
Danh sách nhãn; mặc định là |
android_lint_jvm_opts
|
Danh sách chuỗi; mặc định là |
android_lint_opts
|
Danh sách chuỗi; mặc định là |
android_lint_package_configuration
|
Danh sách nhãn; mặc định là |
android_lint_runner
|
Nhãn; mặc định là |
bootclasspath
|
Danh sách nhãn; mặc định là |
compatible_javacopts
|
rỗng; mặc định là |
deps_checker
|
Nhãn; mặc định là |
forcibly_disable_header_compilation
|
Boolean; mặc định là |
genclass
|
Nhãn; mặc định là |
header_compiler
|
Nhãn; mặc định là |
header_compiler_builtin_processors
|
Danh sách chuỗi; mặc định là |
header_compiler_direct
|
Nhãn; mặc định là Công cụ này không hỗ trợ tính năng xử lý chú thích. |
ijar
|
Nhãn; mặc định là |
jacocorunner
|
Nhãn; mặc định là |
java_runtime
|
Nhãn; mặc định là |
javabuilder
|
Nhãn; mặc định là |
javabuilder_data
|
Danh sách nhãn; mặc định là |
javabuilder_jvm_opts
|
Danh sách chuỗi; mặc định là |
javac_supports_multiplex_workers
|
Boolean; mặc định là |
javac_supports_worker_cancellation
|
Boolean; mặc định là |
javac_supports_worker_multiplex_sandboxing
|
Boolean; mặc định là |
javac_supports_workers
|
Boolean; mặc định là |
javacopts
|
Danh sách chuỗi; mặc định là |
jspecify_implicit_deps
|
Nhãn; mặc định là |
jspecify_javacopts
|
Danh sách chuỗi; mặc định là |
jspecify_packages
|
Danh sách nhãn; mặc định là |
jspecify_processor
|
Nhãn; mặc định là |
jspecify_processor_class
|
Chuỗi; mặc định là |
jspecify_stubs
|
Danh sách nhãn; mặc định là |
jvm_opts
|
Danh sách chuỗi; mặc định là |
misc
|
Danh sách chuỗi; mặc định là |
oneversion
|
Nhãn; mặc định là |
oneversion_allowlist
|
Nhãn; mặc định là |
oneversion_allowlist_for_tests
|
Nhãn; mặc định là |
oneversion_whitelist
|
Nhãn; mặc định là |
package_configuration
|
Danh sách nhãn; mặc định là |
proguard_allowlister
|
Nhãn; mặc định là |
reduced_classpath_incompatible_processors
|
Danh sách chuỗi; mặc định là |
singlejar
|
Nhãn; mặc định là |
source_version
|
Chuỗi; mặc định là |
target_version
|
Chuỗi; mặc định là |
timezone_data
|
Nhãn; mặc định là |
tools
|
Danh sách nhãn; mặc định là |
turbine_data
|
Danh sách nhãn; mặc định là |
turbine_jvm_opts
|
Danh sách chuỗi; mặc định là |
xlint
|
Danh sách chuỗi; mặc định là |