Quy tắc Java

Báo cáo sự cố Xem nguồn Hằng đêm · 7,3 · 7.2 · 7.1 · 7 · 6,5

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 tập lệnh shell bao bọc có cùng tên với quy tắc. Tập lệnh shell bao bọc sử dụng một đường dẫn lớp, trong đó có một tệp jar cho mỗi đường dẫn 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, bất kỳ tập lệnh nào không trống Biến môi trường JAVABIN sẽ được ưu tiên so với phiên bản đã chỉ định 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ó thể định cấu hình và biến môi trường được trình bao bọc chấp nhận.

Các 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 dữ liệu 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: Tệp lưu trữ chứa các nguồn ("nguồn cái lọ").
  • name_deploy.jar: Lưu trữ Java phù hợp để triển khai (chỉ được tạo nếu có yêu cầu rõ ràng).

    Tạo mục tiêu <name>_deploy.jar cho quy tắc của bạn tạo một tệp jar độc lập với một tệp kê khai cho phép tệp này chạy bằng Lệnh java -jar hoặc với --singlejar của tập lệnh trình bao bọc . Bạn nên ưu tiên sử dụng tập lệnh trình bao bọc hơn là 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 triển khai chứa tất cả các lớp mà trình tải lớp sẽ tìm thấy đã tìm đường dẫn lớp trong tập lệnh trình bao bọc của tệp nhị phân từ đầu đến cuối. Điều 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 thông báo này được tải tự động vào JVM trong thời gian chạy.

    Nếu mục tiêu của bạn chỉ định một trình chạy , 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. Đối tượng 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 của bạn, tất cả đều được liên kết thành tệp nhị phân tĩnh. Các byte của tệp jar thực tế sẽ là được thêm vào tệp nhị phân gốc đó, tạo ra một blob nhị phân 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 giống 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ừ quá trình đóng bắc cầu của mục tiêu. Các URL 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 cho phép sử dụng thuộc tính deps trong quy tắc java_binary khi không có srcs; một quy tắc như vậy đòi hỏi bạn main_class được cung cấp bởi runtime_deps

Đoạn mã sau 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; bắt buộc

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à đ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 gọi Main.java, thì tên của bạn có thể là Main.
deps

Danh sách nhãn; giá trị mặc định là []

Danh sách thư viện khác sẽ được liên kết với mục tiêu. Xem nhận xét chung về deps tại Các thuộc tính điển hình được xác định bởi hầu hết các quy tắc xây dựng.
srcs

Danh sách nhãn; giá trị mặc định là []

Danh sách 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; xem các ngoại lệ bên dưới.

Các tệp nguồn thuộc loại .java sẽ được biên dịch. Trong trường hợp đã tạo Tệp .java, bạn nên đặt tên cho quy tắc tạo tại đâ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 thích ứng hơn với các thay đổi trong tương lai: nếu quy tắc tạo tạo ra tệp khác nhau 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ì khu vực này không hoạt động.

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

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, chúng sẽ được sử dụng theo cách tương tự như được mô tả cho nguồn tệp.

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

resources

Danh sách nhãn; giá trị mặc định là []

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

Nếu các tài nguyên được chỉ định, chúng sẽ được nhóm trong bình cùng với các tài nguyên thông thường .class tệp do quá trình biên dịch tạo ra. Vị trí của tài nguyên bên trong của tệp jar được xác định theo cấu trúc dự án. Ban đầu, Bazel tìm kiếm Maven bố cục thư mục chuẩn, (thư mục "src" theo sau là thư mục con "resources" (tài nguyên). Nếu không tìm thấy, Bazel sau đó tìm thư mục cấp cao nhất có tên là "java" hoặc "javatests" (vì vậy, đối với Ví dụ: nếu tài nguyên nằm tại <workspace root>/x/java/y/java/z, thì đườ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, bạn có thể sử dụng thuộc tính resource_strip_prefix để chỉ định một thư mục thay thế cụ thể cho tệp tài nguyên.

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

classpath_resources

Danh sách nhãn; giá trị mặc định là []

ĐỪNG SỬ DỤNG LỰA CHỌN NÀY TRỪ KHI KHÔNG CÓ CÁCH NÀO KHÁC)

Danh sách các tài nguyên phải được đặt ở gốc của cây java. Thuộc tính này có mục đích duy nhất là hỗ trợ các thư viện của bên thứ ba yêu cầu tài nguyên của họ được tìm thấy trên đường dẫn lớp chính xác là "myconfig.xml". Nội dung này chỉ được phép trên tệp nhị phân chứ không phải thư viện, do nguy cơ xung đột không gian tên.

create_executable

Boolean; không thể định cấu hình; giá trị mặc định là True

Không dùng nữa, chuyển sang dùng java_single_jar.
deploy_env

Danh sách nhãn; giá trị mặc định là []

Danh sách các mục tiêu java_binary khác đại diện cho việc triển khai môi trường 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 trình bổ trợ khác sẽ tải java_binary.
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à ngăn triển khai) của tệp nhị phân được chia sẻ giữa tệp nhị phân và các mục tiêu được chỉ định trong deploy_env.
deploy_manifest_lines

Danh sách các chuỗi; giá trị mặc định là []

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 là chủ đề thành phép thế "Tạo biến".
javacopts

Danh sách các chuỗi; giá trị mặc định là []

