Java 規則

回報問題 查看來源

規則

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 檔案」),以及具有相同名稱的包裝函式殼層指令碼。包裝函式殼層指令碼會使用類別路徑,其中包括二進位檔,其中每個程式庫的 jar 檔案即為 jar 檔案。執行包裝函式殼層指令碼時,任何非空白的 JAVABIN 環境變數,其優先順序都會高於透過 Bazel 的 --java_runtime_version 標記指定的版本。

包裝函式指令碼接受多個不重複的旗標。如需包裝函式接受的可設定標記和環境變數清單,請參閱 //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 選項執行該檔案。比起使用包裝函式指令碼,建議使用 java -jar,因為這個指令碼也會傳遞 JVM 旗標和載入原生資料庫的選項。

    部署 jar 包含所有類別,類別載入器會從頭到尾搜尋二元包裝函式指令碼的類別路徑。其中包含依附元件所需的原生程式庫。這些項目會在執行階段自動載入 JVM。

    如果目標指定了 launcher 屬性,那麼 _deploy.jar 就會是原生二進位檔,而不是一般的 JAR 檔案。這包含啟動器和規則的所有原生 (C++) 依附元件,且全部會連結至靜態二進位檔。實際 jar 檔案的位元組會附加到該原生二進位檔,建立包含執行檔和 Java 程式碼的單一二進位 blob。您可以直接執行產生的 jar 檔案,與執行任何原生二進位檔相同。

  • name_deploy-src.jar:內含從目標遞移關閉來源收集的封存檔。這些會與 deploy.jar 中的類別相符,除非 jar 沒有相符的來源 jar。

如果沒有 srcsjava_binary 規則中不允許使用 deps 屬性,因此這項規則需要 runtime_deps 提供的 main_class

以下程式碼片段說明常見錯誤:

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

標籤清單;預設為 []

系統會為建立目標而處理的來源檔案清單。這項屬性幾乎一律為必要屬性,請參閱下方例外狀況。

系統會編譯 .java 類型的來源檔案。如果是產生的 .java 檔案,通常建議將產生的規則名稱放在這裡,而非檔案名稱。這不僅可提高可讀性,還能讓規則更靈活地因應日後的變更:如果產生的規則日後會產生不同的檔案,您只需修正一個位置,即產生規則的 outs。請勿在 deps 中列出產生規則,因為這是免人工管理。

系統會解壓縮及編譯 .srcjar 類型的來源檔案。(如果您需要使用 Genrule 產生一組 .java 檔案,這個方法就很實用)。

規則:如果規則 (通常是 genrulefilegroup) 產生上述任何檔案,其使用方式就會與來源檔案所述的方式相同。

這個引數幾乎一律需要,除非 main_class 屬性在執行階段類別路徑中指定類別,或是您指定 runtime_deps 引數。

resources

標籤清單;預設為 []

在 Java jar 中納入的資料檔案清單。

如果已指定資源,這些資源會與編譯產生的一般 .class 檔案一起封裝在 jar 中。jar 檔案中的資源位置取決於專案結構。Bazel 會先尋找 Maven 的標準目錄版面配置 (即「src」目錄,其後是「resources」目錄子)。如果找不到目錄,Bazel 會尋找最頂層的「java」或「javatests」目錄 (例如,如果資源位於 <workspace root>/x/java/y/java/z,則資源路徑將會是 y/java/z)。您無法覆寫此經驗法則,但 resource_strip_prefix 屬性可用來為資源檔案指定特定的替代目錄。

資源可以是來源檔案或產生的檔案。

classpath_resources

標籤清單;預設為 []

除非沒有任何其他方式,否則請勿使用這個選項)

必須在 Java 樹狀結構的根目錄中的資源清單。這個屬性的唯一用途是支援第三方程式庫,這些程式庫的資源必須和 "myconfig.xml" 一樣在類別路徑中找到。由於命名空間衝突的危險,因此只適用於二進位檔,不適用於程式庫。

create_executable

布林值;不可設定;預設值為 True

已淘汰,請改用 java_single_jar
deploy_env

標籤清單;預設為 []

其他 java_binary 目標清單,代表這個二進位檔的部署環境。在建構由其他 java_binary 載入的外掛程式時,請設定這個屬性。
設定這項屬性後,系統會從這個二進位檔的執行階段類別路徑 (和部署 jar) 中排除這個二進位檔的所有依附元件,這些依附元件與 deploy_env 中指定的目標共用。
deploy_manifest_lines

字串清單;預設為 []

*_deploy.jar 目標產生的 META-INF/manifest.mf 檔案要加入的行清單。此屬性的內容受到「Make 變」替代變數影響。
javacopts

字串清單;預設為 []

這個程式庫的其他編譯器選項。 取決於 「Make 變數」替換和 Bourne shell 代碼化

這些編譯器選項會在全域編譯器選項之後傳遞至 javac。

jvm_flags

字串清單;預設為 []

要嵌入以執行這個二進位檔的包裝函式指令碼中的旗標清單。取決於 $(location)"Make 變數" 替代,以及 Bourne shell 代碼化

Java 二進位檔的包裝函式指令碼包含 CLASSPATH 定義 (用於找出所有相依 jar),並叫用正確的 Java 解譯器。包裝函式指令碼產生的指令列包含主要類別名稱,後面加上 "$@",以便您在類別名稱之後傳遞其他引數。不過,您必須在指令列中的類別名稱「之前」指定用於 JVM 剖析的引數。系統會先將 jvm_flags 的內容新增至包裝函式指令碼,再列出類別名稱。

請注意,這個屬性對 *_deploy.jar 輸出內容沒有任何影響

launcher

標籤;預設值為 None

指定一個二進位檔,用於執行 Java 程式,而非 JDK 隨附的一般 bin/java 程式。目標必須是 cc_binary。任何導入 Java 叫用 APIcc_binary,都可以指定為這項屬性的值。

根據預設,Bazel 會使用一般 JDK 啟動器 (bin/java 或 java.exe)。

