Quy tắc
- java_binary
- java_import
- java_library
- java_lite_proto_library
- java_proto_library
- java_test
- java_package_configuration
- java_plugin
- java_runtime
- java_toolchain
java_binary
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)
Tạo kho lưu trữ Java ("tệp jar"), cùng với 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 classpath, bao gồm một tệp jar cho mỗi thư viện mà tệp nhị phân phụ thuộc vào, cùng với các tệp khác.
Tập lệnh trình bao bọc chấp nhận một số cờ duy nhất. Hãy 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 được trình bao bọc chấp nhận.
Mục tiêu đầu ra ngầm ẩn
name.jar
: Một kho lưu trữ Java, chứa các tệp lớp và các 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 bản lưu trữ chứa các nguồn ("jar nguồn").name_deploy.jar
: Một 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 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 bao bọc. Tập lệnh bao bọc sẽ được ưu tiên hơnjava -jar
vì tập lệnh này cũng truyền các cờ JVM và các tuỳ chọn để tải thư viện gốc.Tệp triển khai chứa tất cả các lớp mà trình tải lớp có thể tìm thấy sẽ tìm thấy classpath đã tìm kiếm đường dẫn lớp từ tập lệnh trình bao bọc của tệp nhị phân từ đầu đến cuối. 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 trình xử lý này sẽ đượ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 một thuộc tính trình chạy, thì thay vì là tệp JAR thông thường, _deploy.jar sẽ là một 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 nối 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ể thực thi trực tiếp 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
: Tệp lưu trữ chứa các nguồn được thu thập từ thời điểm đóng bắc cầu mục tiêu. Các lớ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 nguồn nào khớp.
Quy tắc java_binary
không cho phép sử dụng thuộc tính deps
nếu không có srcs
. Quy tắc này yêu cầu phải có 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 )
Hãy làm như sau:
java_binary( name = "DoThisInstead", srcs = [ ..., ":generating_rule", ], )
Đối số
Thuộc tính | |
---|---|
name |
Tên dành riêng cho mục tiêu này. Bạn nên 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 mở rộng). 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 .
|
deps
|
deps tại phần Các thuộc tính thông thường được xác định theo hầu hết quy tắc tạo.
|
srcs
|
Các tệp nguồn thuộc loại
Tệp nguồn loại
Quy tắc: nếu quy tắc (thường là
Đối số này hầu như luôn bắt buộc, ngoại trừ trường hợp thuộc tính |
resources
|
Nếu bạn chỉ định tài nguyên, các tài nguyên này sẽ được nhóm trong tệp jar cùng với các tệp Tài nguyên có thể là tệp nguồn hoặc tệp được tạo. |
classpath_resources
|
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ợ thư viện bên thứ ba yêu cầu tài nguyên của các thư viện này phải được tìm thấy trên classpath chính xác là |
create_executable
|
launcher hoặc main_class .
|
deploy_env
|
java_binary khác đại diện cho môi trường triển khai cho tệp nhị phân này.
Đặt thuộc tính này khi tạo một trình bổ trợ mà java_binary khác sẽ tải.Việc đặt thuộc tính này sẽ loại trừ mọi phần phụ thuộc khỏi đường dẫn lớp thời gian chạy (và vùng 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
|
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 thay thế "Tạo biến".
|
javacopts
|
Các tuỳ chọn trình biên dịch này được chuyển đến javac sau các tuỳ chọn trình biên dịch chung. |
jvm_flags
|
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 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 sẽ chứa tên của lớp chính, theo sau là Xin lưu ý rằng thuộc tính này không ảnh hưởng đến dữ liệu đầu ra của |
launcher
|
bin/java thông thường có trong JDK.
Mục tiêu phải là cc_binary . Bạn có thể chỉ định bất kỳ cc_binary triển khai
API gọi Java nào 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 trình chạy khác:
Khi bạn sử dụng bất kỳ 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
|
main() để 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 có danh sách srcs=[...] .
Do đó, với thuộc tính này, người dùng có thể tạo tệp thực thi 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 đó có thể được biên dịch bởi quy tắc này (từ |
plugins
|
java_plugin được chỉ định trong thuộc tính này sẽ 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 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 ra sẽ được đưa vào tệp chứa quy tắc này.
|
resource_jars
|
|
resource_strip_prefix
|
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
|
deps thông thường, những lớ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ư những lớp này, sẽ không xuất hiện trên đường dẫn lớp thời gian biên dịch. Các phần phụ thuộc chỉ cần thiết trong thời gian chạy sẽ được liệt kê ở đây. Các công cụ phân tích phần phụ thuộc nên bỏ qua các mục tiêu xuất hiện trong cả runtime_deps và deps .
|
stamp
|
Tệp nhị phân được đóng dấu không được tạo lại trừ phi phần phụ thuộc của chúng thay đổi. |
use_launcher
|
Nếu bạn đặt thuộc tính này thành false, thì thuộc tính trình chạy và cờ |
use_testrunner
|
com.google.testing.junit.runner.BazelTestRunner ) làm điểm truy cập chính cho một chương trình Java và cung cấp lớp kiểm thử này cho trình chạy kiểm thử dưới dạng một giá trị của thuộc tính hệ thống bazel.test_suite .
Bạn có thể sử dụng tính năng này để ghi đè hành vi mặc định (sử dụng trình chạy kiểm thử cho các quy tắc java_test ) và không sử dụng hành vi này cho các quy tắc java_binary . Ít có khả năng bạn sẽ muốn làm việc này. Một trường hợp sử dụng là đối với các quy tắc AllTest được gọi bởi một quy tắc khác (chẳng hạn như để 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 là java_binary , nhưng vẫn nên 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 một lớp chạy kiểm thử bằng thuộc tính main_class .
|
java_import
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)
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 dành riêng cho mục tiêu này. |
deps
|
|
constraints
|
|
exports
|
|
jars
|
|
neverlink
|
tools.jar cho mọi dịch vụ chạy trên JDK tiêu chuẩn.
|
proguard_specs
|
android_binary nào tuỳ thuộc vào thư viện này.
Các tệp trong thư mục này chỉ được có các quy tắc không thay đổi giá trị (idempotent) cụ thể là -dontnote, -dontwarn,remembernosideEffect 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 tự động.
|
runtime_deps
|
|
srcjar
|
|
java_library
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)
Quy tắc này biên dịch và liên kết các nguồn thành một tệp .jar
.
Mục tiêu đầu ra ngầm ẩn
libname.jar
: Một bản lưu trữ Java chứa các tệp lớp.libname-src.jar
: Một bản lưu trữ chứa các nguồn ("jar nguồn").
Đối số
Thuộc tính | |
---|---|
name |
Tên dành riêng cho mục tiêu này. |
deps
|
deps tại phần Các thuộc tính thông thường được xác định theo hầu hết quy tắc tạo.
Các tệp lọ do quy tắc
Ngược lại, các mục tiêu trong thuộc tính |
srcs
|
Các tệp nguồn thuộc loại
Tệp nguồn loại
Quy tắc: nếu quy tắc (thường là
Đối số này hầu như luôn bắt buộc, ngoại trừ trường hợp thuộc tính |
data
|
data tại phần Các thuộc tính thông thường được xác định theo hầu hết quy tắc tạo.
Khi tạo |
resources
|
Nếu bạn chỉ định tài nguyên, các tài nguyên này sẽ được nhóm trong tệp jar cùng với các tệp Tài nguyên có thể là tệp nguồn hoặc tệp được tạo. |
exported_plugins
|
java_plugin (ví dụ: trình xử lý chú giải) cần xuất sang các thư viện phụ thuộc trực tiếp vào thư viện này.
Danh sách |
exports
|
Các quy tắc liệt kê ở đây sẽ cung cấp các quy tắc đó cho quy tắc gốc, 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 đối với
Tóm tắt: một quy tắc X có thể truy cập mã trong Y nếu tồn tại một đường dẫn phần phụ thuộc bắt đầu bằng 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 gốc đều có thể đóng các thư viện đã xuất. Hãy lấy một ví dụ hơi khác: A phụ thuộc vào B, B phụ thuộc vào C và D, đồng thời cũng xuất C nhưng không phụ thuộc vào D. Hiện tại, 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' chứ 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. Tuân theo ví dụ trước, nếu B xuất C và muốn sử dụng cả C, thì B cũng phải liệt kê tệp đó trong |
javacopts
|
Các tuỳ chọn trình biên dịch này được chuyển đến javac sau các tuỳ chọn trình biên dịch chung. |
neverlink
|
tools.jar cho mọi dịch vụ 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 đó chỉ khác ở những vị trí mà JLS cấm trình biên dịch cùng dòng (và phải áp dụng cho mọi phiên bản JLS trong tương lai). |
plugins
|
java_plugin được chỉ định trong thuộc tính này sẽ 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 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 ra sẽ được đưa vào tệp chứa quy tắc này.
|
proguard_specs
|
android_binary nào tuỳ thuộc vào thư viện này.
Các tệp trong thư mục này chỉ được có các quy tắc không thay đổi giá trị (idempotent) cụ thể là -dontnote, -dontwarn,remembernosideEffect 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 tự động.
|
resource_jars
|
|
resource_strip_prefix
|
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
|
deps thông thường, những lớ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ư những lớp này, sẽ không xuất hiện trên đường dẫn lớp thời gian biên dịch. Các phần phụ thuộc chỉ cần thiết trong thời gian chạy sẽ được liệt kê ở đây. Các công cụ phân tích phần phụ thuộc nên bỏ qua các mục tiêu xuất hiện trong cả runtime_deps và deps .
|
java_lite_proto_library
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
tạo mã Java từ các tệp .proto
.
deps
phải trỏ đến quy tắc proto_library
.
Ví dụ:
java_library( name = "lib", deps = [":foo"], ) java_lite_proto_library( name = "foo", deps = [":bar"], ) proto_library( name = "bar", )
Đối số
Thuộc tính | |
---|---|
name |
Tên dành riêng cho mục tiêu này. |
deps
|
proto_library để tạo mã Java.
|
java_proto_library
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
tạo mã Java từ các tệp .proto
.
deps
phải trỏ đến quy tắc proto_library
.
Ví dụ:
java_library( name = "lib", deps = [":foo_java_proto"], ) java_proto_library( name = "foo_java_proto", deps = [":foo_proto"], ) proto_library( name = "foo_proto", )
Đối số
Thuộc tính | |
---|---|
name |
Tên dành riêng cho mục tiêu này. |
deps
|
proto_library để tạo mã Java.
|
java_test
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)
Quy tắc java_test()
biên dịch kiểm thử Java. Kiểm thử là một trình bao bọc 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 đượ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 khi có yêu cầu rõ ràng.) Hãy xem nội dung mô tả về đầu raname_deploy.jar
của java_binary để biết thêm thông tin chi tiết.
Xem phần về đối số java_binary(). Quy tắc này cũng hỗ trợ tất cả các thuộc tính chung cho mọi 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 dành riêng cho mục tiêu này. |
deps
|
deps tại phần Các thuộc tính thông thường được xác định theo hầu hết quy tắc tạo.
|
srcs
|
Các tệp nguồn thuộc loại
Tệp nguồn loại
Quy tắc: nếu quy tắc (thường là
Đối số này hầu như luôn bắt buộc, ngoại trừ trường hợp thuộc tính |
resources
|
Nếu bạn chỉ định tài nguyên, các tài nguyên này sẽ được nhóm trong tệp jar cùng với các tệp Tài nguyên có thể là tệp nguồn hoặc tệp được tạo. |
classpath_resources
|
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ợ thư viện bên thứ ba yêu cầu tài nguyên của các thư viện này phải được tìm thấy trên classpath chính xác là |
create_executable
|
launcher hoặc main_class .
|
deploy_manifest_lines
|
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 thay thế "Tạo biến".
|
javacopts
|
Các tuỳ chọn trình biên dịch này được chuyển đến javac sau các tuỳ chọn trình biên dịch chung. |
jvm_flags
|
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 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 sẽ chứa tên của lớp chính, theo sau là Xin lưu ý rằng thuộc tính này không ảnh hưởng đến dữ liệu đầu ra của |
launcher
|
bin/java thông thường có trong JDK.
Mục tiêu phải là cc_binary . Bạn có thể chỉ định bất kỳ cc_binary triển khai
API gọi Java nào 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 trình chạy khác:
Khi bạn sử dụng bất kỳ 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
|
main() để 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 có danh sách srcs=[...] .
Do đó, với thuộc tính này, người dùng có thể tạo tệp thực thi 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 đó có thể được biên dịch bởi quy tắc này (từ |
plugins
|
java_plugin được chỉ định trong thuộc tính này sẽ 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 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 ra sẽ được đưa vào tệp chứa quy tắc này.
|
resource_jars
|
|
resource_strip_prefix
|
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
|
deps thông thường, những lớ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ư những lớp này, sẽ không xuất hiện trên đường dẫn lớp thời gian biên dịch. Các phần phụ thuộc chỉ cần thiết trong thời gian chạy sẽ được liệt kê ở đây. Các công cụ phân tích phần phụ thuộc nên bỏ qua các mục tiêu xuất hiện trong cả runtime_deps và deps .
|
stamp
|
Tệp nhị phân được đóng dấu không được tạo lại trừ phi phần phụ thuộc của chúng thay đổi. |
test_class
|
Theo mặc định, nếu đối số này không được xác định thì chế độ cũ sẽ được sử dụng và thay thế các đối số kiểm thử. Thiết lập cờ
Thuộc tính này chỉ định tên của một lớp Java sẽ chạy trong bài kiểm thử này. Hiếm khi cần phải đặt giá trị này. Nếu bạn bỏ qua đối số này, thì đối số này sẽ được suy luận 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
|
Nếu bạn đặt thuộc tính này thành false, thì thuộc tính trình chạy và cờ |
use_testrunner
|
com.google.testing.junit.runner.BazelTestRunner ) làm điểm truy cập chính cho một chương trình Java và cung cấp lớp kiểm thử này cho trình chạy kiểm thử dưới dạng một giá trị của thuộc tính hệ thống bazel.test_suite .
Bạn có thể sử dụng tính năng này để ghi đè hành vi mặc định (sử dụng trình chạy kiểm thử cho các quy tắc java_test ) và không sử dụng hành vi này cho các quy tắc java_binary . Ít có khả năng bạn sẽ muốn làm việc này. Một trường hợp sử dụng là đối với các quy tắc AllTest được gọi bởi một quy tắc khác (chẳng hạn như để 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 là java_binary , nhưng vẫn nên 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 một lớp chạy kiểm thử bằng thuộc tính main_class .
|
java_package_configuration
java_package_configuration(name, data, compatible_with, deprecation, distribs, features, javacopts, licenses, packages, restricted_to, tags, target_compatible_with, testonly, visibility)
Cấu hình để áp dụng cho một tập hợp các 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 dành riêng cho mục tiêu này. |
data
|
|
javacopts
|
|
packages
|
package_group mà cấu hình sẽ được áp dụng.
|
java_plugin
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
xác định các trình bổ trợ cho trình biên dịch Java do Bazel chạy. Hiện tại, loại trình bổ trợ duy nhất được hỗ trợ là trình xử lý chú giải. Quy tắc java_library
hoặc java_binary
có thể chạy 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 trình bổ trợ sang các thư viện trực tiếp phụ thuộc 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 với java_library
, ngoại trừ việc thêm đối số processor_class
.
Đối số
Thuộc tính | |
---|---|
name |
Tên dành riêng cho mục tiêu này. |
deps
|
deps tại phần Các thuộc tính thông thường được xác định theo hầu hết quy tắc tạo.
Các tệp lọ do quy tắc
Ngược lại, các mục tiêu trong thuộc tính |
srcs
|
Các tệp nguồn thuộc loại
Tệp nguồn loại
Quy tắc: nếu quy tắc (thường là
Đối số này hầu như luôn bắt buộc, ngoại trừ trường hợp thuộc tính |
data
|
data tại phần Các thuộc tính thông thường được xác định theo hầu hết quy tắc tạo.
Khi tạo |
resources
|
Nếu bạn chỉ định tài nguyên, các tài nguyên này sẽ được nhóm trong tệp jar cùng với các tệp Tài nguyên có thể là tệp nguồn hoặc tệp được tạo. |
generates_api
|
Nếu một quy tắc sử dụng trình xử lý chú giải tạo API, thì các quy tắc khác tuỳ thuộc vào quy tắc đó chỉ có thể tham chiếu đến mã đã tạo nếu các thao tác biên dịch của những quy tắc đó được lên lịch sau quy tắc tạo. Thuộc tính này hướng dẫn Bazel giới thiệu các quy tắc ràng buộc về lập lịch 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, bạn chỉ nên sử dụng thuộc tính này khi cần thiết. |
javacopts
|
Các tuỳ chọn trình biên dịch này được chuyển đến javac sau các tuỳ chọn trình biên dịch chung. |
neverlink
|
tools.jar cho mọi dịch vụ 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 đó chỉ khác ở những vị trí mà JLS cấm trình biên dịch cùng dòng (và phải áp dụng cho mọi phiên bản JLS trong tương lai). |
output_licenses
|
common attributes
|
plugins
|
java_plugin được chỉ định trong thuộc tính này sẽ 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 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 ra sẽ được đưa vào tệp chứa quy tắc này.
|
processor_class
|
|
proguard_specs
|
android_binary nào tuỳ thuộc vào thư viện này.
Các tệp trong thư mục này chỉ được có các quy tắc không thay đổi giá trị (idempotent) cụ thể là -dontnote, -dontwarn,remembernosideEffect 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 tự động.
|
resource_jars
|
|
resource_strip_prefix
|
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
java_runtime(name, srcs, compatible_with, deprecation, distribs, features, hermetic_srcs, java, java_home, lib_modules, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
Chỉ định cấu hình cho 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 dành riêng cho mục tiêu này. |
srcs
|
|
hermetic_srcs
|
|
java
|
|
java_home
|
srcs và java phải để trống.
|
lib_modules
|
|
java_toolchain
java_toolchain(name, android_lint_data, android_lint_jvm_opts, android_lint_opts, android_lint_package_configuration, android_lint_runner, bootclasspath, compatible_with, deprecation, deps_checker, distribs, features, forcibly_disable_header_compilation, genclass, header_compiler, header_compiler_direct, ijar, jacocorunner, java_runtime, javabuilder, javabuilder_data, javabuilder_jvm_opts, javac_supports_multiplex_workers, javac_supports_workers, javacopts, jvm_opts, licenses, oneversion, oneversion_whitelist, package_configuration, proguard_allowlister, resourcejar, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, tools, turbine_data, turbine_jvm_opts, visibility, xlint)
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ụ nào cần sử dụng thông qua đối số --java_toolchain. Thông thường, bạn không nên viết các loại quy tắc đó trừ khi bạn muốn điều chỉnh trình biên dịch Java.
Ví dụ
Một ví dụ đơn giản là:
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 dành riêng cho mục tiêu này. |
android_lint_data
|
|
android_lint_jvm_opts
|
|
android_lint_opts
|
|
android_lint_package_configuration
|
|
android_lint_runner
|
|
bootclasspath
|
|
deps_checker
|
|
forcibly_disable_header_compilation
|
|
genclass
|
|
header_compiler
|
|
header_compiler_direct
|
Công cụ này không hỗ trợ xử lý chú giải. |
ijar
|
|
jacocorunner
|
|
java_runtime
|
|
javabuilder
|
|
javabuilder_data
|
|
javabuilder_jvm_opts
|
|
javac_supports_multiplex_workers
|
|
javac_supports_workers
|
|
javacopts
|
|
jvm_opts
|
|
oneversion
|
|
oneversion_whitelist
|
|
package_configuration
|
|
proguard_allowlister
|
|
resourcejar
|
|
singlejar
|
|
source_version
|
|
target_version
|
|
timezone_data
|
|
tools
|
|
turbine_data
|
|
turbine_jvm_opts
|
|
xlint
|
|