Các tuỳ chọn bổ sung của trình biên dịch cho thư viện này. Theo sự thay thế "Tạo biến"Mã hoá bằng mã thông báo shell Bourne.

Các tuỳ chọn trình biên dịch này được chuyển đến javac sau các tuỳ chọn của trình biên dịch chung.

jvm_flags

Danh sách các chuỗi; giá trị mặc định là []

Danh sách cờ để nhúng vào tập lệnh trình bao bọc được tạo để chạy tệp nhị phân này. Chủ đề $(location) và Phép thế "Tạo biến"Tạo mã thông báo shell Bourne.

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

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

launcher

Nhãn; giá trị mặc định là None

Chỉ định một tệp nhị phân sẽ được sử dụng để chạy chương trình Java của bạn thay vì chương trình bin/java thông thường đi kèm với JDK. Mục tiêu phải là cc_binary. Mọi cc_binary mà triển khai Bạn có thể chỉ định 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 chạy JDK thông thường (bin/java hoặc java.exe).

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

Lưu ý rằng các phần phụ thuộc gốc (C++, SWIG, JNI) sẽ được xây dựng 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 tạo 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 xoá 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, thì các phần phụ thuộc gốc (C++) sẽ ở dạng tĩnh được liên kết với tệp nhị phân có tên {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ã mà nó cho là không dùng đến khỏi tệp nhị phân thu được, có nghĩa là có thể không liên kết mã C++ nào chỉ qua JNI trừ phi mà 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 không phải trình chạy JDK mặc định, định dạng của *_deploy.jar đầu ra thay đổi. Xem chính Tài liệu về java_binary để biết thông tin chi tiết.

main_class

String; giá trị mặc định là ""

Tên của lớp có phương thức main() dùng làm điểm truy cập. Nếu một quy tắc sử dụng chế độ này, thì quy tắc không cần 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ừ 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: nội dung có thể được biên dịch theo quy tắc này (từ srcs) hoặc do các phần phụ thuộc trực tiếp hoặc bắc cầu cung cấp (thông qua runtime_deps hoặc deps). Nếu lớp này không dùng được, thì tệp nhị phân sẽ bị lỗi trong thời gian chạy; ở đó không phải là kiểm tra thời gian xây dựng.

plugins

Danh sách nhãn; giá trị mặc định là []

Các trình bổ trợ trình biên dịch Java để 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 bất cứ khi nào quy tắc này sẽ được xây dựng. 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. Tài liệu tham khảo do trình bổ trợ tạo ra sẽ được đưa vào ngăn chứa kết quả của quy tắc này.
resource_jars

Danh sách nhãn; giá trị mặc định là []

Không dùng nữa: Thay vào đó, hãy sử dụng java_import và deps hoặc hay Runtime_deps.
resource_strip_prefix

String; giá trị mặc định là ""

Tiền tố đường dẫn để loại bỏ khỏi tài nguyên Java.

Nếu được chỉ định, tiền tố đường dẫn này sẽ bị xoá khỏi mọi tệp trong resources . Nếu tệp tài nguyên không nằm trong thư mục này thì xảy ra lỗi. 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 một làm 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ẽ đặt tại foo/bar/a.txt.

runtime_deps

Danh sách nhãn; giá trị mặc định là []

Các thư viện chỉ cung cấp cho tệp nhị phân cuối cùng hoặc kiểm thử trong thời gian chạy. Giống như deps thông thường, các thành phần 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ư chúng, chứ không phải trên đường dẫn lớp thời gian biên dịch. Các phần phụ thuộc chỉ cần đến trong thời gian chạy phải là được liệt kê 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

Số nguyên; giá trị mặc định là -1

Liệu có mã hoá thông tin bản dựng thành tệp nhị phân hay không. Các giá trị có thể có:
  • stamp = 1: Luôn đóng dấu thông tin bản dựng vào tệp nhị phân, ngay cả trong --nostamp bản dựng. Chiến dịch này nên tránh cài đặt, vì nó có thể tắt chức năng lưu vào bộ nhớ đệm từ xa đối với tệp nhị phân và mọi thao tác hạ nguồn phụ thuộc vào mã đó.
  • stamp = 0: Luôn thay thế thông tin bản dựng bằng các giá trị hằng số. Chiến dịch này cho phép lưu kết quả bản dựng tốt vào bộ nhớ đệm.
  • stamp = -1: Bạn có thể kiểm soát việc nhúng thông tin bản dựng bằng Cờ --[no]stamp.

Tệp nhị phân đã đóng dấu không được tạo lại trừ phi các phần phụ thuộc của chúng thay đổi.

use_launcher

Boolean; giá trị mặc định là True

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

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

use_testrunner

Boolean; giá trị mặc định là False

Sử dụng trình chạy kiểm thử (theo mặc định) com.google.testing.junit.runner.BazelTestRunner) làm lớp điểm truy cập chính cho chương trình Java và cung cấp lớp kiểm thử vào trình chạy kiểm thử dưới dạng giá trị bazel.test_suite thuộc tính hệ thống của chúng tôi. Bạn có thể sử dụng tuỳ chọn này để ghi đè giá trị mặc định tức là sử dụng trình chạy kiểm thử cho java_test quy tắc, và không sử dụng dữ liệu này cho các quy tắc java_binary. Không có khả năng bạn sẽ muốn làm việc này. Một mục dùng cho AllTest các quy tắc được gọi bởi một quy tắc khác (để thiết lập cơ sở dữ liệu trước khi chạy thử nghiệm). AllTest quy tắc phải được khai báo là java_binary, nhưng phải vẫ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 trình 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 các thư viện cho java_libraryjava_binary quy tắc.

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; giá trị mặc định là []