相關的 --java_launcher Bazel 標記只會影響「未」指定 launcher 屬性的 java_binaryjava_test 目標。

請注意,您的原生 (C++、SWIG、JNI) 依附元件的建構方式取決於您使用的是 JDK 啟動器或其他啟動器:

  • 如果您使用的是一般 JDK 啟動器 (預設),原生依附元件會建構為名為 {name}_nativedeps.so 的共用資料庫,其中 {name} 是此 Java_binary 規則的 name 屬性。這項設定中的連結器不會移除未使用的程式碼。
  • 如果您使用任何其他啟動器,原生 (C++) 依附元件會以靜態方式連結至名為 {name}_nativedeps 的二進位檔,其中 {name} 是此 Java 二進位檔規則的 name 屬性。在這種情況下,連結器會將認為未使用的程式碼從產生的二進位檔中移除。也就是說,除非 cc_library 目標指定 alwayslink = 1,否則您只能連結透過 JNI 存取的任何 C++ 程式碼。

使用預設 JDK 啟動器以外的任何啟動器時,*_deploy.jar 輸出的格式會變更。詳情請參閱主要 java_binary 文件。

main_class

字串;預設值為 ""

具有 main() 方法的類別名稱,做為進入點。如果規則使用這個選項,就不需要使用 srcs=[...] 清單。 因此,您可以利用這項屬性,透過已包含一或多個 main() 方法的 Java 程式庫執行可執行檔。

此屬性的值是類別名稱,而非來源檔案。該類別必須在執行階段可用:由這項規則 (透過 srcs) 編譯,或由直接或遞移依附元件 (透過 runtime_depsdeps) 提供。如果無法使用該類別,二進位檔會在執行階段失敗;沒有建構時間檢查。

plugins

標籤清單;預設為 []

要在編譯期間執行的 Java 編譯器外掛程式。此屬性中指定的每個 java_plugin 都會在每次建立這項規則時執行。程式庫也可能從使用 exported_plugins 的依附元件繼承外掛程式。外掛程式產生的資源會納入這項規則產生的 jar 檔案內。
resource_jars

標籤清單;預設為 []

已淘汰:請改用 java_import 和 deps 或 runtime_deps。
resource_strip_prefix

字串;預設值為 ""

要從 Java 資源去除的路徑前置字串。

如有指定,系統會從 resources 屬性中的每個檔案中移除這個路徑前置字串。如果資源檔案不在這個目錄底下,則為錯誤。如未指定 (預設值),系統會根據與來源檔案的 Java 套件相同的邏輯決定資源檔案的路徑。舉例來說,位於 stuff/java/foo/bar/a.txt 的來源檔案會位於 foo/bar/a.txt

runtime_deps

標籤清單;預設為 []

要提供給最終二進位檔的程式庫,或僅在執行階段進行測試。與一般的 deps 一樣,這些項目會出現在執行階段類別路徑上,但與一般類別路徑不同,而不是編譯時間的類別路徑。這裡應列出僅在執行階段需要的依附元件。依附元件分析工具應忽略同時出現於 runtime_depsdeps 的目標。
stamp

整數;預設值為 -1

是否要將建構資訊編碼成二進位檔案。可能的值:
  • stamp = 1:一律將建構資訊蓋進二進位檔中,即使是在 --nostamp 版本中執行也一樣。請避免使用此設定,因為這項設定可能會終止二進位檔的遠端快取,以及依附該設定檔的任何下游動作。
  • stamp = 0:一律以常數值取代建構資訊。提供良好的建構結果快取。
  • stamp = -1:嵌入建構資訊是由 --[no]stamp 標記控制。

除非依附元件的依附元件發生變更,否則系統「不會」重新建構戳記二進位檔。

use_launcher

布林值;預設值為 True

二進位檔是否應使用自訂啟動器。

如果這項屬性設為 false,系統會忽略這個目標的 launcher 屬性和相關的 --java_launcher 標記。

use_testrunner

布林值;預設值為 False

使用測試執行工具 (預設為 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, add_exports, add_opens, compatible_with, constraints, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, proguard_specs, restricted_to, runtime_deps, srcjar, tags, target_compatible_with, testonly, toolchains, visibility)

這項規則允許將預先編譯的 .jar 檔案做為 java_libraryjava_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

標籤清單;預設為 []

要連結至目標的其他程式庫清單。請參閱 java_library.deps
data

標籤清單;預設為 []

這項規則在執行階段所需的檔案清單。
add_exports

字串清單;預設為 []

允許這個程式庫存取指定的 modulepackage

這與 javac 和 JVM --add-exports= 標記對應。

add_opens

字串清單;預設為 []

允許這個程式庫以反射方式存取指定的 modulepackage

這與 javac 和 JVM --add-opens= 標記相對應。

constraints

字串清單;預設為 []

這項規則採用的 Java 程式庫的額外限制。
exports

標籤清單;預設為 []

這項規則的使用者提供的目標。 請參閱 java_library.exports
jars

標籤清單 (必要)

提供給 Java 目標且依附此目標的 JAR 檔案清單。

布林值;預設值為 False

請只將這個程式庫用於編譯,不要在執行階段使用。如果執行階段環境在執行期間會提供程式庫,此屬性就非常實用。這類程式庫包括用於 IDE 外掛程式的 IDE API,或用於標準 JDK 執行的任何程式庫的 tools.jar
proguard_specs

標籤清單;預設為 []

要做為 Proguard 規格的檔案。 下文將說明 Proguard 使用的規格組合。如有指定,系統會根據這個程式庫將其新增至任何 android_binary 目標。此處納入的檔案只能使用冪等規則,即 -dontnote、-dontwarn、假設性影響,以及開頭為 -keep 的規則。其他選項只能在 android_binary 的 proguard_specs 中顯示,以確保不會自動合併。
runtime_deps

標籤清單;預設為 []

