規則
- java_binary
- java_import
- java_library
- java_lite_proto_library
- java_proto_library
- java_test
- java_package_configuration
- java_plugin
- java_runtime
- java_toolchain
java_binary
java_binary(name, deps, srcs, data, resources, args, classpath_resources, compatible_with, create_executable, deploy_env, deploy_manifest_lines, deprecation, distribs, env, exec_compatible_with, exec_properties, features, javacopts, jvm_flags, launcher, licenses, main_class, output_licenses, plugins, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, stamp, tags, target_compatible_with, testonly, toolchains, use_launcher, use_testrunner, visibility)
建構 Java 封存檔 (「jar 檔案」),以及名稱與規則相同的包裝函式 shell 指令碼。 包裝函式殼層指令碼會使用包含其他項目的類別路徑,每個路徑都有一個 jar 檔案 程式庫的運作原理
包裝函式指令碼接受數個不重複的標記。詳情請參閱
//src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt
,取得包裝函式接受的可設定標記和環境變數清單。
隱含輸出目標
name.jar
:Java 封存檔,包含類別檔案和其他 對應二進位檔的直接依附元件。name-src.jar
:包含來源的封存檔 (「來源」 jar」)。name_deploy.jar
:適合部署的 Java 封存檔 ( 這類函式)。為您的規則建構
<name>_deploy.jar
目標 建立內含資訊清單的獨立 jar 檔案,讓該檔案與java -jar
指令或包裝函式指令碼的--singlejar
如果有需要 SQL 指令的分析工作負載 則 BigQuery 可能是最佳選擇建議使用包裝函式指令碼,因為java -jar
這個指令碼 也會傳遞 JVM 旗標和選項 載入原生資料庫部署 jar 包含類別載入器可存取的所有類別 從二進位的包裝函式指令碼開始到頭搜尋類別路徑。此外, 包含依附元件所需的原生資料庫系統會自動載入 傳送至 JVM
如果您的目標指定啟動器 屬性,_deploy.jar 不會做為一般 JAR 檔案,而是 原生二進位檔案。其中包含啟動器,以及 全部連結至一個靜態二進位檔案實際 jar 檔案的位元組會是 附加至該原生二進位檔,建立單一二進位 blob,其中含有 執行 和 Java 程式碼您可以直接執行產生的 jar 檔案 就像執行任何原生二進位檔
name_deploy-src.jar
:包含來源的封存檔 持續收集訓練資料。這些將會與deploy.jar
(其中 jar 沒有相符的來源 jar 除外)。
只要沒有屬性,java_binary
規則中不得使用 deps
屬性
srcs
;這種規則需要
main_class
,提供者:
runtime_deps
。
以下程式碼片段說明常見的錯誤:
java_binary( name = "DontDoThis", srcs = [ ...,"GeneratedJavaFile.java"
, # a generated .java file ], deps = [":generating_rule",
], # rule that generates that file )
建議改為執行以下動作:
java_binary( name = "DoThisInstead", srcs = [ ..., ":generating_rule", ], )
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 建議您使用來源檔案名稱做為來源檔案的主要進入點 減去副檔名。例如,如果呼叫的進入點 Main.java ,那麼您的姓名可能是Main 。
|
deps
|
deps 」的一般評論:
大部分的建構規則。
|
srcs
|
規則:如果規則 (通常為
此引數幾乎都是必要引數,除非
|
resources
|
如有指定資源,這些資源會與常見程式語言一起封裝在 jar 檔案中
編譯產生的 資源可以是來源檔案或產生的檔案。 |
classpath_resources
|
必須位於 Java 樹狀結構根目錄的資源清單。此屬性的
僅限於支援要求所屬資源
在類別路徑上找到與 |
create_executable
|
launcher 或 main_class 屬性,則為 0
是否有設定。
|
deploy_env
|
java_binary 目標清單
為此二進位環境準備了
建構會由另一個程式載入的外掛程式時,請設定這項屬性
java_binary 。設定此屬性會排除以下項目的所有依附元件: 這個二進位檔的執行階段類別路徑 (以及部署 jar 檔案) 會在 二進位檔和 deploy_env 中指定的目標。
|
deploy_manifest_lines
|
META-INF/manifest.mf 檔案要加入的各行清單
*_deploy.jar 目標。這項屬性的內容「並非」主旨
「設為變數」。
|
javacopts
|
在全域編譯器選項之後,這些編譯器選項會傳遞至 javac。 |
jvm_flags
|
Java 二進位檔的包裝函式指令碼包含 CLASSPATH 定義
(找出所有相依的 jar 檔案) 並叫用正確的 Java 解譯器。
包裝函式指令碼產生的指令列包含
主要類別後面加上 請注意,這項屬性對 |
launcher
|
bin/java 程式。
目標必須是 cc_binary 。任何符合以下條件的 cc_binary
會實作
可以將 Java Invocation API 指定為這個屬性的值。
根據預設,Bazel 會使用一般 JDK 啟動器 (bin/java 或 java.exe)。 相關的 請注意,原生 (C++、SWIG、JNI) 依附元件的建構方式會有所不同 根據您使用的是 JDK 啟動器或其他啟動器:
使用預設 JDK 啟動器以外的任何啟動器時,系統會將其格式
的 |
main_class
|
main() 方法的類別名稱,用於做為進入點。
如果規則使用這個選項,則不需要 srcs=[...] 清單。
因此,有了這個屬性,使用者
包含一或多個 main() 方法。
此屬性的值是類別名稱,而不是來源檔案。類別必須
可用:這個規則可能由這項規則 ( |
plugins
|
java_plugin 。
建構應用程式程式庫可能也會從使用以下依附元件的依附元件繼承外掛程式
exported_plugins 。資源
外掛程式產生的 jar 檔案會納入這項規則的結果 jar 中
|
resource_jars
|
|
resource_strip_prefix
|
如果有指定,系統會從 |
runtime_deps
|
deps 相同,這些項目會顯示在執行階段的類別路徑中,但與一般的 deps 不同
而非編譯時間類別路徑應該只有執行階段所需的依附元件
這裡列出的條件依附元件分析工具應忽略同時顯示在兩者中的目標
《runtime_deps 》和《deps 》。
|
stamp
|
除非其依附元件變更,否則系統「不會」重新建構加上時間戳記的二進位檔。 |
use_launcher
|
如果此屬性設為 false,
launcher 屬性和相關的
|
use_testrunner
|
com.google.testing.junit.runner.BazelTestRunner ) 類別做為
Java 程式的主要進入點,並提供測試類別
以 bazel.test_suite 的值傳送至測試執行器
系統屬性
您可以使用此項目覆寫預設值
也就是在測試執行器中
java_test 項規則,
且未用於 java_binary 規則不太可能
建議你採取這種做法此用途為 AllTest
以便設定資料庫
再執行測試)。AllTest
規則必須宣告為 java_binary ,但
仍使用測試執行器做為主要進入點
測試執行工具類別的名稱可使用 main_class 屬性覆寫。
|
java_import
java_import(name, deps, data, compatible_with, constraints, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, proguard_specs, restricted_to, runtime_deps, srcjar, tags, target_compatible_with, testonly, visibility)
這項規則會將預先編譯的 .jar
檔案做為
適用於 java_library
和
java_binary
規則。
範例
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", ], )
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
deps
|
|
constraints
|
|
exports
|
|
jars
|
|
neverlink
|
tools.jar 則適用於執行
以及標準 JDK
|
proguard_specs
|
android_binary 目標。
這裡包含的檔案只能包含冪等規則,例如 -dontnote、-dontwarn、
以及以 -keep 開頭的規則。其他選項只能在
android_binary 的 proguard_specs 確保非自動合併。
|
runtime_deps
|
|
srcjar
|
|
java_library
java_library(name, deps, srcs, data, resources, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exported_plugins, exports, features, javacopts, licenses, neverlink, plugins, proguard_specs, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, tags, target_compatible_with, testonly, visibility)
這項規則會將來源編譯並連結至 .jar
檔案。
隱含輸出目標
libname.jar
:包含類別檔案的 Java 封存檔。libname-src.jar
:包含來源的封存檔 (「來源」 jar」)。
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
deps
|
deps 」的一般評論:
大部分的建構規則。
由「
相反地, |
srcs
|
規則:如果規則 (通常為
此引數幾乎都是必要引數,除非
|
data
|
data 」的一般評論:
大部分的建構規則。
建構 |
resources
|
如有指定資源,這些資源會與常見程式語言一起封裝在 jar 檔案中
編譯產生的 資源可以是來源檔案或產生的檔案。 |
exported_plugins
|
java_plugin 的清單 (例如註解)
處理器),將資料匯出至直接依附於此程式庫的程式庫。
|
exports
|
這裡的名單規則會開放父項規則使用,就像父項規則一樣
完全取決於這些規則這不適用於一般 (未匯出)
摘要:如果有依附元件,規則 X 可以存取 Y 中的程式碼
兩個路徑之間的路徑:開頭為
假設 A 依附於 B,B 須依附於 C。在這個案例中
C 是 A 的「轉換」依附元件,因此變更 C 來源並重新建構 A 會
正確重建一切不過,A 無法在 C 中使用類別。若要允許:
這麼一來,A 必須在 匯出的程式庫適用於所有直接父項規則。請稍微 不同的範例:A 依附 B,B 依附於 C 和 D,且也會匯出 C 而非 D。 現在 A 可以存取 C,但無法存取 D。現在,如果 C 和 D 匯出了某些程式庫和 D' 不過,A 只能存取 C'而非「D」
重要事項:匯出的規則並非一般依附元件。沿用先前範例
如果 B 匯出 C 而想要一併使用 C,也必須
|
javacopts
|
在全域編譯器選項之後,這些編譯器選項會傳遞至 javac。 |
neverlink
|
tools.jar 則適用於
並在標準 JDK 上執行
請注意, 如果執行階段程式庫與編譯程式庫不同,您必須確保 差別在於 JLS 禁止內嵌編譯器,且必須保留 JLS 的所有後續版本)。 |
plugins
|
java_plugin 。
建構應用程式程式庫可能也會從使用以下依附元件的依附元件繼承外掛程式
exported_plugins 。資源
外掛程式產生的 jar 檔案會納入這項規則的結果 jar 中
|
proguard_specs
|
android_binary 目標。
這裡包含的檔案只能包含冪等規則,例如 -dontnote、-dontwarn、
以及以 -keep 開頭的規則。其他選項只能在
android_binary 的 proguard_specs 確保非自動合併。
|
resource_jars
|
|
resource_strip_prefix
|
如果有指定,系統會從 |
runtime_deps
|
deps 相同,這些項目會顯示在執行階段的類別路徑中,但與一般的 deps 不同
而非編譯時間類別路徑應該只有執行階段所需的依附元件
這裡列出的條件依附元件分析工具應忽略同時顯示在兩者中的目標
《runtime_deps 》和《deps 》。
|
java_lite_proto_library
java_lite_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
java_lite_proto_library
會從 .proto
檔案產生 Java 程式碼。
deps
必須指向 proto_library
規則。
範例:
java_library( name = "lib", deps = [":foo"], ) java_lite_proto_library( name = "foo", deps = [":bar"], ) proto_library( name = "bar", )
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
deps
|
proto_library 清單
產生 Java 程式碼
|
java_proto_library
java_proto_library(name, deps, data, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, visibility)
java_proto_library
會從 .proto
檔案產生 Java 程式碼。
deps
必須指向 proto_library
規則。
範例:
java_library( name = "lib", deps = [":foo_java_proto"], ) java_proto_library( name = "foo_java_proto", deps = [":foo_proto"], ) proto_library( name = "foo_proto", )
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
deps
|
proto_library 清單
產生 Java 程式碼
|
java_test
java_test(name, deps, srcs, data, resources, args, classpath_resources, compatible_with, create_executable, deploy_manifest_lines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, launcher, licenses, local, main_class, plugins, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, use_testrunner, visibility)
java_test()
規則會編譯 Java 測試。測試則是容器端的二進位包裝函式
測試程式碼系統會叫用測試執行器的主要方法,而非編譯的主要類別。
隱含輸出目標
name.jar
:Java 封存檔。name_deploy.jar
:適合的 Java 封存檔 以便進行部署作業(只有在明確要求時才會建構)。請參閱name_deploy.jar
的輸出內容來源: java_binary。
請參閱 java_binary() 引數一節。這項規則也適用 支援所有 並套用至所有測試規則 (*_test)。
範例
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", ], )
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
deps
|
deps 」的一般評論:
大部分的建構規則。
|
srcs
|
規則:如果規則 (通常為
此引數幾乎都是必要引數,除非
|
resources
|
如有指定資源,這些資源會與常見程式語言一起封裝在 jar 檔案中
編譯產生的 資源可以是來源檔案或產生的檔案。 |
classpath_resources
|
必須位於 Java 樹狀結構根目錄的資源清單。此屬性的
僅限於支援要求所屬資源
在類別路徑上找到與 |
create_executable
|
launcher 或 main_class 屬性,則為 0
是否有設定。
|
deploy_manifest_lines
|
META-INF/manifest.mf 檔案要加入的各行清單
*_deploy.jar 目標。這項屬性的內容「並非」主旨
「設為變數」。
|
javacopts
|
在全域編譯器選項之後,這些編譯器選項會傳遞至 javac。 |
jvm_flags
|
Java 二進位檔的包裝函式指令碼包含 CLASSPATH 定義
(找出所有相依的 jar 檔案) 並叫用正確的 Java 解譯器。
包裝函式指令碼產生的指令列包含
主要類別後面加上 請注意,這項屬性對 |
launcher
|
bin/java 程式。
目標必須是 cc_binary 。任何符合以下條件的 cc_binary
會實作
可以將 Java Invocation API 指定為這個屬性的值。
根據預設,Bazel 會使用一般 JDK 啟動器 (bin/java 或 java.exe)。 相關的 請注意,原生 (C++、SWIG、JNI) 依附元件的建構方式會有所不同 根據您使用的是 JDK 啟動器或其他啟動器:
使用預設 JDK 啟動器以外的任何啟動器時,系統會將其格式
的 |
main_class
|
main() 方法的類別名稱,用於做為進入點。
如果規則使用這個選項,則不需要 srcs=[...] 清單。
因此,有了這個屬性,使用者
包含一或多個 main() 方法。
此屬性的值是類別名稱,而不是來源檔案。類別必須
可用:這個規則可能由這項規則 ( |
plugins
|
java_plugin 。
建構應用程式程式庫可能也會從使用以下依附元件的依附元件繼承外掛程式
exported_plugins 。資源
外掛程式產生的 jar 檔案會納入這項規則的結果 jar 中
|
resource_jars
|
|
resource_strip_prefix
|
如果有指定,系統會從 |
runtime_deps
|
deps 相同,這些項目會顯示在執行階段的類別路徑中,但與一般的 deps 不同
而非編譯時間類別路徑應該只有執行階段所需的依附元件
這裡列出的條件依附元件分析工具應忽略同時顯示在兩者中的目標
《runtime_deps 》和《deps 》。
|
stamp
|
除非其依附元件變更,否則系統「不會」重新建構加上時間戳記的二進位檔。 |
test_class
|
如未定義這個引數,則預設會使用舊版模式,
改為使用測試引數設定
這個屬性會指定要執行的 Java 類別名稱
測試。這項設定很少需要設定。省略這個引數時
系統會根據目標的
如果是 JUnit3,測試類別必須是
這項屬性允許多項 |
use_launcher
|
如果此屬性設為 false,
launcher 屬性和相關的
|
use_testrunner
|
com.google.testing.junit.runner.BazelTestRunner ) 類別做為
Java 程式的主要進入點,並提供測試類別
以 bazel.test_suite 的值傳送至測試執行器
系統屬性
您可以使用此項目覆寫預設值
也就是在測試執行器中
java_test 項規則,
且未用於 java_binary 規則不太可能
建議你採取這種做法此用途為 AllTest
以便設定資料庫
再執行測試)。AllTest
規則必須宣告為 java_binary ,但
仍使用測試執行器做為主要進入點
測試執行工具類別的名稱可使用 main_class 屬性覆寫。
|
java_package_configuration
java_package_configuration(name, data, compatible_with, deprecation, distribs, features, javacopts, licenses, packages, restricted_to, tags, target_compatible_with, testonly, visibility)
要套用至一組套件的設定。
您可以將設定新增至
java_toolchain.javacopts
秒。
範例:
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", ] )
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
data
|
|
javacopts
|
|
packages
|
package_group 的集合
設定應套用於
|
java_plugin
java_plugin(name, deps, srcs, data, resources, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, generates_api, javacopts, licenses, neverlink, output_licenses, plugins, processor_class, proguard_specs, resource_jars, resource_strip_prefix, restricted_to, tags, target_compatible_with, testonly, visibility)
java_plugin
為 Bazel 執行的 Java 編譯器定義外掛程式。就目前而言
註解處理工具只支援註解處理工具java_library
或
java_binary
規則可透過 plugins
根據外掛程式執行外掛程式
屬性。java_library
也能自動將外掛程式匯出至程式庫
直接依賴
exported_plugins
。
隱含輸出目標
libname.jar
:Java 封存檔。
引數與 java_library
相同,但
以便新增 processor_class
引數
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
deps
|
deps 」的一般評論:
大部分的建構規則。
由「
相反地, |
srcs
|
規則:如果規則 (通常為
此引數幾乎都是必要引數,除非
|
data
|
data 」的一般評論:
大部分的建構規則。
建構 |
resources
|
如有指定資源,這些資源會與常見程式語言一起封裝在 jar 檔案中
編譯產生的 資源可以是來源檔案或產生的檔案。 |
generates_api
|
如果規則使用 API 產生註解處理工具,則其他規則 只有在 編譯動作會在產生規則後排定這個 屬性指示 Bazel 在什麼情況下引入排程限制 --java_header_compile 已啟用。 警告:這項屬性會影響版本 就必須只在必要時使用。 |
javacopts
|
在全域編譯器選項之後,這些編譯器選項會傳遞至 javac。 |
neverlink
|
tools.jar 則適用於
並在標準 JDK 上執行
請注意, 如果執行階段程式庫與編譯程式庫不同,您必須確保 差別在於 JLS 禁止內嵌編譯器,且必須保留 JLS 的所有後續版本)。 |
output_licenses
|
common attributes
」
|
plugins
|
java_plugin 。
建構應用程式程式庫可能也會從使用以下依附元件的依附元件繼承外掛程式
exported_plugins 。資源
外掛程式產生的 jar 檔案會納入這項規則的結果 jar 中
|
processor_class
|
|
proguard_specs
|
android_binary 目標。
這裡包含的檔案只能包含冪等規則,例如 -dontnote、-dontwarn、
以及以 -keep 開頭的規則。其他選項只能在
android_binary 的 proguard_specs 確保非自動合併。
|
resource_jars
|
|
resource_strip_prefix
|
如果有指定,系統會從 |
java_runtime
java_runtime(name, srcs, compatible_with, deprecation, distribs, features, hermetic_srcs, java, java_home, lib_modules, licenses, restricted_to, tags, target_compatible_with, testonly, version, visibility)
指定 Java 執行階段的設定。
範例:
java_runtime( name = "jdk-9-ea+153", srcs = glob(["jdk9-ea+153/**"]), java_home = "jdk9-ea+153", )
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
srcs
|
|
hermetic_srcs
|
|
java
|
|
java_home
|
srcs 和 java 屬性必須留空。
|
lib_modules
|
|
version
|
Runtime.version().feature() 。
|
java_toolchain
java_toolchain(name, android_lint_data, android_lint_jvm_opts, android_lint_opts, android_lint_package_configuration, android_lint_runner, bootclasspath, compatible_with, deprecation, deps_checker, distribs, features, forcibly_disable_header_compilation, genclass, header_compiler, header_compiler_direct, ijar, jacocorunner, java_runtime, javabuilder, javabuilder_data, javabuilder_jvm_opts, javac_supports_multiplex_workers, javac_supports_workers, javacopts, jvm_opts, licenses, oneversion, oneversion_whitelist, package_configuration, proguard_allowlister, resourcejar, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, tools, turbine_data, turbine_jvm_opts, visibility, xlint)
指定 Java 編譯器的設定。要使用哪種工具鍊,可透過 --java_toolchain 引數。通常除非需要 微調 Java 編譯器
範例
舉例如下:
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", )
引數
屬性 | |
---|---|
name |
此目標的專屬名稱。 |
android_lint_data
|
|
android_lint_jvm_opts
|
|
android_lint_opts
|
|
android_lint_package_configuration
|
|
android_lint_runner
|
|
bootclasspath
|
|
deps_checker
|
|
forcibly_disable_header_compilation
|
|
genclass
|
|
header_compiler
|
|
header_compiler_direct
|
這項工具不支援註解處理功能。 |
ijar
|
|
jacocorunner
|
|
java_runtime
|
|
javabuilder
|
|
javabuilder_data
|
|
javabuilder_jvm_opts
|
|
javac_supports_multiplex_workers
|
|
javac_supports_workers
|
|
javacopts
|
|
jvm_opts
|
|
oneversion
|
|
oneversion_whitelist
|
|
package_configuration
|
|
proguard_allowlister
|
|
resourcejar
|
|
singlejar
|
|
source_version
|
|
target_version
|
|
timezone_data
|
|
tools
|
|
turbine_data
|
|
turbine_jvm_opts
|
|
xlint
|
|