Danh sách thư viện khác sẽ được liên kết với mục tiêu. Hãy xem java_library.deps.
constraints

Danh sách các chuỗi; không thể định cấu hình; giá trị mặc định là []

Các hạn chế bổ sung được đặt ra cho quy tắc này dưới dạng thư viện Java.
exports

Danh sách nhãn; giá trị mặc định là []

Các mục tiêu để cung cấp cho người dùng quy tắc này. Hãy xem java_library.exports.
jars

Danh sách nhãn; bắt buộc

Danh sách 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; giá trị mặc định là False

Chỉ dùng thư viện này để biên dịch chứ không dùng 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 trong quá trình thực thi. Ví dụ về các thư viện như thế này là API IDE cho các trình bổ trợ IDE hoặc tools.jar cho bất kỳ trình bổ trợ nào đang chạy trên JDK chuẩn.
proguard_specs

Danh sách nhãn; giá trị mặc định là []

Các tệp dùng làm thông số kỹ thuật Proguard. Phần này mô tả tập hợp thông số kỹ thuật mà Proguard sử dụng. Nếu được chỉ định, chúng 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 được đưa vào đây chỉ được có các quy tắc không thay đổi giá trị như -dontnote, -dontwarn, giả định tác dụng không mong muốn và các quy tắc bắt đầu bằng -keep. Các lựa chọn khác chỉ có thể xuất hiện trong proguard_specs của android_binary để đảm bảo hợp nhất không tự động.
runtime_deps

Danh sách nhãn; giá trị mặc định là []

Các thư viện chỉ cung cấp cho tệp nhị phân cuối cùng hoặc kiểm thử trong thời gian chạy. Hãy xem java_library.runtime_deps.
srcjar

Nhãn; giá trị mặc định là None

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

java_library

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 thành một tệp .jar.

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

  • libname.jar: Một kho lưu trữ Java chứa các tệp lớp.
  • libname-src.jar: Tệp lưu trữ chứa các nguồn ("nguồn cái lọ").

Đố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; giá trị mặc định là []

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

Các lọ tạo bằng java_library quy tắc được liệt kê trong deps sẽ được bật vào đường dẫn lớp thời gian biên dịch của quy tắc này. Ngoài ra, việc đóng bắc cầu của deps, runtime_depsexports sẽ diễn ra vào đường dẫn lớp 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 trên cả đường dẫn lớp thời gian biên dịch lẫn đường dẫn lớp thời gian chạy.

srcs

Danh sách nhãn; giá trị mặc định là []

Danh sách 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; xem các ngoại lệ bên dưới.

Các tệp nguồn thuộc loại .java sẽ được biên dịch. Trong trường hợp đã tạo Tệp .java, bạn nên đặt tên cho quy tắc tạo tại đâ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 thích ứng hơn với các thay đổi trong tương lai: nếu quy tắc tạo tạo ra tệp khác nhau 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ì khu vực này không hoạt động.

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

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, chúng sẽ được sử dụng theo cách tương tự như được mô tả cho nguồn tệp.

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

data

Danh sách nhãn; giá trị mặc định là []

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 điển hình được xác định bởi hầu hết các quy tắc xây dựng.

Khi tạo java_library, Bazel không đặt các tệp này vào bất kỳ nơi nào; nếu data tệp được tạo rồi Bazel tạo các tệp đó. Khi xây dựng một phụ thuộc vào java_library Bazel này sao chép hoặc liên kết data tệp vào vùng chạy tệp.

resources

Danh sách nhãn; giá trị mặc định là []

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