要提供給最終二進位檔的程式庫,或僅在執行階段進行測試。請參閱 java_library.runtime_deps
srcjar

標籤;預設值為 None

JAR 檔案,內含已編譯 JAR 檔案的原始碼。

java_library

查看規則來源
java_library(name, deps, srcs, data, resources, add_exports, add_opens, bootclasspath, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exported_plugins, exports, features, javabuilder_jvm_flags, javacopts, licenses, neverlink, plugins, proguard_specs, resource_strip_prefix, restricted_to, runtime_deps, tags, target_compatible_with, testonly, toolchains, visibility)

這項規則會將來源編譯並連結至 .jar 檔案。

隱式輸出

  • libname.jar:包含類別檔案的 Java 封存檔案。
  • libname-src.jar:包含來源 (「來源 jar」) 的封存檔。

引數

屬性
name

名稱;必填

這個目標的專屬名稱。

deps

標籤清單;預設為 []

要連結至這個程式庫的程式庫清單。請參閱有關 deps 的一般註解,請參閱「多數建構規則所定義的一般屬性」。

deps 中列出的 java_library 規則所建立的 jar 將會位於這項規則的編譯時間類別路徑上。此外,其 depsruntime_depsexports 的遞移性關閉會在執行階段類別路徑上。

相反地,data 屬性中的目標會納入執行檔案,但不會納入編譯時間和執行階段類別路徑。

srcs

標籤清單;預設為 []

系統會為建立目標而處理的來源檔案清單。這項屬性幾乎一律為必要屬性,請參閱下方例外狀況。

系統會編譯 .java 類型的來源檔案。如果是產生的 .java 檔案,通常建議將產生的規則名稱放在這裡,而非檔案名稱。這不僅可提高可讀性,還能讓規則更能抵禦日後的變更:如果產生的規則日後產生不同的檔案,您只需修正一個位置,即產生規則的 outs。請勿在 deps 中列出產生規則,因為這是一種免人工管理。

系統會解壓縮及編譯 .srcjar 類型的來源檔案。(如果您需要使用 Genrule 產生一組 .java 檔案,這個方法就很實用)。

規則:如果規則 (通常是 genrulefilegroup) 產生上述任何檔案,其使用方式會與來源檔案所述的方式相同。

系統會將 .properties 類型的來源檔案視為資源。

所有其他檔案都會遭到忽略,前提是至少具備上述一種檔案類型。否則,會引發錯誤。

這個引數幾乎一律需要,除非您指定 runtime_deps 引數。

data

標籤清單;預設為 []

這個程式庫在執行階段需要的檔案清單。請參閱有關 data 的一般註解,請參閱「多數建構規則所定義的一般屬性」。

建構 java_library 時,Bazel 不會將這些檔案放在任何位置;如果 data 檔案是由 Bazel 產生,就會產生這些檔案。建構依附於此 java_library Bazel 的測試時,會將 data 檔案複製或連結至執行檔案區域。

resources

標籤清單;預設為 []

在 Java jar 中納入的資料檔案清單。

資源可以是來源檔案或產生的檔案。

如果已指定資源,這些資源會與編譯產生的一般 .class 檔案一起封裝在 jar 中。jar 檔案中的資源位置取決於專案結構。Bazel 會先尋找 Maven 的標準目錄版面配置 (即「src」目錄,後面接著「resources」目錄子層)。如果找不到這個檔案,Bazel 會尋找最頂層的「java」或「javatests」目錄 (例如,如果資源位於 <workspace root>/x/java/y/java/z,則資源路徑將會是 y/java/z)。此經驗法則無法覆寫,但 resource_strip_prefix 屬性可用來指定資源檔案的特定額外目錄。

add_exports

字串清單;預設為 []

允許這個程式庫存取指定的 modulepackage

這與 javac 和 JVM --add-exports= 標記對應。

add_opens

字串清單;預設為 []

允許這個程式庫以反射方式存取指定的 modulepackage

這與 javac 和 JVM --add-opens= 標記相對應。

bootclasspath

標籤;預設值為 None

受限制的 API,請勿使用!
exported_plugins

標籤清單;預設為 []

指定要匯出至直接依附此程式庫的 java_plugin (例如註解處理工具) 清單。

指定的 java_plugin 清單會套用至直接依附這個程式庫的任何程式庫,就像該程式庫已在 plugins 中明確宣告這些標籤一樣。

exports

標籤清單;預設為 []

匯出的程式庫。

這裡的產品資訊規則就能提供給父項規則,就像父項必須明確依附這些規則一樣。這不適用於一般 (未匯出) deps

摘要:如果「X」X規則之間存在依附元件路徑,且該路徑的開頭為 deps 邊緣後接零或多個 exports 邊緣,則規則「X」X可存取「Y」X中的程式碼。以下舉例說明這一點。

假設 A 依附 BB 取決於 C。在本例中,C 是 A 的「遞移」依附元件,因此變更 C 的來源並重新建構 A 時,將能正確重新建構所有內容。不過,A 無法使用 C 中的類別。您可以讓 A 必須在其 deps 中宣告 C,或在 B 中宣告 C 時 (以及可能依附於 A 的任何項目) 都可以在 (B 的) exports 屬性中宣告 C。

