Quy tắc Java

Báo cáo vấn đề Xem nguồn

Quy tắc

java_binary

Xem nguồn quy tắc
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 một kho lưu trữ Java ("tệp jar") cộng với một tập lệnh bao bọc môi trường shell có cùng tên với quy tắc. Tập lệnh wrapper shell sử dụng một đường dẫn lớp, ngoài ra còn có một tệp jar cho mỗi thư viện mà tệp nhị phân phụ thuộc.

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ờ và biến môi trường có thể định cấu hình đượ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 tệp lưu trữ chứa các nguồn ("jar nguồn").
  • name_deploy.jar: Một kho lưu trữ Java phù hợp để triển khai (chỉ được xây dựng 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 tệp này chạy bằng lệnh java -jar hoặc với tuỳ chọn --singlejar của tập lệnh trình bao bọc. Ưu tiên sử dụng tập lệnh trình bao bọc cho java -jar vì tập lệnh này cũng chuyển cờ JVM và các tuỳ chọn để tải thư viện gốc.

    Lọ triển khai chứa tất cả các lớp mà một trình tải lớp sẽ tìm kiếm trên classpath 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 cho phần phụ thuộc. Các tệp này sẽ tự động được 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 launcher, thì thay vì là một tệp JAR thông thường, _deploy.jar sẽ là một tệp nhị phân gốc. Thao tác 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 trong 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ả mã thực thi và Java. Bạn có thể thực thi tệp jar trực tiếp như khi 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ừ quá trình đóng mục tiêu. Các lớp này sẽ khớp với các lớp trong deploy.jar ngoại trừ trường hợp các tệp jar không có tệp nguồn phù hợp.

Không được phép dùng thuộc tính deps trong quy tắc java_binary khi không có srcs. Quy tắc đó yêu cầu phải có main_class trong runtime_deps.

Đoạn mã sau minh hoạ 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

Name; required

Tên duy nhất cho mục tiêu này.


Bạn nên sử dụng tên của tệp nguồn làm đ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 gọi là Main.java, thì tên của bạn có thể là Main.
deps

List of labels; optional

Danh sách các thư viện khác sẽ được liên kết đến đích. Xem nhận xét chung về deps tại các thuộc tính tiêu biểu được quy định trong hầu hết các quy tắc tạo bản dựng.
srcs

List of labels; optional

Danh sách các tệp nguồn được xử lý để tạo mục tiêu. Thuộc tính này hầu như luôn bắt buộc. Hãy xem các trường hợp ngoại lệ bên dưới.

Các tệp nguồn thuộc loại .java được biên dịch. Trong trường hợp các tệp .java được tạo, bạn nên đặt tên của quy tắc tạo ở đây thay vì tên của chính tệp đó. Điều này không chỉ cải thiện khả năng đọc mà còn giúp quy tắc trở nên phù hợp hơn với các thay đổi trong tương lai: nếu quy tắc tạo tệp sẽ tạo ra nhiều tệp trong tương lai, bạn chỉ cần sửa một nơi: outs của quy tắc tạo. Bạn không nên liệt kê quy tắc tạo trong deps vì đó là quy tắc không hoạt động.

Các tệp nguồn thuộc loại .srcjar được giải nén và biên dịch. (Thao tác này sẽ hữu ích nếu bạn cần tạo một tập hợp các tệp .java bằng genrule.)

Quy tắc: nếu quy tắc (thường là genrule hoặc filegroup) tạo ra bất kỳ tệp nào nêu trên, thì các tệp này sẽ được sử dụng theo cách tương tự như cách mô tả tệp nguồn.

Đối số này hầu như luôn bắt buộc, ngoại trừ trường hợp thuộc tính main_class chỉ định một lớp trên đường dẫn lớp thời gian chạy hoặc bạn chỉ định đối số runtime_deps.

resources

List of labels; optional

Danh sách các tệp dữ liệu để đưa vào tệp jar Java.

Nếu bạn chỉ định tài nguyên, các tài nguyên đó sẽ được nhóm trong bình cùng với các tệp .class thông thường do quá trình biên dịch tạo ra. Vị trí của các tài nguyên bên trong tệp jar được xác định bởi cấu trúc dự án. Trước tiên, Bazel sẽ tìm bố cục thư mục chuẩn của Maven, (thư mục "src" theo sau là cháu của thư mục "resources"). Nếu không tìm thấy như vậy, Bazel sẽ tìm thư mục cấp cao nhất có tên "java" hoặc "javatests" (ví dụ: nếu một tài nguyên nằm tại <workspace root>/x/java/y/java/z, đường dẫn của tài nguyên sẽ là y/java/z. Không thể ghi đè phương pháp phỏng đoán này, tuy nhiên, thuộc tính resource_strip_prefix có thể dùng để chỉ định một thư mục thay thế cụ thể cho các tệp tài nguyên.

Tài nguyên có thể là tệp nguồn hoặc tệp được tạo.

classpath_resources

List of labels; optional

KHÔNG SỬ DỤNG LỰA CHỌN NÀY NẾU KHÔNG CÓ CÁCH NÀO KHÁC)

Danh sách các tài nguyên phải nằm ở gốc 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 đòi hỏi phải tìm thấy tài nguyên trên đường dẫn lớp dưới dạng chính xác là "myconfig.xml". Tệp này chỉ được phép trên tệp nhị phân chứ không phải thư viện do có nguy cơ xung đột vùng chứa tên.

create_executable

Boolean; optional; nonconfigurable; default is True

Liệu tệp nhị phân có thể thực thi hay không. Các tệp nhị phân không thực thi thu thập các phần phụ thuộc Java của môi trường thời gian chạy bắc cầu vào một tệp triển khai nhưng không thể thực thi trực tiếp. Không có tập lệnh trình bao bọc nào được tạo nếu thuộc tính này được đặt. Sẽ là sai sót nếu đặt giá trị này là 0 nếu bạn đặt các thuộc tính launcher hoặc main_class.
deploy_env

List of labels; optional

Danh sách các mục tiêu 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à một java_binary khác sẽ tải.
Việc thiết lập 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à 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

List of strings; optional

Danh sách các dòng cần thêm vào tệp 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 được thay thế "Make variable" (Biến).
javacopts

List of strings; optional

Các tuỳ chọn trình biên dịch bổ sung dành cho thư viện này. Tuỳ theo sự thay thế "Biến" và mã Bourne shell.

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

List of strings; optional

Danh sách cờ để nhúng trong tập lệnh trình bao bọc được tạo để chạy tệp nhị phân này. Tuỳ thuộc vào $(location)thay thế"Make variable", cũng như Mã hoá Bourne shell.

Tập lệnh trình bao bọc cho tệp nhị phân Java bao gồm một đị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 được tạo bởi tập lệnh trình bao bọc bao gồm tên của lớp chính, theo sau là "$@" để bạn có thể truyền các đối số khác sau tên lớp. Tuy nhiên, các đối số dùng để phân tích cú pháp JVM phải được chỉ định trước tên lớp trên dòng lệnh. Nội dung của jvm_flags sẽ được thêm vào tập lệnh trình bao bọc trước khi tên lớp được liệt kê.

Lưu ý rằng thuộc tính này không ảnh hưởng đến đầu ra *_deploy.jar.

launcher

Label; optional

Chỉ định một tệp nhị phân sẽ được dùng để chạy chương trình Java thay vì chương trình bin/java thông thường trong 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 API gọi Java làm giá trị cho thuộc tính này.

Theo mặc định, Bazel sẽ sử dụng trình khởi chạy JDK thông thường (bin/java hoặc java.exe).

Cờ Bazel liên quan đến --java_launcher chỉ ảnh hưởng đến những mục tiêu java_binaryjava_test chưa xác định thuộc tính launcher.

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:

  • Nếu bạn đang sử dụng trình chạy JDK thông thường (mặc định), thì các phần phụ thuộc gốc sẽ được xây dựng dưới dạng một thư viện dùng chung có tên là {name}_nativedeps.so, trong đó {name} là thuộc tính name của quy tắc java_binary này. Trình liên kết không xóa mã không sử dụng trong cấu hình này.
  • Nếu bạn đang sử dụng bất kỳ trình chạy nào khác, các phần phụ thuộc gốc (C++) sẽ được liên kết tĩnh với một tệp nhị phân có tên là {name}_nativedeps, trong đó {name} là thuộc tính name của quy tắc java_binary này. Trong trường hợp này, trình liên kết sẽ xoá mọi mã được cho là không dùng đến từ tệp nhị phân thu được, nghĩa là mọi mã C++ chỉ được truy cập qua JNI sẽ không liên kết được trừ phi mục tiêu cc_library đó chỉ định alwayslink = 1.

Khi 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 *_deploy.jar sẽ thay đổi. Hãy xem tài liệu java_binary chính để biết thông tin chi tiết.

main_class

String; optional

Tên lớp bằng phương thức main() để dùng làm điểm truy cập. Nếu một quy tắc sử dụng tùy chọn này, thì sẽ không cần danh sách srcs=[...] cho quy tắc đó. Do đó, với thuộc tính này, bạn có thể tạo một 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à một tên lớp, không phải tệp nguồn. Lớp này phải có sẵn trong thời gian chạy: có thể được biên dịch theo quy tắc này (từ srcs) hoặc được cung cấp qua các phần phụ thuộc trực tiếp hoặc bắc cầu (thông qua runtime_deps hoặc deps). Nếu không có lớp này, tệp nhị phân sẽ không chạy được trong thời gian chạy; không có quá trình kiểm tra thời gian tạo.

plugins

List of labels; optional

Các trình bổ trợ biên dịch Java sẽ chạy vào thời gian biên dịch. Mỗi java_plugin được chỉ định trong thuộc tính này sẽ chạy mỗi khi 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 ra sẽ được đưa vào jar kết quả của quy tắc này.
resource_jars

List of labels; optional

Ngừng sử dụng: Thay vào đó, hãy sử dụng java_import và deps hoặc runtime_deps.
resource_strip_prefix

String; optional

Tiền tố đường dẫn để tách khỏi các tài nguyên Java.

Nếu được chỉ định, tiền tố đường dẫn này sẽ bị xóa khỏi mọi tệp trong thuộc tính resources. Lỗi khi tệp tài nguyên không nằm trong thư mục này. Nếu không được chỉ định (mặc định), đường dẫn của tệp tài nguyên được xác định theo cùng logic với gói Java của các tệp nguồn. Ví dụ: tệp nguồn tại stuff/java/foo/bar/a.txt sẽ nằm tại foo/bar/a.txt.

runtime_deps

List of labels; optional

Các thư viện chỉ được cung cấp cho tệp nhị phân cuối cùng hoặc bản thử nghiệm trong thời gian chạy. Giống như deps thông thường, các tệp này sẽ xuất hiện trên classpath thời gian chạy nhưng không giống như trên classpath thời gian biên dịch. Bạn chỉ cần liệt kê các phần phụ thuộc cần thiết trong thời gian chạy tại đâ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_depsdeps.
stamp

Integer; optional; default is -1

Xác định xem có mã hóa thông tin bản dựng thành tệp nhị phân hay không. Bạn có thể sử dụng các giá trị sau:
  • stamp = 1: Luôn đóng dấu thông tin bản dựng vào tệp nhị phân, ngay cả trong các bản dựng --nostamp. Bạn nên tránh sử dụng tùy chọn cài đặt này vì tùy chọn này có thể tắt bộ nhớ đệm từ xa đối với tệp nhị phân và mọi hành động ở phần dưới phụ thuộc vào tệp đó.
  • stamp = 0: Luôn thay thế thông tin bản dựng bằng các giá trị không đổi. Thao tác này sẽ giúp lưu kết quả vào bộ nhớ đệm một cách hiệu quả.
  • stamp = -1: Việc nhúng thông tin bản dựng sẽ do cờ --[no]stamp kiểm soát.

Các tệp nhị phân có nhãn đóng góp không được tạo lại trừ phi các phần phụ thuộc thay đổi.

use_launcher

Boolean; optional; default is True

Liệu tệp nhị phân có nên sử dụng trình chạy tùy chỉnh hay không.

Nếu thuộc tính này được đặt thành false, thuộc tính launcher và cờ --java_launcher có liên quan sẽ bị bỏ qua đối với mục tiêu này.

use_testrunner

Boolean; optional; default is False

Sử dụng lớp trình chạy kiểm thử (theo mặc định là com.google.testing.junit.runner.BazelTestRunner) làm điểm truy cập chính cho một chương trình Java, đồng thời 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 trình chạy này cho các quy tắc java_binary. Chắc chắn bạn sẽ không muốn làm điều này. Một trường hợp sử dụng là quy tắc AllTest được gọi bằng một quy tắc khác (ví dụ: để thiết lập cơ sở dữ liệu trước khi chạy kiểm thử). Quy tắc AllTest phải được khai báo 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 lớp chạy kiểm thử bằng thuộc tính main_class.

java_import

Xem nguồn quy tắc
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_libraryjava_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

Name; required

Tên duy nhất cho mục tiêu này.

deps

List of labels; optional

Danh sách các thư viện khác sẽ được liên kết đến đích. Xem java_library.deps.
constraints

List of strings; optional; nonconfigurable

Các quy tắc ràng buộc bổ sung áp dụng cho quy tắc này dưới dạng một thư viện Java.
exports

List of labels; optional

Mục tiêu để cung cấp cho người dùng quy tắc này. Xem java_library.exports.
jars

List of labels; required

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.

Boolean; optional; default is False

Chỉ sử dụng thư viện này để biên dịch chứ không phải trong thời gian chạy. Hữu ích nếu môi trường thời gian chạy cung cấp thư viện. Ví dụ về các thư viện như thế này là các API IDE dành cho trình bổ trợ IDE hoặc tools.jar cho mọi trình chạy trên JDK chuẩn.
proguard_specs

List of labels; optional

Tệp được dùng làm thông số Proguard. Các dữ liệu này sẽ mô tả tập hợp các thông số kỹ thuật mà Proguard sẽ sử dụng. Nếu được chỉ định, các tập dữ liệu này sẽ được thêm vào bất kỳ mục tiêu 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 chứa các quy tắc cố định, chẳng hạn như -dontnote, -dontwarn, giả định không có tác dụng 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 thông số proguard_specs của android_binary để đảm bảo việc hợp nhất không tự động.
runtime_deps

List of labels; optional

Các thư viện chỉ được cung cấp cho tệp nhị phân cuối cùng hoặc bản thử nghiệm trong thời gian chạy. Xem java_library.runtime_deps.
srcjar

Label; optional

Tệp JAR chứa mã nguồn cho các tệp JAR được biên dịch.

thư viện java

Xem nguồn quy tắc
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 vào một tệp .jar.

Mục tiêu đầu ra ngầm ẩn

  • libname.jar: Một kho lưu trữ Java chứa các tệp của 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

Name; required

Tên duy nhất cho mục tiêu này.

deps

List of labels; optional

Danh sách các thư viện để liên kết vào thư viện này. Xem nhận xét chung về deps tại các thuộc tính tiêu biểu được quy định trong hầu hết các quy tắc tạo bản dựng.

Các tệp jar do các quy tắc java_library liệt kê trong deps tạo sẽ nằm trên classpath thời gian biên dịch của quy tắc này. Hơn nữa, việc đóng tạm thời deps, runtime_depsexports của chúng sẽ nằm trên classpath thời gian chạy.

Ngược lại, các mục tiêu trong thuộc tính data được đưa vào các tệp chạy nhưng không nằm trên cả đường dẫn lớp biên dịch và thời gian chạy.

srcs

List of labels; optional

Danh sách các tệp nguồn được xử lý để tạo mục tiêu. Thuộc tính này hầu như luôn bắt buộc. Hãy xem các trường hợp ngoại lệ bên dưới.

Các tệp nguồn thuộc loại .java được biên dịch. Trong trường hợp các tệp .java được tạo, bạn nên đặt tên của quy tắc tạo ở đây thay vì tên của chính tệp đó. Điều này không chỉ cải thiện khả năng đọc mà còn giúp quy tắc trở nên phù hợp hơn với các thay đổi trong tương lai: nếu quy tắc tạo tệp sẽ tạo ra nhiều tệp trong tương lai, bạn chỉ cần sửa một nơi: outs của quy tắc tạo. Bạn không nên liệt kê quy tắc tạo trong deps vì đó là quy tắc không hoạt động.

Các tệp nguồn thuộc loại .srcjar được giải nén và biên dịch. (Thao tác này sẽ hữu ích nếu bạn cần tạo một tập hợp các tệp .java bằng genrule.)

Quy tắc: nếu quy tắc (thường là genrule hoặc filegroup) tạo ra bất kỳ tệp nào nêu trên, thì các tệp này sẽ được sử dụng theo cách tương tự như cách mô tả tệp nguồn.

Đối số này hầu như luôn bắt buộc, ngoại trừ trường hợp thuộc tính main_class chỉ định một lớp trên đường dẫn lớp thời gian chạy hoặc bạn chỉ định đối số runtime_deps.

data

List of labels; optional

Danh sách các tệp mà thư viện này cần trong thời gian chạy. Xem nhận xét chung về data tại các thuộc tính tiêu biểu được quy định trong hầu hết các quy tắc tạo bản dựng.

Khi xây dựng java_library, Bazel sẽ không đặt các tệp này ở bất cứ đâu; nếu các tệp data được tạo, thì Bazel sẽ tạo các tệp này. Khi xây dựng một chương trình kiểm thử phụ thuộc vào java_library Bazel này, các bản sao chép hoặc liên kết tệp data sẽ được đưa vào vùng runfiles.

resources

List of labels; optional

Danh sách các tệp dữ liệu để đưa vào tệp jar Java.

Nếu bạn chỉ định tài nguyên, các tài nguyên đó sẽ được nhóm trong bình cùng với các tệp .class thông thường do quá trình biên dịch tạo ra. Vị trí của các tài nguyên bên trong tệp jar được xác định bởi cấu trúc dự án. Trước tiên, Bazel sẽ tìm bố cục thư mục chuẩn của Maven, (thư mục "src" theo sau là cháu của thư mục "resources"). Nếu không tìm thấy như vậy, Bazel sẽ tìm thư mục cấp cao nhất có tên "java" hoặc "javatests" (ví dụ: nếu một tài nguyên nằm tại <workspace root>/x/java/y/java/z, đường dẫn của tài nguyên sẽ là y/java/z. Không thể ghi đè phương pháp phỏng đoán này, tuy nhiên, thuộc tính resource_strip_prefix có thể dùng để chỉ định một thư mục thay thế cụ thể cho các tệp tài nguyên.

Tài nguyên có thể là tệp nguồn hoặc tệp được tạo.

exported_plugins

List of labels; optional

Danh sách java_plugin (ví dụ: trình xử lý chú giải) để xuất vào các thư viện phụ thuộc trực tiếp vào thư viện này.

Danh sách java_plugin đã chỉ định sẽ được áp dụng cho mọi thư viện trực tiếp phụ thuộc vào thư viện này, giống như khi thư viện đó khai báo rõ ràng các nhãn này trong plugins.

exports

List of labels; optional

Thư viện đã xuất.

Các quy tắc liệt kê tại đây sẽ cung cấp cho các quy tắc mẹ, như thể rõ ràng cha mẹ phụ thuộc vào các quy tắc này. Điều này không đúng với deps thông thường (không được xuất).

Tóm tắt: Một quy tắc X có thể truy cập vào mã trong Y nếu có đường dẫn phần phụ thuộc giữa các đường dẫn bắt đầu bằng cạnh deps và theo sau là các cạnh exports trở lên. Hãy xem một số ví dụ để minh hoạ cho điều này.

Giả sử A phụ thuộc vào BB phụ thuộc vào C. Trong trường hợp này, C là phần phụ thuộc mang tính 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ẽ xây dựng 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 deps hoặc B có thể giúp A (và mọi nội dung phụ thuộc vào A) dễ dàng hơn bằng cách khai báo C trong thuộc tính exports (B).

Tất cả quy tắc gốc trực tiếp có thể đóng các thư viện đã xuất. 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 D. Bây giờ 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 tương ứng là C và D thì A chỉ có thể truy cập vào C, chứ không phải D'.

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à cũng muốn sử dụng C, thì cũng phải liệt kê trong C deps.

javacopts

List of strings; optional

Các tuỳ chọn trình biên dịch bổ sung dành cho thư viện này. Tuỳ theo sự thay thế "Biến" và mã Bourne shell.

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.

Boolean; optional; default is False

Liệu thư viện này có chỉ được dùng để biên dịch chứ không phải trong thời gian chạy hay không. Hữu ích nếu môi trường thời gian chạy cung cấp thư viện. Ví dụ về những thư viện như vậy là các API IDE cho các trình bổ trợ IDE hoặc tools.jar cho mọi trình chạy trên JDK tiêu chuẩn.

Xin lưu ý rằng neverlink = 1 không ngăn trình biên dịch đưa nội dung từ thư viện này vào các mục tiêu biên dịch phụ thuộc vào dữ liệu đó, như được Đặc tả ngôn ngữ Java cho phép (ví dụ: Hằng số static final thuộc loại String hoặc loại gốc. Do đó, trường hợp sử dụng ưu tiên là khi thư viện thời gian chạy giống với thư viện biên dịch.

Nếu thư viện thời gian chạy khác với thư viện biên dịch, bạn phải đảm bảo rằng thư viện này chỉ khác ở những nơi mà JLS cấm trình biên dịch nội tuyến (và phải giữ cho tất cả các phiên bản trong tương lai của JLS).

plugins

List of labels; optional

Các trình bổ trợ biên dịch Java sẽ chạy vào thời gian biên dịch. Mỗi java_plugin được chỉ định trong thuộc tính này sẽ chạy mỗi khi 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 ra sẽ được đưa vào jar kết quả của quy tắc này.
proguard_specs

List of labels; optional

Tệp được dùng làm thông số Proguard. Các dữ liệu này sẽ mô tả tập hợp các thông số kỹ thuật mà Proguard sẽ sử dụng. Nếu được chỉ định, các tập dữ liệu này sẽ được thêm vào bất kỳ mục tiêu 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 chứa các quy tắc cố định, chẳng hạn như -dontnote, -dontwarn, giả định không có tác dụng 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 thông số proguard_specs của android_binary để đảm bảo việc hợp nhất không tự động.
resource_jars

List of labels; optional

Ngừng sử dụng: Thay vào đó, hãy sử dụng java_import và deps hoặc runtime_deps.
resource_strip_prefix

String; optional

Tiền tố đường dẫn để tách khỏi các tài nguyên Java.

Nếu được chỉ định, tiền tố đường dẫn này sẽ bị xóa khỏi mọi tệp trong thuộc tính resources. Lỗi khi tệp tài nguyên không nằm trong thư mục này. Nếu không được chỉ định (mặc định), đường dẫn của tệp tài nguyên được xác định theo cùng logic với gói Java của các tệp nguồn. Ví dụ: tệp nguồn tại stuff/java/foo/bar/a.txt sẽ nằm tại foo/bar/a.txt.

runtime_deps

List of labels; optional

Các thư viện chỉ được cung cấp cho tệp nhị phân cuối cùng hoặc bản thử nghiệm trong thời gian chạy. Giống như deps thông thường, các tệp này sẽ xuất hiện trên classpath thời gian chạy nhưng không giống như trên classpath thời gian biên dịch. Bạn chỉ cần liệt kê các phần phụ thuộc cần thiết trong thời gian chạy tại đâ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_depsdeps.

java_lite_proto_library

Xem nguồn quy tắc
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ừ .proto tệp.

deps phải trỏ đến proto_library quy tắc.

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

Name; required

Tên duy nhất cho mục tiêu này.

deps

List of labels; optional

Danh sách các quy tắc proto_library để tạo mã Java.

java_proto_library

Xem nguồn quy tắc
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ừ .proto tệp.

deps phải trỏ đến proto_library quy tắc.

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

Name; required

Tên duy nhất cho mục tiêu này.

deps

List of labels; optional

Danh sách các quy tắc proto_library để tạo mã Java.

java_test [kiểm_tra_java]

Xem nguồn quy tắc
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 một 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: Một kho lưu trữ Java.
  • name_deploy.jar: Một kho lưu trữ Java phù hợp để triển khai. (Chỉ được xây dựng nếu được yêu cầu rõ ràng.) Hãy xem nội dung mô tả về kết quả name_deploy.jar từ 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

Name; required

Tên duy nhất cho mục tiêu này.

deps

List of labels; optional

Danh sách các thư viện khác sẽ được liên kết đến đích. Xem nhận xét chung về deps tại các thuộc tính tiêu biểu được quy định trong hầu hết các quy tắc tạo bản dựng.
srcs

List of labels; optional

Danh sách các tệp nguồn được xử lý để tạo mục tiêu. Thuộc tính này hầu như luôn bắt buộc. Hãy xem các trường hợp ngoại lệ bên dưới.

Các tệp nguồn thuộc loại .java được biên dịch. Trong trường hợp các tệp .java được tạo, bạn nên đặt tên của quy tắc tạo ở đây thay vì tên của chính tệp đó. Điều này không chỉ cải thiện khả năng đọc mà còn giúp quy tắc trở nên phù hợp hơn với các thay đổi trong tương lai: nếu quy tắc tạo tệp sẽ tạo ra nhiều tệp trong tương lai, bạn chỉ cần sửa một nơi: outs của quy tắc tạo. Bạn không nên liệt kê quy tắc tạo trong deps vì đó là quy tắc không hoạt động.

Các tệp nguồn thuộc loại .srcjar được giải nén và biên dịch. (Thao tác này sẽ hữu ích nếu bạn cần tạo một tập hợp các tệp .java bằng genrule.)

Quy tắc: nếu quy tắc (thường là genrule hoặc filegroup) tạo ra bất kỳ tệp nào nêu trên, thì các tệp này sẽ được sử dụng theo cách tương tự như cách mô tả tệp nguồn.

Đối số này hầu như luôn bắt buộc, ngoại trừ trường hợp thuộc tính main_class chỉ định một lớp trên đường dẫn lớp thời gian chạy hoặc bạn chỉ định đối số runtime_deps.

resources

List of labels; optional

Danh sách các tệp dữ liệu để đưa vào tệp jar Java.

Nếu bạn chỉ định tài nguyên, các tài nguyên đó sẽ được nhóm trong bình cùng với các tệp .class thông thường do quá trình biên dịch tạo ra. Vị trí của các tài nguyên bên trong tệp jar được xác định bởi cấu trúc dự án. Trước tiên, Bazel sẽ tìm bố cục thư mục chuẩn của Maven, (thư mục "src" theo sau là cháu của thư mục "resources"). Nếu không tìm thấy như vậy, Bazel sẽ tìm thư mục cấp cao nhất có tên "java" hoặc "javatests" (ví dụ: nếu một tài nguyên nằm tại <workspace root>/x/java/y/java/z, đường dẫn của tài nguyên sẽ là y/java/z. Không thể ghi đè phương pháp phỏng đoán này, tuy nhiên, thuộc tính resource_strip_prefix có thể dùng để chỉ định một thư mục thay thế cụ thể cho các tệp tài nguyên.

Tài nguyên có thể là tệp nguồn hoặc tệp được tạo.

classpath_resources

List of labels; optional

KHÔNG SỬ DỤNG LỰA CHỌN NÀY NẾU KHÔNG CÓ CÁCH NÀO KHÁC)

Danh sách các tài nguyên phải nằm ở gốc 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 đòi hỏi phải tìm thấy tài nguyên trên đường dẫn lớp dưới dạng chính xác là "myconfig.xml". Tệp này chỉ được phép trên tệp nhị phân chứ không phải thư viện do có nguy cơ xung đột vùng chứa tên.

create_executable

Boolean; optional; nonconfigurable; default is True

Liệu tệp nhị phân có thể thực thi hay không. Các tệp nhị phân không thực thi thu thập các phần phụ thuộc Java của môi trường thời gian chạy bắc cầu vào một tệp triển khai nhưng không thể thực thi trực tiếp. Không có tập lệnh trình bao bọc nào được tạo nếu thuộc tính này được đặt. Sẽ là sai sót nếu đặt giá trị này là 0 nếu bạn đặt các thuộc tính launcher hoặc main_class.
deploy_manifest_lines

List of strings; optional

Danh sách các dòng cần thêm vào tệp 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 được thay thế "Make variable" (Biến).
javacopts

List of strings; optional

Các tuỳ chọn trình biên dịch bổ sung dành cho thư viện này. Tuỳ theo sự thay thế "Biến" và mã Bourne shell.

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

List of strings; optional

Danh sách cờ để nhúng trong tập lệnh trình bao bọc được tạo để chạy tệp nhị phân này. Tuỳ thuộc vào $(location)thay thế"Make variable", cũng như Mã hoá Bourne shell.

Tập lệnh trình bao bọc cho tệp nhị phân Java bao gồm một đị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 được tạo bởi tập lệnh trình bao bọc bao gồm tên của lớp chính, theo sau là "$@" để bạn có thể truyền các đối số khác sau tên lớp. Tuy nhiên, các đối số dùng để phân tích cú pháp JVM phải được chỉ định trước tên lớp trên dòng lệnh. Nội dung của jvm_flags sẽ được thêm vào tập lệnh trình bao bọc trước khi tên lớp được liệt kê.

Lưu ý rằng thuộc tính này không ảnh hưởng đến đầu ra *_deploy.jar.

launcher

Label; optional

Chỉ định một tệp nhị phân sẽ được dùng để chạy chương trình Java thay vì chương trình bin/java thông thường trong 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 API gọi Java làm giá trị cho thuộc tính này.

Theo mặc định, Bazel sẽ sử dụng trình khởi chạy JDK thông thường (bin/java hoặc java.exe).

Cờ Bazel liên quan đến --java_launcher chỉ ảnh hưởng đến những mục tiêu java_binaryjava_test chưa xác định thuộc tính launcher.

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:

  • Nếu bạn đang sử dụng trình chạy JDK thông thường (mặc định), thì các phần phụ thuộc gốc sẽ được xây dựng dưới dạng một thư viện dùng chung có tên là {name}_nativedeps.so, trong đó {name} là thuộc tính name của quy tắc java_binary này. Trình liên kết không xóa mã không sử dụng trong cấu hình này.
  • Nếu bạn đang sử dụng bất kỳ trình chạy nào khác, các phần phụ thuộc gốc (C++) sẽ được liên kết tĩnh với một tệp nhị phân có tên là {name}_nativedeps, trong đó {name} là thuộc tính name của quy tắc java_binary này. Trong trường hợp này, trình liên kết sẽ xoá mọi mã được cho là không dùng đến từ tệp nhị phân thu được, nghĩa là mọi mã C++ chỉ được truy cập qua JNI sẽ không liên kết được trừ phi mục tiêu cc_library đó chỉ định alwayslink = 1.

Khi 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 *_deploy.jar sẽ thay đổi. Hãy xem tài liệu java_binary chính để biết thông tin chi tiết.

main_class

String; optional

Tên lớp bằng phương thức main() để dùng làm điểm truy cập. Nếu một quy tắc sử dụng tùy chọn này, thì sẽ không cần danh sách srcs=[...] cho quy tắc đó. Do đó, với thuộc tính này, bạn có thể tạo một 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à một tên lớp, không phải tệp nguồn. Lớp này phải có sẵn trong thời gian chạy: có thể được biên dịch theo quy tắc này (từ srcs) hoặc được cung cấp qua các phần phụ thuộc trực tiếp hoặc bắc cầu (thông qua runtime_deps hoặc deps). Nếu không có lớp này, tệp nhị phân sẽ không chạy được trong thời gian chạy; không có quá trình kiểm tra thời gian tạo.

plugins

List of labels; optional

Các trình bổ trợ biên dịch Java sẽ chạy vào thời gian biên dịch. Mỗi java_plugin được chỉ định trong thuộc tính này sẽ chạy mỗi khi 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 ra sẽ được đưa vào jar kết quả của quy tắc này.
resource_jars

List of labels; optional

Ngừng sử dụng: Thay vào đó, hãy sử dụng java_import và deps hoặc runtime_deps.
resource_strip_prefix

String; optional

Tiền tố đường dẫn để tách khỏi các tài nguyên Java.

Nếu được chỉ định, tiền tố đường dẫn này sẽ bị xóa khỏi mọi tệp trong thuộc tính resources. Lỗi khi tệp tài nguyên không nằm trong thư mục này. Nếu không được chỉ định (mặc định), đường dẫn của tệp tài nguyên được xác định theo cùng logic với gói Java của các tệp nguồn. Ví dụ: tệp nguồn tại stuff/java/foo/bar/a.txt sẽ nằm tại foo/bar/a.txt.

runtime_deps

List of labels; optional

Các thư viện chỉ được cung cấp cho tệp nhị phân cuối cùng hoặc bản thử nghiệm trong thời gian chạy. Giống như deps thông thường, các tệp này sẽ xuất hiện trên classpath thời gian chạy nhưng không giống như trên classpath thời gian biên dịch. Bạn chỉ cần liệt kê các phần phụ thuộc cần thiết trong thời gian chạy tại đâ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_depsdeps.
stamp

Integer; optional; default is 0

Xác định xem có mã hóa thông tin bản dựng thành tệp nhị phân hay không. Bạn có thể sử dụng các giá trị sau:
  • stamp = 1: Luôn đóng dấu thông tin bản dựng vào tệp nhị phân, ngay cả trong các bản dựng --nostamp. Bạn nên tránh sử dụng tùy chọn cài đặt này vì tùy chọn này có thể tắt bộ nhớ đệm từ xa đối với tệp nhị phân và mọi hành động ở phần dưới phụ thuộc vào tệp đó.
  • stamp = 0: Luôn thay thế thông tin bản dựng bằng các giá trị không đổi. Thao tác này sẽ giúp lưu kết quả vào bộ nhớ đệm một cách hiệu quả.
  • stamp = -1: Việc nhúng thông tin bản dựng sẽ do cờ --[no]stamp kiểm soát.

Các tệp nhị phân có nhãn đóng góp không được tạo lại trừ phi các phần phụ thuộc thay đổi.

test_class

String; optional

Lớp Java sẽ được trình chạy kiểm thử tải.

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à đối số kiểm thử sẽ được sử dụng. Đặt cờ --nolegacy_bazel_java_test thành không dự phòng đối số đầu tiên.

Thuộc tính này chỉ định tên của một lớp Java sẽ được chạy trong quy trình kiểm thử này. Hiếm khi cần đặt giá trị này. Nếu đối số này bị bỏ qua, đối số này sẽ được suy luận bằng cách sử dụng name của mục tiêu và đường dẫn tương đối nguồn gốc. Nếu quy trình kiểm thử nằm ngoài một gốc nguồn đã biết, Bazel sẽ báo lỗi nếu bạn không đặt test_class.

Đối với JUnit3, lớp kiểm thử phải là lớp con của junit.framework.TestCase hoặc cần có một phương thức suite() tĩnh công khai trả về junit.framework.Test (hoặc lớp con của Test). Đối với JUnit4, lớp này cần được chú thích bằng org.junit.runner.RunWith.

Thuộc tính này cho phép một số quy tắc java_test dùng chung Test (TestCase, TestSuite, ...). Thường thì thông tin bổ sung được chuyển vào thuộc tính này (ví dụ: qua jvm_flags=['-Dkey=value']) để hành vi của thuộc tính đó thay đổi trong từng trường hợp, chẳng hạn như chạy một tập hợp con kiểm thử khác. Thuộc tính này cũng cho phép sử dụng các quy trình kiểm thử Java bên ngoài cây javatests.

use_launcher

Boolean; optional; default is True

Liệu tệp nhị phân có nên sử dụng trình chạy tùy chỉnh hay không.

Nếu thuộc tính này được đặt thành false, thuộc tính launcher và cờ --java_launcher có liên quan sẽ bị bỏ qua đối với mục tiêu này.

use_testrunner

Boolean; optional; default is True

Sử dụng lớp trình chạy kiểm thử (theo mặc định là com.google.testing.junit.runner.BazelTestRunner) làm điểm truy cập chính cho một chương trình Java, đồng thời 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 trình chạy này cho các quy tắc java_binary. Chắc chắn bạn sẽ không muốn làm điều này. Một trường hợp sử dụng là quy tắc AllTest được gọi bằng một quy tắc khác (ví dụ: để thiết lập cơ sở dữ liệu trước khi chạy kiểm thử). Quy tắc AllTest phải được khai báo 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 lớp chạy kiểm thử bằng thuộc tính main_class.

cấu_hình_gói_java

Xem nguồn quy tắc
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 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

Name; required

Tên duy nhất cho mục tiêu này.

data

List of labels; optional

Danh sách các tệp mà cấu hình này cần trong thời gian chạy.
javacopts

List of strings; optional

Cờ trình biên dịch Java.
packages

List of labels; optional

Tập hợp các package_group nên áp dụng cấu hình.

java_plugin (plugin_java)

Xem nguồn quy tắc
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 tuỳ thuộc vào chúng thông qua thuộc tính plugins. Một 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 thư viện đó bằng exported_plugins.

Mục tiêu đầu ra ngầm ẩn

  • libname.jar: Một kho 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

Name; required

Tên duy nhất cho mục tiêu này.

deps

List of labels; optional

Danh sách các thư viện để liên kết vào thư viện này. Xem nhận xét chung về deps tại các thuộc tính tiêu biểu được quy định trong hầu hết các quy tắc tạo bản dựng.

Các tệp jar do các quy tắc java_library liệt kê trong deps tạo sẽ nằm trên classpath thời gian biên dịch của quy tắc này. Hơn nữa, việc đóng tạm thời deps, runtime_depsexports của chúng sẽ nằm trên classpath thời gian chạy.

Ngược lại, các mục tiêu trong thuộc tính data được đưa vào các tệp chạy nhưng không nằm trên cả đường dẫn lớp biên dịch và thời gian chạy.

srcs

List of labels; optional

Danh sách các tệp nguồn được xử lý để tạo mục tiêu. Thuộc tính này hầu như luôn bắt buộc. Hãy xem các trường hợp ngoại lệ bên dưới.

Các tệp nguồn thuộc loại .java được biên dịch. Trong trường hợp các tệp .java được tạo, bạn nên đặt tên của quy tắc tạo ở đây thay vì tên của chính tệp đó. Điều này không chỉ cải thiện khả năng đọc mà còn giúp quy tắc trở nên phù hợp hơn với các thay đổi trong tương lai: nếu quy tắc tạo tệp sẽ tạo ra nhiều tệp trong tương lai, bạn chỉ cần sửa một nơi: outs của quy tắc tạo. Bạn không nên liệt kê quy tắc tạo trong deps vì đó là quy tắc không hoạt động.

Các tệp nguồn thuộc loại .srcjar được giải nén và biên dịch. (Thao tác này sẽ hữu ích nếu bạn cần tạo một tập hợp các tệp .java bằng genrule.)

Quy tắc: nếu quy tắc (thường là genrule hoặc filegroup) tạo ra bất kỳ tệp nào nêu trên, thì các tệp này sẽ được sử dụng theo cách tương tự như cách mô tả tệp nguồn.

Đối số này hầu như luôn bắt buộc, ngoại trừ trường hợp thuộc tính main_class chỉ định một lớp trên đường dẫn lớp thời gian chạy hoặc bạn chỉ định đối số runtime_deps.

data

List of labels; optional

Danh sách các tệp mà thư viện này cần trong thời gian chạy. Xem nhận xét chung về data tại các thuộc tính tiêu biểu được quy định trong hầu hết các quy tắc tạo bản dựng.

Khi xây dựng java_library, Bazel sẽ không đặt các tệp này ở bất cứ đâu; nếu các tệp data được tạo, thì Bazel sẽ tạo các tệp này. Khi xây dựng một chương trình kiểm thử phụ thuộc vào java_library Bazel này, các bản sao chép hoặc liên kết tệp data sẽ được đưa vào vùng runfiles.

resources

List of labels; optional

Danh sách các tệp dữ liệu để đưa vào tệp jar Java.

Nếu bạn chỉ định tài nguyên, các tài nguyên đó sẽ được nhóm trong bình cùng với các tệp .class thông thường do quá trình biên dịch tạo ra. Vị trí của các tài nguyên bên trong tệp jar được xác định bởi cấu trúc dự án. Trước tiên, Bazel sẽ tìm bố cục thư mục chuẩn của Maven, (thư mục "src" theo sau là cháu của thư mục "resources"). Nếu không tìm thấy như vậy, Bazel sẽ tìm thư mục cấp cao nhất có tên "java" hoặc "javatests" (ví dụ: nếu một tài nguyên nằm tại <workspace root>/x/java/y/java/z, đường dẫn của tài nguyên sẽ là y/java/z. Không thể ghi đè phương pháp phỏng đoán này, tuy nhiên, thuộc tính resource_strip_prefix có thể dùng để chỉ định một thư mục thay thế cụ thể cho các tệp tài nguyên.

Tài nguyên có thể là tệp nguồn hoặc tệp được tạo.

generates_api

Boolean; optional; default is False

Thuộc tính này đánh dấu các trình xử lý chú giải tạo mã 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 hành động biên dịch của các quy tắc đó được lên lịch sau quy tắc tạo. Thuộc tính này chỉ dẫn Bazel đưa ra các giới hạn về lập 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 nếu cần.

javacopts

List of strings; optional

Các tuỳ chọn trình biên dịch bổ sung dành cho thư viện này. Tuỳ theo sự thay thế "Biến" và mã Bourne shell.

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.

Boolean; optional; default is False

Liệu thư viện này có chỉ được dùng để biên dịch chứ không phải trong thời gian chạy hay không. Hữu ích nếu môi trường thời gian chạy cung cấp thư viện. Ví dụ về những thư viện như vậy là các API IDE cho các trình bổ trợ IDE hoặc tools.jar cho mọi trình chạy trên JDK tiêu chuẩn.

Xin lưu ý rằng neverlink = 1 không ngăn trình biên dịch đưa nội dung từ thư viện này vào các mục tiêu biên dịch phụ thuộc vào dữ liệu đó, như được Đặc tả ngôn ngữ Java cho phép (ví dụ: Hằng số static final thuộc loại String hoặc loại gốc. Do đó, trường hợp sử dụng ưu tiên là khi thư viện thời gian chạy giống với thư viện biên dịch.

Nếu thư viện thời gian chạy khác với thư viện biên dịch, bạn phải đảm bảo rằng thư viện này chỉ khác ở những nơi mà JLS cấm trình biên dịch nội tuyến (và phải giữ cho tất cả các phiên bản trong tương lai của JLS).

output_licenses

Licence type; optional

Xem common attributes
plugins

List of labels; optional

Các trình bổ trợ biên dịch Java sẽ chạy vào thời gian biên dịch. Mỗi java_plugin được chỉ định trong thuộc tính này sẽ chạy mỗi khi 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 ra sẽ được đưa vào jar kết quả của quy tắc này.
processor_class

String; optional

Lớp bộ xử lý là loại lớp đủ điều kiện mà trình biên dịch Java sử dụng làm điểm truy cập cho trình xử lý chú giải. Nếu không được chỉ định, quy tắc này sẽ không đóng góp trình xử lý chú giải vào quá trình xử lý chú giải của trình biên dịch Java, nhưng classpath thời gian chạy của trình biên dịch vẫn sẽ được đưa vào đường dẫn trình xử lý chú giải của trình biên dịch. (Tính năng này chủ yếu dành cho trình bổ trợ Error Prone được tải từ đường dẫn của trình xử lý chú giải thông qua java.util.ServiceLoader.)
proguard_specs

List of labels; optional

Tệp được dùng làm thông số Proguard. Các dữ liệu này sẽ mô tả tập hợp các thông số kỹ thuật mà Proguard sẽ sử dụng. Nếu được chỉ định, các tập dữ liệu này sẽ được thêm vào bất kỳ mục tiêu 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 chứa các quy tắc cố định, chẳng hạn như -dontnote, -dontwarn, giả định không có tác dụng 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 thông số proguard_specs của android_binary để đảm bảo việc hợp nhất không tự động.
resource_jars

List of labels; optional

Ngừng sử dụng: Thay vào đó, hãy sử dụng java_import và deps hoặc runtime_deps.
resource_strip_prefix

String; optional

Tiền tố đường dẫn để tách khỏi các tài nguyên Java.

Nếu được chỉ định, tiền tố đường dẫn này sẽ bị xóa khỏi mọi tệp trong thuộc tính resources. Lỗi khi tệp tài nguyên không nằm trong thư mục này. Nếu không được chỉ định (mặc định), đường dẫn của tệp tài nguyên được xác định theo cùng logic với gói Java của các tệp nguồn. Ví dụ: tệp nguồn tại stuff/java/foo/bar/a.txt sẽ nằm tại foo/bar/a.txt.

java_runtime (thời gian chạy java)

Xem nguồn quy tắc
java_runtime(name, srcs, compatible_with, default_cds, deprecation, distribs, features, hermetic_srcs, java, java_home, lib_modules, licenses, restricted_to, tags, target_compatible_with, testonly, version, visibility)

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

Name; required

Tên duy nhất cho mục tiêu này.

srcs

List of labels; optional

Tất cả các tệp trong thời gian chạy.
default_cds

Label; optional

Tệp lưu trữ CDS mặc định cho java_runtime khép kín. Khi hermetic được bật cho một mục tiêu java_binary và nếu mục tiêu không cung cấp kho lưu trữ CDS của riêng mình bằng cách chỉ định thuộc tính classlist, thì CDS mặc định java_runtime sẽ được đóng gói trong tệp JAR triển khai hermetic.
hermetic_srcs

List of labels; optional

Cần các tệp trong thời gian chạy để triển khai khép kín.
java

Label; optional

Đường dẫn đến tệp thực thi java.
java_home

String; optional

Đường dẫn đến thư mục gốc của thời gian chạy. Tuỳ thuộc vào sự thay thế biến"Make". Nếu đường dẫn này là tuyệt đối, thì quy tắc này sẽ biểu thị một thời gian chạy Java không phải là ẩn số bằng một đường dẫn đã biết. Trong trường hợp đó, thuộc tính srcsjava phải trống.
lib_modules

Label; optional

Tệp lib/module cần có để triển khai theo kiểu khép kín.
version

Integer; optional; default is 0

Phiên bản tính năng của thời gian chạy Java. Tức là số nguyên do Runtime.version().feature() trả về.

chuỗi công cụ java

Xem nguồn quy tắc
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ụ được 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ừ phi bạn muốn điều chỉnh trình biên dịch Java.

Ví dụ

Một ví dụ đơn giản sẽ 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

Name; required

Tên duy nhất cho mục tiêu này.

android_lint_data

List of labels; optional

Các nhãn của công cụ có sẵn để mở rộng nhãn trong android_lint_jvm_opts.
android_lint_jvm_opts

List of strings; optional

Danh sách các đối số cho JVM khi gọi Android Lint.
android_lint_opts

List of strings; optional

Danh sách các đối số tìm lỗi mã nguồn của Android.
android_lint_package_configuration

List of labels; optional

Cấu hình Android Lint sẽ được áp dụng cho các nhóm gói được chỉ định.
android_lint_runner

Label; optional

Nhãn của trình chạy Android Lint, nếu có.
bootclasspath

List of labels; optional

Các mục nhập classpath khởi động trong Java. Tương ứng với cờ -bootclasspath của javac.
deps_checker

List of labels; optional

Nhãn của tệp jar triển khai ImportDepsChecker.
forcibly_disable_header_compilation

Boolean; optional; default is False

Ghi đè --java_header_compilation để tắt tính năng biên dịch tiêu đề trên các nền tảng không hỗ trợ, ví dụ: JDK 7 Bazel.
genclass

List of labels; required

Nhãn của jar triển khai GenClass.
header_compiler

List of labels; optional

Nhãn của trình biên dịch tiêu đề. Bắt buộc nếu --java_header_compilation được bật.
header_compiler_direct

List of labels; optional

Nhãn tuỳ chọn của trình biên dịch tiêu đề để sử dụng cho các hành động classpath trực tiếp không bao gồm bất kỳ trình xử lý chú giải tạo API nào.

Công cụ này không hỗ trợ xử lý chú giải.

ijar

List of labels; required

Nhãn của ijar có thể thực thi.
jacocorunner

Label; optional

Nhãn của bình triển khai JacocoCoverageRunner.
java_runtime

Label; required

java_runtime để sử dụng với chuỗi công cụ này. Giá trị mặc định là java_runtime trong cấu hình thực thi.
javabuilder

List of labels; required

Nhãn của jar triển khai JavaBuilder.
javabuilder_data

List of labels; optional

Nhãn dữ liệu có sẵn để mở rộng nhãn trong javabuilder_jvm_opts.
javabuilder_jvm_opts

List of strings; optional

Danh sách các đối số cho JVM khi gọi JavaBuilder.
javac_supports_multiplex_workers

Boolean; optional; default is True

True nếu JavaBuilder hỗ trợ chạy dưới dạng một trình thực thi đa thành phần (multix) và trả về false nếu không làm như vậy.
javac_supports_workers

Boolean; optional; default is True

True nếu JavaBuilder hỗ trợ chạy dưới dạng worker ổn định, false nếu không hỗ trợ.
javacopts

List of strings; optional

Danh sách các đối số bổ sung cho trình biên dịch Java. Vui lòng tham khảo tài liệu về trình biên dịch Java để biết danh sách đầy đủ các cờ trình biên dịch Java có thể có.
jvm_opts

List of strings; optional

Danh sách các đối số cho JVM khi gọi trình biên dịch Java. Vui lòng tham khảo tài liệu về máy ảo Java để biết danh sách đầy đủ các cờ có thể áp dụng cho tuỳ chọn này.
oneversion

Label; optional

Nhãn của tệp nhị phân thực thi một phiên bản.
oneversion_whitelist

Label; optional

Nhãn danh sách trắng một phiên bản.
package_configuration

List of labels; optional

Cấu hình phải áp dụng cho nhóm gói được chỉ định.
proguard_allowlister

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

Nhãn của danh sách cho phép trên Proguard.
resourcejar

List of labels; optional

Nhãn của trình tạo jar tài nguyên có thể thực thi.
singlejar

List of labels; required

Nhãn của hũ triển khai SingleJar.
source_version

String; optional

Phiên bản nguồn Java (ví dụ: "6" hoặc "7"). Tệp này chỉ định tập hợp cấu trúc mã được phép trong mã nguồn Java.
target_version

String; optional

Phiên bản đích Java (ví dụ: "6" hoặc "7"). Lớp này chỉ định thời gian chạy Java mà lớp sẽ được tạo.
timezone_data

Label; optional

Nhãn của một bình tài nguyên có chứa dữ liệu múi giờ. Nếu được đặt, dữ liệu múi giờ sẽ được thêm dưới dạng phần phụ thuộc ngầm thời gian chạy của tất cả các quy tắc java_binary.
tools

List of labels; optional

Nhãn của các công cụ có sẵn để mở rộng nhãn trong jvm_opts.
turbine_data

List of labels; optional

Các nhãn dữ liệu có sẵn để mở rộng nhãn trong turbine_jvm_opts.
turbine_jvm_opts

List of strings; optional

Danh sách các đối số cho JVM khi gọi tuabin.
xlint

List of strings; optional

Danh sách cảnh báo để thêm hoặc xóa khỏi danh sách mặc định. Đặt dấu gạch ngang đứng trước để xóa. Vui lòng xem tài liệu Javac về các tuỳ chọn -Xlint để biết thêm thông tin.