Nếu các tài nguyên được chỉ định, chúng sẽ được nhóm trong bình cùng với các tài nguyên thông thường .class tệp do quá trình biên dịch tạo ra. Vị trí của tài nguyên bên trong của tệp jar được xác định theo cấu trúc dự án. Ban đầu, Bazel tìm kiếm Maven bố cục thư mục chuẩn, (thư mục "src" theo sau là thư mục con "resources" (tài nguyên). Nếu không tìm thấy, Bazel sau đó tìm thư mục cấp cao nhất có tên là "java" hoặc "javatests" (vì vậy, đối với Ví dụ: nếu tài nguyên nằm tại <workspace root>/x/java/y/java/z, thì đườ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, bạn có thể sử dụng thuộc tính resource_strip_prefix để chỉ định một thư mục thay thế cụ thể cho tệp tài nguyên.

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

exported_plugins

Danh sách nhãn; giá trị mặc định là []

Danh sách các java_plugin (ví dụ: chú giải bộ xử lý) để 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 java_plugin được chỉ định sẽ được áp dụng cho bất kỳ thư viện nào sẽ phụ thuộc trực tiếp vào thư viện này, giống như khi thư viện đó đã khai báo rõ ràng trong plugins.

exports

Danh sách nhãn; giá trị mặc định là []

Thư viện đã xuất.

Quy tắc liệt kê ở đây sẽ áp dụng cho quy tắc gốc, như thể nhà xuất bản mẹ một cách rõ ràng 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: quy tắc X có thể truy cập vào mã trong Y nếu có phần phụ thuộc đường dẫn giữa chúng bắt đầu bằng cạnh deps, theo sau là 0 hoặc nhiều hơn exports cạnh. Hãy cùng xem một số ví dụ để minh hoạ đ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 bắc cầu của A, vì vậy việc thay đổi nguồn của C và xây dựng 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 rằng A phải khai báo C trong deps hoặc B có thể giúp A dễ dàng hơn (và mọi nội dung có thể phụ thuộc vào A) bằng cách khai báo C trong (B) exports .

Tất cả quy tắc gốc trực tiếp đều áp dụng thao tác đóng thư viện đã xuất. Hãy bình tĩnh một chút ví dụ khác nhau: A phụ thuộc vào B, B phụ thuộc vào C và D, đồng thời xuất ra C nhưng không xuất ra 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. Nếu C và D xuất một số thư viện, thì C' và D' A chỉ có thể truy cập C' nhưng không phải D'.

Lưu ý quan trọng: quy tắc được xuất không phải là phần phụ thuộc thông thường. Bám sát ví dụ trước, nếu B xuất khẩu C và cũng muốn sử dụng C, thì B phải liệt kê riêng C deps.

javacopts

Danh sách các chuỗi; giá trị mặc định là []

Các tuỳ chọn bổ sung của trình biên dịch cho thư viện này. Theo sự thay thế "Tạo biến"Mã hoá bằng mã thông báo shell Bourne.

Các tuỳ chọn trình biên dịch này được chuyển đến javac sau các tuỳ chọn của trình biên dịch chung.

Boolean; giá trị mặc định là False

Liệu thư viện này 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 trong quá trình thực thi. Ví dụ trong số các thư viện đó là API IDE cho trình bổ trợ IDE hoặc tools.jar cho bất kỳ nội dung nào đang chạy trên JDK chuẩn.

Lưu ý rằng neverlink = 1 không ngăn trình biên dịch chèn nội dung cùng dòng từ thư viện này thành các mục tiêu biên dịch phụ thuộc vào thư viện đó, khi được Java cho phép Quy cách ngôn ngữ (ví dụ: Hằng số static final của String hoặc kiểu dữ liệu nguyên thuỷ). Do đó, trường hợp sử dụng ưu tiên là khi thư viện thời gian chạy được 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 đó chỉ khác ở những vị trí mà JLS cấm trình biên dịch cùng dòng (và phải giữ cho tất cả các phiên bản trong tương lai của JLS).

plugins

Danh sách nhãn; giá trị mặc định là []

Các trình bổ trợ trình biên dịch Java để 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 bất cứ khi nào quy tắc này sẽ được xây dựng. 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. Tài liệu tham khảo do trình bổ trợ tạo ra sẽ được đưa vào ngăn chứa kết quả của quy tắc này.
proguard_specs

Danh sách nhãn; giá trị mặc định là []

Các tệp dùng làm thông số kỹ thuật Proguard. Phần này mô tả tập hợp thông số kỹ thuật mà Proguard sử dụng. Nếu được chỉ định, chúng 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 được đưa vào đây chỉ được có các quy tắc không thay đổi giá trị như -dontnote, -dontwarn, giả định tác dụng không mong muốn và các quy tắc bắt đầu bằng -keep. Các lựa chọn khác chỉ có thể xuất hiện trong proguard_specs của android_binary để đảm bảo hợp nhất không tự động.
resource_jars

Danh sách nhãn; giá trị mặc định là []

Không dùng nữa: Thay vào đó, hãy sử dụng java_import và deps hoặc hay Runtime_deps.
resource_strip_prefix

String; giá trị mặc định là ""

Tiền tố đường dẫn để loại bỏ khỏi tài nguyên Java.

Nếu được chỉ định, tiền tố đường dẫn này sẽ bị xoá khỏi mọi tệp trong resources . Nếu tệp tài nguyên không nằm trong thư mục này thì xảy ra lỗi. 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 một làm 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ẽ đặt tại foo/bar/a.txt.

runtime_deps

Danh sách nhãn; giá trị mặc định là []

Các thư viện chỉ cung cấp cho tệp nhị phân cuối cùng hoặc kiểm thử trong thời gian chạy. Giống như deps thông thường, các thành phần 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ư chúng, chứ không phải trên đường dẫn lớp thời gian biên dịch. Các phần phụ thuộc chỉ cần đến trong thời gian chạy phải là được liệt kê 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ừ các tệp .proto.

deps phải trỏ đến các 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; bắt buộc

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

deps

Danh sách nhãn; giá trị mặc định là []

Danh sách 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ừ các tệp .proto.

deps phải trỏ đến các 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; bắt buộc

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

deps

Danh sách nhãn; giá trị mặc định là []

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

java_test

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 chương trình 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.

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

  • name.jar: Một tệp lưu trữ Java.
  • name_deploy.jar: Phù hợp với tệp lưu trữ Java cho việc triển khai. (Chỉ được tạo khi có yêu cầu rõ ràng.) Xem nội dung mô tả về Đầu ra name_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 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; bắt buộc

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

deps

Danh sách nhãn; giá trị mặc định là []

Danh sách thư viện khác sẽ được liên kết với mục tiêu. Xem nhận xét chung về deps tại Các thuộc tính điển hình được xác định bởi hầu hết các quy tắc xây dựng.
srcs

Danh sách nhãn; giá trị mặc định là []

Danh sách 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; xem các ngoại lệ bên dưới.

Các tệp nguồn thuộc loại .java sẽ được biên dịch. Trong trường hợp đã tạo Tệp .java, bạn nên đặt tên cho quy tắc tạo tại đâ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 thích ứng hơn với các thay đổi trong tương lai: nếu quy tắc tạo tạo ra tệp khác nhau 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ì khu vực này không hoạt động.

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

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, chúng sẽ được sử dụng theo cách tương tự như được mô tả cho nguồn tệp.

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

resources

Danh sách nhãn; giá trị mặc định là []

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

Nếu các tài nguyên được chỉ định, chúng sẽ được nhóm trong bình cùng với các tài nguyên thông thường .class tệp do quá trình biên dịch tạo ra. Vị trí của tài nguyên bên trong của tệp jar được xác định theo cấu trúc dự án. Ban đầu, Bazel tìm kiếm Maven bố cục thư mục chuẩn, (thư mục "src" theo sau là thư mục con "resources" (tài nguyên). Nếu không tìm thấy, Bazel sau đó tìm thư mục cấp cao nhất có tên là "java" hoặc "javatests" (vì vậy, đối với Ví dụ: nếu tài nguyên nằm tại <workspace root>/x/java/y/java/z, thì đườ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, bạn có thể sử dụng thuộc tính resource_strip_prefix để chỉ định một thư mục thay thế cụ thể cho tệp tài nguyên.

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

classpath_resources

Danh sách nhãn; giá trị mặc định là []

ĐỪNG SỬ DỤNG LỰA CHỌN NÀY TRỪ KHI KHÔNG CÓ CÁCH NÀO KHÁC)

Danh sách các tài nguyên phải được đặt ở gốc của cây java. Thuộc tính này có mục đích duy nhất là hỗ trợ các thư viện của bên thứ ba yêu cầu tài nguyên của họ được tìm thấy trên đường dẫn lớp chính xác là "myconfig.xml". Nội dung này chỉ được phép trên tệp nhị phân chứ không phải thư viện, do nguy cơ xung đột không gian tên.

create_executable

Boolean; không thể định cấu hình; giá trị mặc định là True

Không dùng nữa, chuyển sang dùng java_single_jar.
deploy_manifest_lines

Danh sách các chuỗi; giá trị mặc định là []

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 là chủ đề thành phép thế "Tạo biến".
javacopts

Danh sách các chuỗi; giá trị mặc định là []

Các tuỳ chọn bổ sung của trình biên dịch cho thư viện này. Theo sự thay thế "Tạo biến"Mã hoá bằng mã thông báo shell Bourne.

Các tuỳ chọn trình biên dịch này được chuyển đến javac sau các tuỳ chọn của trình biên dịch chung.

jvm_flags

Danh sách các chuỗi; giá trị mặc định là []

Danh sách cờ để nhúng vào tập lệnh trình bao bọc được tạo để chạy tệp nhị phân này. Chủ đề $(location) và Phép thế "Tạo biến"Tạo mã thông báo shell Bourne.

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

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

launcher

Nhãn; giá trị mặc định là None

Chỉ định một tệp nhị phân sẽ được sử dụng để chạy chương trình Java của bạn thay vì chương trình bin/java thông thường đi kèm với JDK. Mục tiêu phải là cc_binary. Mọi cc_binary mà triển khai Bạn có thể chỉ định 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 chạy JDK thông thường (bin/java hoặc java.exe).

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

Lưu ý rằng các phần phụ thuộc gốc (C++, SWIG, JNI) sẽ được xây dựng 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 tạo 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 xoá 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, thì các phần phụ thuộc gốc (C++) sẽ ở dạng tĩnh được liên kết với tệp nhị phân có tên {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ã mà nó cho là không dùng đến khỏi tệp nhị phân thu được, có nghĩa là có thể không liên kết mã C++ nào chỉ qua JNI trừ phi mà 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 không phải trình chạy JDK mặc định, định dạng của *_deploy.jar đầu ra thay đổi. Xem chính Tài liệu về java_binary để biết thông tin chi tiết.

main_class

String; giá trị mặc định là ""

Tên của lớp có phương thức main() dùng làm điểm truy cập. Nếu một quy tắc sử dụng chế độ này, thì quy tắc không cần 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ừ 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: nội dung có thể được biên dịch theo quy tắc này (từ srcs) hoặc do các phần phụ thuộc trực tiếp hoặc bắc cầu cung cấp (thông qua runtime_deps hoặc deps). Nếu lớp này không dùng được, thì tệp nhị phân sẽ bị lỗi trong thời gian chạy; ở đó không phải là kiểm tra thời gian xây dựng.

plugins

Danh sách nhãn; giá trị mặc định là []

Các trình bổ trợ trình biên dịch Java để 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 bất cứ khi nào quy tắc này sẽ được xây dựng. 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. Tài liệu tham khảo do trình bổ trợ tạo ra sẽ được đưa vào ngăn chứa kết quả của quy tắc này.
resource_jars

Danh sách nhãn; giá trị mặc định là []

Không dùng nữa: Thay vào đó, hãy sử dụng java_import và deps hoặc hay Runtime_deps.
resource_strip_prefix

String; giá trị mặc định là ""

Tiền tố đường dẫn để loại bỏ khỏi tài nguyên Java.

Nếu được chỉ định, tiền tố đường dẫn này sẽ bị xoá khỏi mọi tệp trong resources . Nếu tệp tài nguyên không nằm trong thư mục này thì xảy ra lỗi. 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 một làm 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ẽ đặt tại foo/bar/a.txt.

runtime_deps

Danh sách nhãn; giá trị mặc định là []

Các thư viện chỉ cung cấp cho tệp nhị phân cuối cùng hoặc kiểm thử trong thời gian chạy. Giống như deps thông thường, các thành phần 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ư chúng, chứ không phải trên đường dẫn lớp thời gian biên dịch. Các phần phụ thuộc chỉ cần đến trong thời gian chạy phải là được liệt kê 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

Số nguyên; giá trị mặc định là 0

Liệu có mã hoá thông tin bản dựng thành tệp nhị phân hay không. Các giá trị có thể có:
  • stamp = 1: Luôn đóng dấu thông tin bản dựng vào tệp nhị phân, ngay cả trong --nostamp bản dựng. Chiến dịch này nên tránh cài đặt, vì nó có thể tắt chức năng lưu vào bộ nhớ đệm từ xa đối với tệp nhị phân và mọi thao tác hạ nguồn phụ thuộc vào mã đó.
  • stamp = 0: Luôn thay thế thông tin bản dựng bằng các giá trị hằng số. Chiến dịch này cho phép lưu kết quả bản dựng tốt vào bộ nhớ đệm.
  • stamp = -1: Bạn có thể kiểm soát việc nhúng thông tin bản dựng bằng Cờ --[no]stamp.

Tệp nhị phân đã đóng dấu không được tạo lại trừ phi các phần phụ thuộc của chúng thay đổi.

test_class

String; giá trị mặc định là ""

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

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

Thuộc tính này chỉ định tên của lớp Java sẽ được chạy kiểm tra này. Việc thiết lập chế độ này hiếm khi xảy ra. Nếu đối số này bị bỏ qua, giá trị này sẽ được suy ra bằng cách sử dụng name của mục tiêu và nguồn-gốc-tương đối. Nếu thử nghiệm nằm ngoài phạm vi thư mục gốc của nguồn, Bazel sẽ báo cáo lỗi nếu test_class chưa được đặt.

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

Thuộc tính này cho phép một vài quy tắc java_test chia sẻ cùng một Test (TestCase, TestSuite, ...). Giá thông thường thông tin bổ sung sẽ được chuyển (ví dụ: qua jvm_flags=['-Dkey=value']) để sẽ khác nhau ở mỗi trường hợp, chẳng hạn như chạy một của các bài kiểm thử cụ thể. Thuộc tính này cũng cho phép sử dụng Các chương trình kiểm thử Java bên ngoài cây javatests.

use_launcher

Boolean; giá trị mặc định là True

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

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

use_testrunner

Boolean; giá trị mặc định là True

Sử dụng trình chạy kiểm thử (theo mặc định) com.google.testing.junit.runner.BazelTestRunner) làm lớp điểm truy cập chính cho chương trình Java và cung cấp lớp kiểm thử vào trình chạy kiểm thử dưới dạng giá trị bazel.test_suite thuộc tính hệ thống của chúng tôi. Bạn có thể sử dụng tuỳ chọn này để ghi đè giá trị mặc định tức là sử dụng trình chạy kiểm thử cho java_test quy tắc, và không sử dụng dữ liệu này cho các quy tắc java_binary. Không có khả năng bạn sẽ muốn làm việc này. Một mục dùng cho AllTest các quy tắc được gọi bởi một quy tắc khác (để thiết lập cơ sở dữ liệu trước khi chạy thử nghiệm). AllTest quy tắc phải được khai báo là java_binary, nhưng phải vẫ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 trình chạy kiểm thử bằng thuộc tính main_class.

java_package_configuration

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 tập hợp các gói. Có thể thêm cấu hình vào java_toolchain.javacopts giây.

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; giá trị mặc định là []

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

Danh sách các chuỗi; giá trị mặc định là []

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

Danh sách nhãn; giá trị mặc định là []

Tập hợp các package_group cấu hình sẽ được áp dụng.

java_plugin

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ợ chỉ được hỗ trợ là trình xử lý chú giải. java_library hoặc Quy tắ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 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 công cụ này bằng cách sử dụng exported_plugins.

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

  • libname.jar: Một tệp lưu trữ Java.

Đối số giống với java_library, ngoại trừ để 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; giá trị mặc định là []

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

Các lọ tạo bằng java_library quy tắc được liệt kê trong deps sẽ được bật vào đường dẫn lớp thời gian biên dịch của quy tắc này. Ngoài ra, việc đóng bắc cầu của deps, runtime_depsexports sẽ diễn ra vào đường dẫn lớp 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 trên cả đường dẫn lớp thời gian biên dịch lẫn đường dẫn lớp thời gian chạy.

srcs

Danh sách nhãn; giá trị mặc định là []

Danh sách 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; xem các ngoại lệ bên dưới.

Các tệp nguồn thuộc loại .java sẽ được biên dịch. Trong trường hợp đã tạo Tệp .java, bạn nên đặt tên cho quy tắc tạo tại đâ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 thích ứng hơn với các thay đổi trong tương lai: nếu quy tắc tạo tạo ra tệp khác nhau 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ì khu vực này không hoạt động.

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

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, chúng sẽ được sử dụng theo cách tương tự như được mô tả cho nguồn tệp.

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

data

Danh sách nhãn; giá trị mặc định là []

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 điển hình được xác định bởi hầu hết các quy tắc xây dựng.

Khi tạo java_library, Bazel không đặt các tệp này vào bất kỳ nơi nào; nếu data tệp được tạo rồi Bazel tạo các tệp đó. Khi xây dựng một phụ thuộc vào java_library Bazel này sao chép hoặc liên kết data tệp vào vùng chạy tệp.

resources

Danh sách nhãn; giá trị mặc định là []

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

Nếu các tài nguyên được chỉ định, chúng sẽ được nhóm trong bình cùng với các tài nguyên thông thường .class tệp do quá trình biên dịch tạo ra. Vị trí của tài nguyên bên trong của tệp jar được xác định theo cấu trúc dự án. Ban đầu, Bazel tìm kiếm Maven bố cục thư mục chuẩn, (thư mục "src" theo sau là thư mục con "resources" (tài nguyên). Nếu không tìm thấy, Bazel sau đó tìm thư mục cấp cao nhất có tên là "java" hoặc "javatests" (vì vậy, đối với Ví dụ: nếu tài nguyên nằm tại <workspace root>/x/java/y/java/z, thì đườ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, bạn có thể sử dụng thuộc tính resource_strip_prefix để chỉ định một thư mục thay thế cụ thể cho tệp tài nguyên.

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

generates_api

Boolean; giá trị mặc định là False

Thuộc tính này đánh dấu những trình xử lý chú giải tạo mã API.

Nếu quy tắc sử dụng trình xử lý chú giải tạo API, thì các quy tắc khác Mã này chỉ có thể tham chiếu đến mã được tạo nếu các hành động biên dịch được lên lịch sau quy tắc tạo. Chiến dịch này hướng dẫn Bazel đưa ra các hạn chế về việc lập lịch biểu khi --java_header_compilation được bật.

CẢNH BÁO: Thuộc tính này ảnh hưởng đến bản dựng hiệu suất, hãy chỉ sử dụng nếu cần.

javacopts

Danh sách các chuỗi; giá trị mặc định là []

Các tuỳ chọn bổ sung của trình biên dịch cho thư viện này. Theo sự thay thế "Tạo biến"Mã hoá bằng mã thông báo shell Bourne.

Các tuỳ chọn trình biên dịch này được chuyển đến javac sau các tuỳ chọn của trình biên dịch chung.

Boolean; giá trị mặc định là False

Liệu thư viện này 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 trong quá trình thực thi. Ví dụ trong số các thư viện đó là API IDE cho trình bổ trợ IDE hoặc tools.jar cho bất kỳ nội dung nào đang chạy trên JDK chuẩn.

Lưu ý rằng neverlink = 1 không ngăn trình biên dịch chèn nội dung cùng dòng từ thư viện này thành các mục tiêu biên dịch phụ thuộc vào thư viện đó, khi được Java cho phép Quy cách ngôn ngữ (ví dụ: Hằng số static final của String hoặc kiểu dữ liệu nguyên thuỷ). Do đó, trường hợp sử dụng ưu tiên là khi thư viện thời gian chạy được 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 đó chỉ khác ở những vị trí mà JLS cấm trình biên dịch cùng dòng (và phải giữ cho tất cả các phiên bản trong tương lai của JLS).

output_licenses

Loại giấy phép; giá trị mặc định là ["none"]

Xem common attributes
plugins

Danh sách nhãn; giá trị mặc định là []

Các trình bổ trợ trình biên dịch Java để 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 bất cứ khi nào quy tắc này sẽ được xây dựng. 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. Tài liệu tham khảo do trình bổ trợ tạo ra sẽ được đưa vào ngăn chứa kết quả của quy tắc này.
processor_class

String; giá trị mặc định là ""

Lớp bộ xử lý là loại lớp đủ điều kiện mà trình biên dịch Java nên sử dụng làm điểm truy cập cho trình xử lý chú giải. Nếu bạn không 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 đường dẫn lớp thời gian chạy 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. (Kết quả này chủ yếu nhằm mục đích sử dụng cho Các plugin dễ bị lỗi (Error Prone plugin) đã được tải từ đường dẫn trình xử lý chú giải bằng cách sử dụng java.util.ServiceLoader.)
proguard_specs

Danh sách nhãn; giá trị mặc định là []

Các tệp dùng làm thông số kỹ thuật Proguard. Phần này mô tả tập hợp thông số kỹ thuật mà Proguard sử dụng. Nếu được chỉ định, chúng 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 được đưa vào đây chỉ được có các quy tắc không thay đổi giá trị như -dontnote, -dontwarn, giả định tác dụng không mong muốn và các quy tắc bắt đầu bằng -keep. Các lựa chọn khác chỉ có thể xuất hiện trong proguard_specs của android_binary để đảm bảo hợp nhất không tự động.
resource_jars

Danh sách nhãn; giá trị mặc định là []

Không dùng nữa: Thay vào đó, hãy sử dụng java_import và deps hoặc hay Runtime_deps.
resource_strip_prefix

String; giá trị mặc định là ""

Tiền tố đường dẫn để loại bỏ khỏi tài nguyên Java.

Nếu được chỉ định, tiền tố đường dẫn này sẽ bị xoá khỏi mọi tệp trong resources . Nếu tệp tài nguyên không nằm trong thư mục này thì xảy ra lỗi. 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 một làm 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ẽ đặt tại foo/bar/a.txt.

java_runtime

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

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; giá trị mặc định là []

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

Nhãn; giá trị mặc định là None

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

Danh sách nhãn; giá trị mặc định là []

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

Nhãn; giá trị mặc định là None

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

String; giá trị mặc định là ""

Đường dẫn đến thư mục gốc của thời gian chạy. Theo "Nhãn hiệu" biến. Nếu đường dẫn này là tuyệt đối, thì quy tắc này biểu thị một môi trường thời gian chạy Java không khép kín với một đường dẫn. Trong trường hợp đó, thuộc tính srcsjava phải trống.
lib_ct_sym

Nhãn; giá trị mặc định là None

Tệp lib/ct.sym cần để biên dịch bằng --release. Nếu không được chỉ định và có đúng một tệp trong srcs có đường dẫn kết thúc bằng /lib/ct.sym, tệp đó đã được sử dụng.
lib_modules

Nhãn; giá trị mặc định là None

Tệp lib/modules cần thiết cho hoạt động triển khai khép kín.
version

Số nguyên; giá trị mặc định là 0

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

java_toolchain

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_worker_multiplex_sandboxing, javac_supports_workers, javacopts, jvm_opts, licenses, oneversion, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, proguard_allowlister, resourcejar, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, tools, turbine_data, turbine_jvm_opts, visibility, xlint)

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 đang được sử dụng đố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 tinh chỉnh trình biên dịch Java của bạn.

Ví dụ

Một 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; giá trị mặc định là []

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

Danh sách các chuỗi; giá trị mặc định là []

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

Danh sách các chuỗi; giá trị mặc định là []

Danh sách các đối số Android Lint.
android_lint_package_configuration

Danh sách nhãn; giá trị mặc định là []

Cấu hình tìm lỗi mã nguồn của Android sẽ được áp dụng cho các nhóm gói đã chỉ định.
android_lint_runner

Nhãn; giá trị mặc định là None

Nhãn của trình chạy tìm lỗi mã nguồn Android, nếu có.
bootclasspath

Danh sách nhãn; giá trị mặc định là []

Các mục đường dẫn lớp khởi động nhắm mục tiêu đến Java. Tương ứng với cờ -bootclasspath của javac.
deps_checker

Danh sách nhãn; giá trị mặc định là []

Nhãn của ngăn triển khai ImportDepsChecker.
forcibly_disable_header_compilation

Boolean; giá trị mặc định là 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ợ nội dung, ví dụ: JDK 7 Bazel.
genclass

Danh sách nhãn; bắt buộc

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

Danh sách nhãn; giá trị mặc định là []

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

Danh sách nhãn; giá trị mặc định là []

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

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

ijar

Danh sách nhãn; bắt buộc

Nhãn của tệp thực thi ijar.
jacocorunner

Nhãn; giá trị mặc định là None

Nhãn của tệp triển khai JacocoCoverageRunner.
java_runtime

Nhãn; bắt buộc

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

Danh sách nhãn; bắt buộc

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

Danh sách nhãn; giá trị mặc định là []

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

Danh sách các chuỗi; giá trị mặc định là []

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

Boolean; giá trị mặc định là True

"True" nếu JavaBuilder hỗ trợ chạy dưới dạng một worker liên tục đa điểm, là false nếu không hỗ trợ.
javac_supports_worker_multiplex_sandboxing

Boolean; giá trị mặc định là False

"True" nếu JavaBuilder hỗ trợ hộp cát đa kênh, "false" nếu không hỗ trợ tính năng này.
javac_supports_workers

Boolean; giá trị mặc định là True

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

Danh sách các chuỗi; giá trị mặc định là []

Danh sách các đối số bổ sung cho trình biên dịch Java. Vui lòng tham khảo trình biên dịch Java về danh sách mở rộng gồm các cờ trình biên dịch Java có thể có.
jvm_opts

Danh sách các chuỗi; giá trị mặc định là []

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 Java tài liệu về máy ảo để biết danh sách đầy đủ các cờ có thể có cho tuỳ chọn này.
oneversion

Nhãn; giá trị mặc định là None

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

Nhãn; giá trị mặc định là None

Nhãn danh sách cho phép gồm một phiên bản dành cho các thử nghiệm.
oneversion_whitelist

Nhãn; giá trị mặc định là None

Nhãn của danh sách cho phép gồm một phiên bản.
package_configuration

Danh sách nhãn; giá trị mặc định là []

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

Nhãn; giá trị mặc định là "@bazel_tools//tools/jdk:proguard_whitelister"

Nhãn của trình quản lý danh sách cho phép Proguard.
resourcejar

Danh sách nhãn; giá trị mặc định là []

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

Danh sách nhãn; bắt buộc

Nhãn của ngăn triển khai SingleJar.
source_version

String; giá trị mặc định là ""

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

String; giá trị mặc định là ""

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

Nhãn; giá trị mặc định là None

Nhãn của một tệp tài nguyên 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 hoàn toàn phụ thuộc thời gian chạy của tất cả quy tắc java_binary.
tools

Danh sách nhãn; giá trị mặc định là []

Nhãn của những công cụ có thể mở rộng nhãn trong jvm_opts.
turbine_data

Danh sách nhãn; giá trị mặc định là []

Các nhãn của dữ liệu có sẵn cho việc mở rộng nhãn trong turbine_jvm_opts.
turbine_jvm_opts

Danh sách các chuỗi; giá trị mặc định là []

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

Danh sách các chuỗi; giá trị mặc định là []

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