所有直接父項規則都能關閉匯出的程式庫。稍微不同:A 依附於 B,B 依附於 C 和 D,且同時匯出 C 但不匯出 D。現在 A 可存取 C,但沒有 D。現在,如果 C 和 D 分別匯出了某些程式庫 (C' 和 D),則 A 只能存取 C',但無法存取 D。

重要事項:匯出的規則並非一般依附元件。以上述範例來看,如果 B 匯出了 C 且想要使用 C,則還需將其列在其專屬的 deps 中。

javabuilder_jvm_flags

字串清單;預設為 []

受限制的 API,請勿使用!
javacopts

字串清單;預設為 []

這個程式庫的其他編譯器選項。 取決於「Make 變數」替換和 Bourne shell 符記化

這些編譯器選項會在全域編譯器選項之後傳遞至 javac。

布林值;預設值為 False

這個程式庫是否只應用於編譯,而不應在執行階段使用。如果執行階段環境在執行期間會提供程式庫,此屬性就非常實用。這類程式庫包括適用於 IDE 外掛程式的 IDE API,或是在標準 JDK 上執行的所有內容為 tools.jar

請注意,neverlink = 1 並未禁止編譯器將來自此程式庫的內容內嵌至依附於程式庫的編譯目標,前提是 Java 語言規範 (例如String 或原始類型的 static final 常數)。因此,當執行階段程式庫與編譯程式庫完全相同時,是偏好的用途。

如果執行階段程式庫與編譯程式庫不同,您必須確保該程式庫僅與 JLS 禁止編譯器進行內嵌時的差異 (且必須保留日後所有 JLS 版本的 JLS)。

plugins

標籤清單;預設為 []

要在編譯期間執行的 Java 編譯器外掛程式。此屬性中指定的每個 java_plugin 都會在每次建立這項規則時執行。程式庫也可能從使用 exported_plugins 的依附元件繼承外掛程式。由外掛程式產生的資源會包含在這項規則產生的 jar 中。
proguard_specs

標籤清單;預設為 []

要做為 Proguard 規格的檔案。 下文將說明 Proguard 使用的規格組合。如有指定,系統會根據這個程式庫將其新增至任何 android_binary 目標。此處納入的檔案只能使用冪等規則,即 -dontnote、-dontwarn、假設性影響,以及開頭為 -keep 的規則。其他選項只能在 android_binary 的 proguard_specs 中顯示,以確保不會自動合併。
resource_strip_prefix

字串;預設值為 ""

要從 Java 資源去除的路徑前置字串。

如有指定,系統會從 resources 屬性中的每個檔案中移除這個路徑前置字串。如果資源檔案不在這個目錄底下,則為錯誤。如未指定 (預設值),系統會根據與來源檔案的 Java 套件相同的邏輯決定資源檔案的路徑。舉例來說,位於 stuff/java/foo/bar/a.txt 的來源檔案會位於 foo/bar/a.txt

runtime_deps

標籤清單;預設為 []

要提供給最終二進位檔的程式庫,或僅在執行階段進行測試。與一般的 deps 一樣,這些項目會出現在執行階段類別路徑上,但與編譯時間類別路徑不同,而非編譯時間類別路徑。這裡應列出僅在執行階段需要的依附元件。依附元件分析工具應忽略 runtime_depsdeps 中出現的目標。

java_lite_proto_library

查看規則來源
java_lite_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_lite_proto_library 會從 .proto 檔案產生 Java 程式碼。

deps 必須指向 proto_library 規則。

範例:


java_library(
    name = "lib",
    runtime_deps = [":foo"],
)

java_lite_proto_library(
    name = "foo",
    deps = [":bar"],
)

proto_library(
    name = "bar",
)

引數

屬性
name

名稱;必填

這個目標的專屬名稱。

deps

標籤清單;預設為 []

要產生 Java 程式碼的 proto_library 規則清單。

java_proto_library

查看規則來源
java_proto_library(name, deps, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_proto_library 會從 .proto 檔案產生 Java 程式碼。

deps 必須指向 proto_library 規則。

範例:


java_library(
    name = "lib",
    runtime_deps = [":foo_java_proto"],
)

java_proto_library(
    name = "foo_java_proto",
    deps = [":foo_proto"],
)

proto_library(
    name = "foo_proto",
)

引數

屬性
name

名稱;必填

這個目標的專屬名稱。

deps

標籤清單;預設為 []

要產生 Java 程式碼的 proto_library 規則清單。

java_test

查看規則來源
java_test(name, deps, srcs, data, resources, add_exports, add_opens, args, bootclasspath, classpath_resources, compatible_with, create_executable, deploy_manifest_lines, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, launcher, licenses, local, main_class, neverlink, plugins, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, use_testrunner, visibility)

java_test() 規則會編譯 Java 測試。測試是測試程式碼周圍的二進位檔包裝函式。系統會叫用測試執行器的主要方法,而不是編譯的主要類別。

隱式輸出目標

  • name.jar:Java 封存檔案。
  • name_deploy.jar:適合部署的 Java 封存檔。(只有在明確要求的情況下才會建構)。詳情請參閱 java_binary 中的 name_deploy.jar 輸出內容說明。

請參閱 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

標籤清單;預設為 []

系統會為建立目標而處理的來源檔案清單。這項屬性幾乎一律為必要屬性,請參閱下方例外狀況。

系統會編譯 .java 類型的來源檔案。如果是產生的 .java 檔案,通常建議將產生的規則名稱放在這裡,而非檔案名稱。這不僅可提高可讀性,還能讓規則更能抵禦日後的變更:如果產生的規則日後產生不同的檔案,您只需修正一個位置,即產生規則的 outs。請勿在 deps 中列出產生規則,因為這是一種免人工管理。

系統會解壓縮及編譯 .srcjar 類型的來源檔案。(如果您需要使用 Genrule 產生一組 .java 檔案,這個方法就很實用)。

規則:如果規則 (通常是 genrulefilegroup) 產生上述任何檔案,其使用方式會與來源檔案所述的方式相同。

這個引數幾乎一律需要,除非 main_class 屬性在執行階段類別路徑中指定類別,或是您指定 runtime_deps 引數。

data

標籤清單;預設為 []

這個程式庫在執行階段需要的檔案清單。請參閱「一般屬性定義的一般屬性」中的 data 相關一般註解。
resources

標籤清單;預設為 []

要在 Java jar 中加入的資料檔案清單。

資源可以是來源檔案或產生的檔案。

如果已指定資源,這些資源會與編譯產生的一般 .class 檔案一起封裝在 jar 中。jar 檔案中的資源位置取決於專案結構。Bazel 會先尋找 Maven 的標準目錄版面配置 (即「src」目錄,後面接著「resources」目錄子層)。如果找不到這個檔案,Bazel 會尋找最頂層的「java」或「javatests」目錄 (例如,如果資源位於 <workspace root>/x/java/y/java/z,則資源路徑將會是 y/java/z)。此經驗法則無法覆寫,但 resource_strip_prefix 屬性可用來指定資源檔案的特定額外目錄。

add_exports

字串清單;預設為 []

允許這個程式庫存取指定的 modulepackage

這與 javac 和 JVM --add-exports= 標記對應。

add_opens

字串清單;預設為 []

允許這個程式庫以反射方式存取指定的 modulepackage

這與 javac 和 JVM --add-opens= 標記相對應。

bootclasspath

標籤;預設值為 None

受限制的 API,請勿使用!
classpath_resources

標籤清單;預設為 []

除非沒有任何其他方式,否則請勿使用這個選項)

必須在 Java 樹狀結構的根目錄中的資源清單。這個屬性的唯一用途是支援第三方程式庫,這些程式庫的資源必須和 "myconfig.xml" 一樣在類別路徑中找到。由於命名空間衝突的危險,因此只適用於二進位檔,不適用於程式庫。

create_executable

布林值;預設值為 True

已淘汰,請改用 java_single_jar
deploy_manifest_lines

字串清單;預設為 []

*_deploy.jar 目標產生的 META-INF/manifest.mf 檔案要加入的行清單。此屬性的內容受到 "Make 變數" 替換的影響。
javacopts

字串清單;預設為 []

這個二進位檔的其他編譯器選項。取決於「Make 變數」替換和 Bourne shell 符記化

這些編譯器選項會在全域編譯器選項之後傳遞至 javac。

jvm_flags

字串清單;預設為 []

要嵌入以執行這個二進位檔的包裝函式指令碼中的旗標清單。取決於 $(location)"Make 變數" 替代,以及 Bourne shell 代碼化

Java 二進位檔的包裝函式指令碼包含 CLASSPATH 定義 (用於找出所有相依 jar),並叫用正確的 Java 解譯器。包裝函式指令碼產生的指令列包含主要類別名稱,後接 "$@",方便您在類別名稱之後傳遞其他引數。不過,您必須在指令列中的類別名稱「之前」指定用於 JVM 剖析的引數。系統會先將 jvm_flags 的內容加入包裝函式指令碼,再列出類別名稱。

請注意,這個屬性對 *_deploy.jar 輸出沒有任何影響

launcher

標籤;預設值為 None

指定要用來執行 Java 程式的二進位檔,而非 JDK 隨附的一般 bin/java 程式。目標必須是 cc_binary。任何實作 Java Invocation APIcc_binary,都可以指定為這項屬性的值。

根據預設,Bazel 會使用一般 JDK 啟動器 (bin/java 或 java.exe)。

相關的 --java_launcher Bazel 標記只會影響「未」指定 launcher 屬性的 java_binaryjava_test 目標。

請注意,您的原生 (C++、SWIG、JNI) 依附元件的建構方式會因使用 JDK 啟動器或其他啟動器而異:

  • 如果您使用的是一般 JDK 啟動器 (預設值),系統會將原生依附元件建構為名為 {name}_nativedeps.so 的共用資料庫,其中 {name} 是此 Java_binary 規則的 name 屬性。這項設定中的連結器不會移除未使用的程式碼。
  • 如果您使用任何其他啟動器,原生 (C++) 依附元件會以靜態方式連結至名為 {name}_nativedeps 的二進位檔,其中 {name} 是此 Java 二進位檔規則的 name 屬性。在這種情況下,連結器會將認為未使用的程式碼從產生的二進位檔中移除。也就是說,除非 cc_library 目標指定 alwayslink = 1,否則您只能連結透過 JNI 存取的任何 C++ 程式碼。

使用預設 JDK 啟動器以外的任何啟動器時,*_deploy.jar 輸出的格式會變更。詳情請參閱主要的 java_binary 文件。

main_class

字串;預設值為 ""

具有 main() 方法的類別名稱,做為進入點。如果規則使用這個選項,就不需要使用 srcs=[...] 清單。 因此,您可以利用這項屬性,透過已包含一或多個 main() 方法的 Java 程式庫執行可執行檔。

此屬性的值是類別名稱,而非來源檔案。該類別必須在執行階段提供:可由此規則 (透過 srcs) 編譯,或由直接或遞移依附元件 (透過 runtime_depsdeps) 提供。如果無法使用該類別,二進位檔會在執行階段失敗;沒有建構時間檢查。

布林值;預設值為 False

plugins

標籤清單;預設為 []

要在編譯期間執行的 Java 編譯器外掛程式。此屬性中指定的每個 java_plugin 都會在每次建立這項規則時執行。程式庫也可能從使用 exported_plugins 的依附元件繼承外掛程式。由外掛程式產生的資源會包含在這項規則產生的 jar 中。
resource_strip_prefix

字串;預設值為 ""

要從 Java 資源去除的路徑前置字串。

如有指定,系統會從 resources 屬性中的每個檔案中移除這個路徑前置字串。如果資源檔案不在這個目錄底下,則為錯誤。如未指定 (預設值),系統會根據與來源檔案的 Java 套件相同的邏輯決定資源檔案的路徑。舉例來說,位於 stuff/java/foo/bar/a.txt 的來源檔案會位於 foo/bar/a.txt

runtime_deps

標籤清單;預設為 []

要提供給最終二進位檔的程式庫,或僅在執行階段進行測試。與一般的 deps 一樣,這些項目會出現在執行階段類別路徑上,但與編譯時間類別路徑不同,而非編譯時間類別路徑。這裡應列出僅在執行階段需要的依附元件。依附元件分析工具應忽略 runtime_depsdeps 中出現的目標。
stamp

整數;預設值為 0

是否要將建構資訊編碼成二進位檔案。可能的值:
  • stamp = 1:一律將建構資訊蓋進二進位檔中,即使是在 --nostamp 版本中執行也一樣。請避免使用此設定,因為這項設定可能會終止二進位檔的遠端快取,以及依附該設定檔的任何下游動作。
  • stamp = 0:一律以常數值取代建構資訊。提供良好的建構結果快取。
  • stamp = -1:嵌入建構資訊是由 --[no]stamp 標記控制。

除非依附元件的依附元件發生變更,否則系統「不會」重新建構戳記二進位檔。

test_class

字串;預設值為 ""

測試執行工具要載入的 Java 類別。

根據預設,如未定義這個引數,則系統會使用舊版模式並改用測試引數。將 --nolegacy_bazel_java_test 旗標設為不要在第一個引數上執行備用。

這項屬性會指定這項測試要執行的 Java 類別名稱。廣告客戶很少必須進行這項設定。如果省略這個引數,系統會使用目標的 name 及其來源根相對路徑來推斷這個引數。如果測試位於已知來源根目錄外,且未設定 test_class,Bazel 就會回報錯誤。

如果是 JUnit3,測試類別必須是 junit.framework.TestCase 的子類別,或是具備會傳回 junit.framework.Test (或 Test 子類別) 的公開靜態 suite() 方法。如果是 JUnit4,該類別必須使用 org.junit.runner.RunWith 註解。

這項屬性可讓多個 java_test 規則共用相同的 Test (TestCaseTestSuite ...)。一般來說,系統會將額外資訊傳遞至此 (例如透過 jvm_flags=['-Dkey=value']),因此在每種情況下的行為會有所不同,例如執行不同的測試子集。這個屬性也能在 javatests 樹狀結構外使用 Java 測試。

use_launcher

布林值;預設值為 True

二進位檔是否應使用自訂啟動器。

如果這個屬性設為 false,系統會忽略這個目標的 launcher 屬性和相關的 --java_launcher 標記。

use_testrunner

布林值;預設值為 True

使用測試執行工具 (預設為 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, exec_compatible_with, exec_properties, features, javacopts, output_licenses, packages, restricted_to, tags, target_compatible_with, testonly, toolchains, 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

字串清單;預設為 []

Java 編譯器標記。
output_licenses

字串清單;預設為 []

packages

標籤清單;預設為 []

要套用設定的一組 package_group

java_plugin

查看規則來源
java_plugin(name, deps, srcs, data, resources, add_exports, add_opens, bootclasspath, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, generates_api, javabuilder_jvm_flags, javacopts, licenses, neverlink, output_licenses, plugins, processor_class, proguard_specs, resource_strip_prefix, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_plugin 會定義 Bazel 所執行 Java 編譯器的外掛程式。目前唯一支援的外掛程式類型是註解處理工具。java_libraryjava_binary 規則可以透過 plugins 屬性,依元件執行外掛程式。java_library 也可以使用 exported_plugins 將外掛程式自動匯出至直接依附的程式庫。

隱式輸出目標

  • libname.jar:Java 封存檔案。

除了加入 processor_class 引數外,引數與 java_library 相同。

引數

屬性
name

名稱;必填

這個目標的專屬名稱。

deps

標籤清單;預設為 []

要連結至這個程式庫的程式庫清單。請參閱有關 deps 的一般註解,請參閱「多數建構規則所定義的一般屬性」。

deps 中列出的 java_library 規則所建立的 jar 將會位於這項規則的編譯時間類別路徑上。此外,其 depsruntime_depsexports 的遞移性關閉會在執行階段類別路徑上。

相反地,data 屬性中的目標會納入執行檔案,但不會納入編譯時間和執行階段類別路徑。

srcs

標籤清單;預設為 []

系統會為建立目標而處理的來源檔案清單。這項屬性幾乎一律為必要屬性,請參閱下方例外狀況。

系統會編譯 .java 類型的來源檔案。如果是產生的 .java 檔案,通常建議將產生的規則名稱放在這裡,而非檔案名稱。這不僅可提高可讀性,還能讓規則更能抵禦日後的變更:如果產生的規則日後產生不同的檔案,您只需修正一個位置,即產生規則的 outs。請勿在 deps 中列出產生規則,因為這是一種免人工管理。

系統會解壓縮及編譯 .srcjar 類型的來源檔案。(如果您需要使用 Genrule 產生一組 .java 檔案,這個方法就很實用)。

規則:如果規則 (通常是 genrulefilegroup) 產生上述任何檔案,其使用方式會與來源檔案所述的方式相同。

系統會將 .properties 類型的來源檔案視為資源。

所有其他檔案都會遭到忽略,前提是至少具備上述一種檔案類型。否則,會引發錯誤。

這個引數幾乎一律需要,除非您指定 runtime_deps 引數。

data

標籤清單;預設為 []

這個程式庫在執行階段需要的檔案清單。請參閱有關 data 的一般註解,請參閱「多數建構規則所定義的一般屬性」。

建構 java_library 時,Bazel 不會將這些檔案放在任何位置;如果 data 檔案是由 Bazel 產生,就會產生這些檔案。建構依附於此 java_library Bazel 的測試時,會將 data 檔案複製或連結至執行檔案區域。

resources

標籤清單;預設為 []

在 Java jar 中納入的資料檔案清單。

資源可以是來源檔案或產生的檔案。

如果已指定資源,這些資源會與編譯產生的一般 .class 檔案一起封裝在 jar 中。jar 檔案中的資源位置取決於專案結構。Bazel 會先尋找 Maven 的標準目錄版面配置 (即「src」目錄,後面接著「resources」目錄子層)。如果找不到這個檔案,Bazel 會尋找最頂層的「java」或「javatests」目錄 (例如,如果資源位於 <workspace root>/x/java/y/java/z,則資源路徑將會是 y/java/z)。此經驗法則無法覆寫,但 resource_strip_prefix 屬性可用來指定資源檔案的特定額外目錄。

add_exports

字串清單;預設為 []

允許這個程式庫存取指定的 modulepackage

這與 javac 和 JVM --add-exports= 標記對應。

add_opens

字串清單;預設為 []

允許這個程式庫以反射方式存取指定的 modulepackage

這與 javac 和 JVM --add-opens= 標記相對應。

bootclasspath

標籤;預設值為 None

受限制的 API,請勿使用!
generates_api

布林值;預設值為 False

這項屬性會標記產生 API 程式碼的註解處理工具。

如果規則使用產生 API 的註解處理工具,其他依附的規則,則必須在產生規則之後排定編譯動作,才能參照系統產生的程式碼。這項屬性會指示 Bazel 在啟用 --java_header_compile 時導入排程限制。

警告:這項屬性會影響建構效能,請只在必要時使用。

javabuilder_jvm_flags

字串清單;預設為 []

受限制的 API,請勿使用!
javacopts

字串清單;預設為 []

這個程式庫的其他編譯器選項。 取決於「Make 變數」替換和 Bourne shell 符記化

這些編譯器選項會在全域編譯器選項之後傳遞至 javac。

布林值;預設值為 False

這個程式庫是否只應用於編譯,而不應在執行階段使用。如果執行階段環境在執行期間會提供程式庫,此屬性就非常實用。這類程式庫包括適用於 IDE 外掛程式的 IDE API,或是在標準 JDK 上執行的所有內容為 tools.jar

請注意,neverlink = 1 並未禁止編譯器將來自此程式庫的內容內嵌至依附於程式庫的編譯目標,前提是 Java 語言規範 (例如String 或原始類型的 static final 常數)。因此,當執行階段程式庫與編譯程式庫完全相同時,是偏好的用途。

如果執行階段程式庫與編譯程式庫不同,您必須確保該程式庫僅與 JLS 禁止編譯器進行內嵌時的差異 (且必須保留日後所有 JLS 版本的 JLS)。

output_licenses

字串清單;預設為 []

plugins

標籤清單;預設為 []

要在編譯期間執行的 Java 編譯器外掛程式。此屬性中指定的每個 java_plugin 都會在每次建立這項規則時執行。程式庫也可能從使用 exported_plugins 的依附元件繼承外掛程式。由外掛程式產生的資源會包含在這項規則產生的 jar 中。
processor_class

字串;預設值為 ""

處理工具類別是 Java 編譯器應使用做為註解處理工具進入點的完整類別類型。如未指定,這項規則就不會為 Java 編譯器的註解處理作業提供註解處理工具,但其執行階段類別路徑仍會納入編譯器的註解處理工具路徑。(這主要是供 Error Prone 外掛程式使用,後者會使用 java.util.ServiceLoader 從註解處理工具路徑載入)。
proguard_specs

標籤清單;預設為 []

要做為 Proguard 規格的檔案。 下文將說明 Proguard 使用的規格組合。如有指定,系統會根據這個程式庫將其新增至任何 android_binary 目標。此處納入的檔案只能使用冪等規則,即 -dontnote、-dontwarn、假設性影響,以及開頭為 -keep 的規則。其他選項只能在 android_binary 的 proguard_specs 中顯示,以確保不會自動合併。
resource_strip_prefix

字串;預設值為 ""

要從 Java 資源去除的路徑前置字串。

如有指定,系統會從 resources 屬性中的每個檔案中移除這個路徑前置字串。如果資源檔案不在這個目錄底下,則為錯誤。如未指定 (預設值),系統會根據與來源檔案的 Java 套件相同的邏輯決定資源檔案的路徑。舉例來說,位於 stuff/java/foo/bar/a.txt 的來源檔案會位於 foo/bar/a.txt

java_runtime

查看規則來源
java_runtime(name, srcs, compatible_with, default_cds, deprecation, distribs, exec_compatible_with, exec_properties, features, hermetic_srcs, hermetic_static_libs, java, java_home, lib_ct_sym, lib_modules, output_licenses, restricted_to, tags, target_compatible_with, testonly, toolchains, version, visibility)

指定 Java 執行階段的設定。

示例:



java_runtime(
    name = "jdk-9-ea+153",
    srcs = glob(["jdk9-ea+153/**"]),
    java_home = "jdk9-ea+153",
)


引數

屬性
name

名稱;必填

這個目標的專屬名稱。

srcs

標籤清單;預設為 []

執行階段中的所有檔案。
default_cds

標籤;預設值為 None

密封 java_runtime 的預設 CDS 封存。如果 java_binary 目標已啟用密封設計,且目標並未透過指定 classlist 屬性提供自己的 CDS 封存內容,則 java_runtime 預設 CDS 會封裝至密封部署 JAR 中。
hermetic_srcs

標籤清單;預設為 []

在執行階段中進行密封部署所需的檔案。
hermetic_static_libs

標籤清單;預設為 []

針對密封部署,與啟動器靜態連結的程式庫
java

標籤;預設值為 None

Java 執行檔的路徑。
java_home

字串;預設值為 ""

執行階段根目錄的路徑。取決於 「Make」變數替換作業。如果這個路徑是絕對路徑,規則會以已知路徑表示非密封的 Java 執行階段。在這種情況下,srcsjava 屬性必須留空。
lib_ct_sym

標籤;預設值為 None

使用 --release 編譯時所需的 lib/ct.sym 檔案。如未指定,且 srcs 中只有一個路徑結尾為 /lib/ct.sym 的檔案,系統會使用該檔案。
lib_modules

標籤;預設值為 None

密封部署所需的 lib/modules 檔案。
output_licenses

字串清單;預設為 []

version

整數;預設值為 0

Java 執行階段的功能版本。也就是 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_javacopts, compatible_with, deprecation, deps_checker, distribs, exec_compatible_with, exec_properties, features, forcibly_disable_header_compilation, genclass, header_compiler, header_compiler_builtin_processors, header_compiler_direct, ijar, jacocorunner, java_runtime, javabuilder, javabuilder_data, javabuilder_jvm_opts, javac_supports_multiplex_workers, javac_supports_worker_cancellation, javac_supports_worker_multiplex_sandboxing, javac_supports_workers, javacopts, jspecify_implicit_deps, jspecify_javacopts, jspecify_packages, jspecify_processor, jspecify_processor_class, jspecify_stubs, jvm_opts, licenses, misc, oneversion, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, proguard_allowlister, reduced_classpath_incompatible_processors, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, toolchains, tools, turbine_data, turbine_jvm_opts, visibility, xlint)

指定 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 中適用於 label-expansion 的工具標籤。
android_lint_jvm_opts

字串清單;預設為 []

叫用 Android Lint 時的 JVM 引數清單。
android_lint_opts

字串清單;預設為 []

Android Lint 引數清單。
android_lint_package_configuration

標籤清單;預設為 []

應套用至指定套件群組的 Android Lint 設定。
android_lint_runner

標籤;預設值為 None

Android Lint 執行器的標籤 (如果有的話)。
bootclasspath

標籤清單;預設為 []

Java 目標 bootclasspath 項目。對應至 javac 的 -bootclasspath 旗標。
compatible_javacopts

null; default is {}

內部 API,請勿使用!
deps_checker

標籤;預設值為 None

ImportDepsChecker 部署 jar 的標籤。
forcibly_disable_header_compilation

布林值;預設值為 False

覆寫 --java_header_compile 以在不支援此功能的平台 (例如 JDK 7 Bazel) 上停用標頭編譯功能。
genclass

標籤;預設值為 None

GenClass 部署 Jar 的標籤。
header_compiler

標籤;預設值為 None

標頭編譯器的標籤。如果已啟用 --java_header_compile 時,就必須設定這個屬性。
header_compiler_builtin_processors

字串清單;預設為 []

內部 API,請勿使用!
header_compiler_direct

標籤;預設值為 None

用於直接類別路徑動作的標頭編譯器標籤,該標籤不含任何 API 產生註解處理工具。

這項工具不支援註解處理功能。

ijar

標籤;預設值為 None

ijar 執行檔的標籤。
jacocorunner

標籤;預設值為 None

JacocoCoverageRunner 部署 Jar 的標籤。
java_runtime

標籤;預設值為 None

要與這個工具鍊搭配使用的 java_runtime。在執行設定中預設為 java_runtime。
javabuilder

標籤;預設值為 None

JavaBuilder 部署 jar 的標籤。
javabuilder_data

標籤清單;預設為 []

javabuilder_jvm_opts 中適用於 label-expansion 的資料標籤。
javabuilder_jvm_opts

字串清單;預設為 []

叫用 JavaBuilder 時的 JVM 引數清單。
javac_supports_multiplex_workers

布林值;預設值為 True

如果 JavaBuilder 支援以多工永久工作站執行,則為「true」,否則為「false」。
javac_supports_worker_cancellation

布林值;預設值為 True

如果 JavaBuilder 支援取消永久工作站,則為 true;如果不支援,則為 false。
javac_supports_worker_multiplex_sandboxing

布林值;預設值為 False

如果 JavaBuilder 支援在採用沙箱機制的情況下,以多工永久工作站的形式執行,則為 true;如果不是,則為 false。
javac_supports_workers

布林值;預設值為 True

如果 JavaBuilder 支援以永久工作站的形式執行,則為「true」,如果不支援,則為「false」。
javacopts

字串清單;預設為 []

Java 編譯器的其他引數清單。如需可能的 Java 編譯器標記完整清單,請參閱 Java 編譯器說明文件。
jspecify_implicit_deps

標籤;預設值為 None

實驗功能,請勿使用!
jspecify_javacopts

字串清單;預設為 []

實驗功能,請勿使用!
jspecify_packages

標籤清單;預設為 []

實驗功能,請勿使用!
jspecify_processor

標籤;預設值為 None

實驗功能,請勿使用!
jspecify_processor_class

字串;預設值為 ""

實驗功能,請勿使用!
jspecify_stubs

標籤清單;預設為 []

實驗功能,請勿使用!
jvm_opts

字串清單;預設為 []

叫用 Java 編譯器時的 JVM 引數清單。如需此選項的完整可能標記清單,請參閱 Java 虛擬機器說明文件。
misc

字串清單;預設為 []

已淘汰:請改用 javacopts
oneversion

標籤;預設值為 None

單一版本的強制執行二進位檔標籤。
oneversion_allowlist_for_tests

標籤;預設值為 None

測試專用版本許可清單的標籤。
oneversion_whitelist

標籤;預設值為 None

單一版本許可清單的標籤。
package_configuration

標籤清單;預設為 []

要套用至指定套件群組的設定。
proguard_allowlister

標籤;預設值為 "@bazel_tools//tools/jdk:proguard_whitelister"

Proguard 許可清單的標籤。
reduced_classpath_incompatible_processors

字串清單;預設為 []

內部 API,請勿使用!
singlejar

標籤;預設值為 None

SingleJar 部署 Jar 的標籤。
source_version

字串;預設值為 ""

Java 來源版本 (例如「6」或「7」)。用於指定 Java 原始碼中允許的程式碼結構組合。
target_version

字串;預設值為 ""

Java 目標版本 (例如「6」或「7」)。用於指定該類別應在哪個 Java 執行階段中建構。
timezone_data

標籤;預設值為 None

包含時區資料的資源 jar 標籤。如果已設定,系統會新增時區資料,做為所有 Java_binary 規則的隱含執行階段依附元件。
tools

標籤清單;預設為 []

jvm_opts 中適用於 label-expansion 的工具標籤。
turbine_data

標籤清單;預設為 []

turbine_jvm_opts 中的標籤擴展資料標籤。
turbine_jvm_opts

字串清單;預設為 []

叫用 Turbine 時的 JVM 引數清單。
xlint

字串清單;預設為 []

要從預設清單中移除或從預設清單中移除的警告清單。在前面加上破折號可將其移除詳情請參閱 -Xlint 選項的 Javac 說明文件。