Java 规则

报告问题 查看源代码 Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

规则

java_binary

查看规则来源
java_binary(name, deps, srcs, data, resources, add_exports, add_opens, args, bootclasspath, classpath_resources, compatible_with, create_executable, deploy_env, deploy_manifest_lines, deprecation, env, exec_compatible_with, exec_group_compatible_with, exec_properties, features, javacopts, jvm_flags, launcher, licenses, main_class, neverlink, output_licenses, package_metadata, plugins, resource_strip_prefix, restricted_to, runtime_deps, stamp, tags, target_compatible_with, testonly, toolchains, use_launcher, use_testrunner, visibility)

构建 Java 归档文件(“jar 文件”),以及一个与规则同名的封装 shell 脚本。 封装容器 shell 脚本使用一个类路径,该类路径包含二进制文件所依赖的每个库的 jar 文件(以及其他内容)。运行封装容器 shell 脚本时,任何非空的 JAVABIN 环境变量都将优先于通过 Bazel 的 --java_runtime_version 标志指定的版本。

封装脚本接受多个独特的标志。如需查看封装容器接受的可配置标志和环境变量的列表,请参阅 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 的情况除外。

最好使用作为应用主要入口点的源文件的名称(不含扩展名)。例如,如果您的入口点名为 Main.java,则您的名称可以是 Main

在不含 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

名称;必需

相应目标的唯一名称。

deps

标签列表;默认值为 []

要链接到目标中的其他库的列表。 如需查看有关 deps 的一般注释,请参阅大多数 build 规则定义的典型属性
srcs

标签列表;默认值为 []

用于创建目标的已处理源文件列表。 此属性几乎总是必需属性;请参阅下文了解例外情况。

系统会编译 .java 类型的源文件。对于生成的 .java 文件,通常建议在此处放置生成规则的名称,而不是文件本身的名称。这不仅提高了可读性,还使规则更能适应未来的变化:如果生成规则将来生成不同的文件,您只需修复一个位置:生成规则的 outs。您不应在 deps 中列出生成规则,因为它是无操作。

类型为 .srcjar 的源文件会被解压缩并编译。(如果您需要使用 genrule 生成一组 .java 文件,此方法非常有用。)

规则:如果规则(通常为 genrulefilegroup)生成了上述任何文件,这些文件的使用方式将与源文件相同。

此实参几乎总是必需的,除非 main_class 属性指定了运行时类路径上的类,或者您指定了 runtime_deps 实参。

data

标签列表;默认值为 []

相应库在运行时所需的文件列表。 如需查看有关 data 的一般注释,请参阅大多数 build 规则定义的典型属性
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_env

标签列表;默认值为 []

表示相应二进制文件的部署环境的其他 java_binary 目标的列表。 在构建将由另一个 java_binary 加载的插件时,请设置此属性。
设置此属性会从相应二进制文件的运行时 classpath(以及部署 jar)中排除此二进制文件与 deploy_env 中指定的目标之间共享的所有依赖项。
deploy_manifest_lines

字符串列表;默认值为 []

要添加到为 *_deploy.jar 目标生成的 META-INF/manifest.mf 文件的代码行列表。此属性的内容“设为变量”替换的影响。
javacopts

字符串列表;默认值为 []

相应二进制文件的额外编译器选项。 受“创建变量”替换和 Bourne shell 令牌化的影响。

这些编译器选项会在全局编译器选项之后传递给 javac。

jvm_flags

字符串列表;默认值为 []

要嵌入到为运行此二进制文件而生成的封装脚本中的标志列表。受 $(location)“Make variable”替换以及 Bourne shell 令牌化的约束。

Java 二进制文件的封装容器脚本包含 CLASSPATH 定义(用于查找所有依赖的 JAR)并调用正确的 Java 解释器。封装容器脚本生成的命令行包含主类的名称,后跟 "$@",因此您可以在类名后传递其他实参。不过,打算由 JVM 解析的实参必须在命令行上的类名称之前指定。jvm_flags 的内容会添加到封装脚本中,然后列出类名称。

请注意,此属性对 *_deploy.jar 输出没有影响

launcher

标签;默认值为 None

指定将用于运行 Java 程序的二进制文件,而不是 JDK 中包含的常规 bin/java 程序。目标必须是 cc_binary。实现 Java 调用 API 的任何 cc_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_binary 规则的 name 属性。在这种情况下,链接器会从生成的二进制文件中移除它认为未使用的任何代码,这意味着,除非 cc_library 目标指定了 alwayslink = True,否则仅通过 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 类似,这些内容会出现在运行时类路径上,但与普通 deps 不同的是,它们不会出现在编译时类路径上。仅在运行时需要的依赖项应在此处列出。依赖关系分析工具应忽略同时出现在 runtime_depsdeps 中的目标。
stamp

整数;默认值为 -1

是否将 build 信息编码到二进制文件中。可能的值:
  • stamp = 1:始终将 build 信息标记到二进制文件中,即使在 --nostamp build 中也是如此。应避免使用此设置,因为它可能会终止二进制文件和依赖于它的任何下游操作的远程缓存。
  • stamp = 0:始终将 build 信息替换为常量值。这可实现良好的 build 结果缓存。
  • 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, exec_compatible_with, exec_group_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, package_metadata, 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、assumenosideeffects 以及以 -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, exec_compatible_with, exec_group_compatible_with, exec_properties, exported_plugins, exports, features, javabuilder_jvm_flags, javacopts, licenses, neverlink, package_metadata, 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 的一般注释,请参阅大多数 build 规则定义的典型属性

deps 中列出的 java_library 规则构建的 jar 将位于相应规则的编译时 classpath 中。此外,它们的 depsruntime_depsexports 的传递闭包将位于运行时类路径中。

相比之下,data 属性中的目标包含在 runfiles 中,但既不在编译时 classpath 中,也不在运行时 classpath 中。

srcs

标签列表;默认值为 []

用于创建目标的已处理源文件列表。 此属性几乎总是必需属性;请参阅下文了解例外情况。

系统会编译 .java 类型的源文件。对于生成的 .java 文件,通常建议在此处放置生成规则的名称,而不是文件本身的名称。这不仅提高了可读性,还使规则更能适应未来的变化:如果生成规则将来生成不同的文件,您只需修复一个位置:生成规则的 outs。您不应在 deps 中列出生成规则,因为它是无操作。

类型为 .srcjar 的源文件会被解压缩并编译。(如果您需要使用 genrule 生成一组 .java 文件,此方法非常有用。)

规则:如果规则(通常为 genrulefilegroup)生成了上述任何文件,这些文件的使用方式将与源文件相同。

类型为 .properties 的源文件被视为资源。

只要存在至少一个上述文件类型的文件,系统就会忽略所有其他文件。否则会引发错误。

此实参几乎总是必需的,除非您指定了 runtime_deps 实参。

data

标签列表;默认值为 []

相应库在运行时所需的文件列表。 如需查看有关 data 的一般注释,请参阅大多数 build 规则定义的典型属性

构建 java_library 时,Bazel 不会将这些文件放在任何位置;如果 data 文件是生成的文件,则 Bazel 会生成它们。构建依赖于此 java_library 的测试时,Bazel 会将 data 文件复制或链接到 runfiles 区域。

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 可以访问 Y 中的代码。下面我们来看一些示例,以便更好地理解这一点。

假设 A 依赖于 B,而 B 依赖于 C。在这种情况下,C 是 A 的传递依赖项,因此更改 C 的来源并重新构建 A 将正确重新构建所有内容。不过,A 将无法使用 C 中的类。为了实现这一点,A 必须在其 deps 中声明 C,或者 B 可以在其 exports 属性中声明 C,从而让 A(以及可能依赖于 A 的任何内容)更轻松地实现这一点。

导出库的关闭适用于所有直接父规则。再举一个略有不同的例子:A 依赖于 B,B 依赖于 C 和 D,并且还导出 C 但不导出 D。 现在,A 可以访问 C,但不能访问 D。现在,如果 C 和 D 分别导出了某些库(C' 和 D'),A 只能访问 C',而不能访问 D'。

重要提示:导出的规则不是常规依赖项。沿用上一个示例,如果 B 导出 C 并想使用 C,则还必须在自己的 deps 中列出 C。

javabuilder_jvm_flags

字符串列表;默认值为 []

受限 API,请勿使用!
javacopts

字符串列表;默认值为 []

此库的额外编译器选项。 受“创建变量”替换和 Bourne shell 令牌化的影响。

这些编译器选项会在全局编译器选项之后传递给 javac。

布尔值;默认值为 False

相应库是否应仅用于编译,而不用于运行时。如果库将在执行期间由运行时环境提供,则此属性非常有用。此类库的示例包括 IDE 插件的 IDE API 或 tools.jar(适用于在标准 JDK 上运行的任何内容)。

请注意,neverlink = True 不会阻止编译器将此库中的内容内嵌到依赖于它的编译目标中,Java 语言规范允许这样做(例如,String 或原初类型的 static final 常量)。因此,首选使用情形是运行时库与编译库完全相同。

如果运行时库与编译库不同,则必须确保运行时库仅在 JLS 禁止编译器内联的位置有所不同(并且必须适用于 JLS 的所有未来版本)。

plugins

标签列表;默认值为 []

在编译时运行的 Java 编译器插件。 每当构建相应规则时,系统都会运行此属性中指定的每个 java_plugin。库还可以从使用 exported_plugins 的依赖项继承插件。插件生成的资源将包含在此规则的最终 JAR 中。
proguard_specs

标签列表;默认值为 []

要用作 Proguard 规范的文件。 这些文件将描述 Proguard 要使用的一组规范。如果指定,它们将添加到依赖于此库的任何 android_binary 目标中。 此处包含的文件必须仅包含幂等规则,即 -dontnote、-dontwarn、assumenosideeffects 以及以 -keep 开头的规则。其他选项只能出现在 android_binary 的 proguard_specs 中,以确保非同义反复的合并。
resource_strip_prefix

字符串;默认值为 ""

要从 Java 资源中剥离的路径前缀。

如果指定,则会从 resources 属性中的每个文件中剥离此路径前缀。如果资源文件不在此目录下,则会出错。如果未指定(默认),资源文件的路径将根据与源文件的 Java 软件包相同的逻辑来确定。例如,位于 stuff/java/foo/bar/a.txt 的源文件将位于 foo/bar/a.txt

runtime_deps

标签列表;默认值为 []

仅在运行时提供给最终二进制文件或测试的库。 与普通 deps 类似,这些内容会出现在运行时类路径上,但与普通 deps 不同的是,它们不会出现在编译时类路径上。仅在运行时需要的依赖项应在此处列出。依赖关系分析工具应忽略同时出现在 runtime_depsdeps 中的目标。

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, env, env_inherit, exec_compatible_with, exec_group_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, launcher, licenses, local, main_class, neverlink, package_metadata, 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_binaryname_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 的一般注释,请参阅大多数 build 规则定义的典型属性
srcs

标签列表;默认值为 []

用于创建目标的已处理源文件列表。 此属性几乎总是必需属性;请参阅下文了解例外情况。

系统会编译 .java 类型的源文件。对于生成的 .java 文件,通常建议在此处放置生成规则的名称,而不是文件本身的名称。这不仅提高了可读性,还使规则更能适应未来的变化:如果生成规则将来生成不同的文件,您只需修复一个位置:生成规则的 outs。您不应在 deps 中列出生成规则,因为它是无操作。

类型为 .srcjar 的源文件会被解压缩并编译。(如果您需要使用 genrule 生成一组 .java 文件,此方法非常有用。)

规则:如果规则(通常为 genrulefilegroup)生成了上述任何文件,这些文件的使用方式将与源文件相同。

此实参几乎总是必需的,除非 main_class 属性指定了运行时类路径上的类,或者您指定了 runtime_deps 实参。

data

标签列表;默认值为 []

相应库在运行时所需的文件列表。 如需查看有关 data 的一般注释,请参阅大多数 build 规则定义的典型属性
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 文件的代码行列表。此属性的内容“设为变量”替换的影响。
javacopts

字符串列表;默认值为 []

相应二进制文件的额外编译器选项。 受“创建变量”替换和 Bourne shell 令牌化的影响。

这些编译器选项会在全局编译器选项之后传递给 javac。

jvm_flags

字符串列表;默认值为 []

要嵌入到为运行此二进制文件而生成的封装脚本中的标志列表。受 $(location)“Make variable”替换以及 Bourne shell 令牌化的约束。

Java 二进制文件的封装容器脚本包含 CLASSPATH 定义(用于查找所有依赖的 JAR)并调用正确的 Java 解释器。封装容器脚本生成的命令行包含主类的名称,后跟 "$@",因此您可以在类名后传递其他实参。不过,打算由 JVM 解析的实参必须在命令行上的类名称之前指定。jvm_flags 的内容会添加到封装脚本中,然后列出类名称。

请注意,此属性对 *_deploy.jar 输出没有影响

launcher

标签;默认值为 None

指定将用于运行 Java 程序的二进制文件,而不是 JDK 中包含的常规 bin/java 程序。目标必须是 cc_binary。实现 Java 调用 API 的任何 cc_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_binary 规则的 name 属性。在这种情况下,链接器会从生成的二进制文件中移除它认为未使用的任何代码,这意味着,除非 cc_library 目标指定了 alwayslink = True,否则仅通过 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 类似,这些内容会出现在运行时类路径上,但与普通 deps 不同的是,它们不会出现在编译时类路径上。仅在运行时需要的依赖项应在此处列出。依赖关系分析工具应忽略同时出现在 runtime_depsdeps 中的目标。
stamp

整数;默认值为 0

是否将 build 信息编码到二进制文件中。可能的值:
  • stamp = 1:始终将 build 信息标记到二进制文件中,即使在 --nostamp build 中也是如此。应避免使用此设置,因为它可能会终止二进制文件和依赖于它的任何下游操作的远程缓存。
  • stamp = 0:始终将 build 信息替换为常量值。这可实现良好的 build 结果缓存。
  • 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() 方法。

此属性允许多个 java_test 规则共享同一 TestTestCaseTestSuite 等)。通常,其他信息会传递给它(例如通过 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, exec_compatible_with, exec_group_compatible_with, exec_properties, features, javacopts, output_licenses, package_metadata, packages, restricted_to, system, 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 的集合。
system

标签;默认值为 None

对应于 javac 的 --system 标志。

java_plugin

查看规则来源
java_plugin(name, deps, srcs, data, resources, add_exports, add_opens, bootclasspath, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, generates_api, javabuilder_jvm_flags, javacopts, licenses, neverlink, output_licenses, package_metadata, 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 归档。

实参是 java_library() 的实参的子集(语义相同),但添加了 processor_classgenerates_api 实参。

参数

属性
name

名称;必需

相应目标的唯一名称。

deps

标签列表;默认值为 []

要链接到此库中的库的列表。 如需查看有关 deps 的一般注释,请参阅大多数 build 规则定义的典型属性

deps 中列出的 java_library 规则构建的 jar 将位于相应规则的编译时 classpath 中。此外,它们的 depsruntime_depsexports 的传递闭包将位于运行时类路径中。

相比之下,data 属性中的目标包含在 runfiles 中,但既不在编译时 classpath 中,也不在运行时 classpath 中。

srcs

标签列表;默认值为 []

用于创建目标的已处理源文件列表。 此属性几乎总是必需属性;请参阅下文了解例外情况。

系统会编译 .java 类型的源文件。对于生成的 .java 文件,通常建议在此处放置生成规则的名称,而不是文件本身的名称。这不仅提高了可读性,还使规则更能适应未来的变化:如果生成规则将来生成不同的文件,您只需修复一个位置:生成规则的 outs。您不应在 deps 中列出生成规则,因为它是无操作。

类型为 .srcjar 的源文件会被解压缩并编译。(如果您需要使用 genrule 生成一组 .java 文件,此方法非常有用。)

规则:如果规则(通常为 genrulefilegroup)生成了上述任何文件,这些文件的使用方式将与源文件相同。

类型为 .properties 的源文件被视为资源。

只要存在至少一个上述文件类型的文件,系统就会忽略所有其他文件。否则会引发错误。

此实参几乎总是必需的,除非您指定了 runtime_deps 实参。

data

标签列表;默认值为 []

相应库在运行时所需的文件列表。 如需查看有关 data 的一般注释,请参阅大多数 build 规则定义的典型属性

构建 java_library 时,Bazel 不会将这些文件放在任何位置;如果 data 文件是生成的文件,则 Bazel 会生成它们。构建依赖于此 java_library 的测试时,Bazel 会将 data 文件复制或链接到 runfiles 区域。

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_compilation 时引入调度限制。

警告:此属性会影响 build 性能,请仅在必要时使用。

javabuilder_jvm_flags

字符串列表;默认值为 []

受限 API,请勿使用!
javacopts

字符串列表;默认值为 []

此库的额外编译器选项。 受“创建变量”替换和 Bourne shell 令牌化的影响。

这些编译器选项会在全局编译器选项之后传递给 javac。

布尔值;默认值为 False

相应库是否应仅用于编译,而不用于运行时。如果库将在执行期间由运行时环境提供,则此属性非常有用。此类库的示例包括 IDE 插件的 IDE API 或 tools.jar(适用于在标准 JDK 上运行的任何内容)。

请注意,neverlink = True 不会阻止编译器将此库中的内容内嵌到依赖于它的编译目标中,Java 语言规范允许这样做(例如,String 或原初类型的 static final 常量)。因此,首选使用情形是运行时库与编译库完全相同。

如果运行时库与编译库不同,则必须确保运行时库仅在 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、assumenosideeffects 以及以 -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, exec_compatible_with, exec_group_compatible_with, exec_properties, features, hermetic_srcs, hermetic_static_libs, java, java_home, lib_ct_sym, lib_modules, output_licenses, package_metadata, 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 目标启用 hermetic 后,默认 CDS java_runtime 会打包到 hermetic 部署 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_single_jar

查看规则来源
java_single_jar(name, deps, compatible_with, compress, deploy_env, deploy_manifest_lines, deprecation, exclude_build_data, exec_compatible_with, exec_group_compatible_with, exec_properties, features, multi_release, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
将 Java 依赖项和 jar 文件收集到单个 jar 中 `java_single_jar` 将 Java 依赖项和 jar 文件收集到单个 jar 中。 这类似于 java_binary,但禁用了与可执行文件相关的所有内容,并提供了一种替代 java_binary“部署 jar 破解”的方法。 ## 示例 ```skylark load("//tools/build_defs/java_single_jar:java_single_jar.bzl", "java_single_jar") java_single_jar( name = "my_single_jar", deps = [ "//java/com/google/foo", "//java/com/google/bar", ], ) ``` 输出: {name}.jar:包含所有输入的单个 jar。

参数

属性
name

名称;必需

相应目标的唯一名称。

deps

标签列表;默认值为 []

要从中收集传递依赖项的 Java 目标(包括 java_import 和 java_library)。运行时依赖项通过 deps、exports 和 runtime_deps 收集。还会收集资源。 原生 cc_library 或 java_wrap_cc 依赖项不是。
compress

字符串;默认值为 "preserve"

是始终压缩(“yes”)、始终存储(“no”),还是保持不变(“preserve”)。默认值为“preserve”,这是最有效的选项 - 无需执行额外的放大或缩小工作。
deploy_env

标签列表;默认值为 []

一个 `java_binary` 或 `java_single_jar` 目标列表,用于表示相应二进制文件的部署环境。 在构建将由另一个 `java_binary` 加载的插件时设置此属性。 `deploy_env` 依赖项会从此规则构建的 jar 中排除。
deploy_manifest_lines

字符串列表;默认值为 []

要添加到 META-INF/manifest.mf 文件中的行列表。
exclude_build_data

布尔值;默认值为 True

是否省略默认生成的 build-data.properties 文件。
multi_release

布尔值;默认值为 True

是否启用多版本输出 JAR。

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, exec_compatible_with, exec_group_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, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, package_metadata, 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 中可用于标签扩展的工具的标签。
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;默认值为 {}

内部 API,请勿使用!
deps_checker

标签;默认值为 None

ImportDepsChecker 部署 jar 的标签。
forcibly_disable_header_compilation

布尔值;默认值为 False

替换 --java_header_compilation 以在不支持标头编译的平台(例如 JDK 7 Bazel)上停用标头编译。
genclass

标签;默认值为 None

GenClass 部署 jar 的标签。
header_compiler

标签;默认值为 None

标题编译器的标签。如果启用了 --java_header_compilation,则必须提供此值。
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 中用于标签扩展的数据的标签。
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

标签;默认值为 None

单版本许可名单的标签。
oneversion_allowlist_for_tests

标签;默认值为 None

测试所用单版本许可名单的标签。
oneversion_whitelist

标签;默认值为 None

已弃用:请改用 oneversion_allowlist
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 中可用于标签扩展的工具的标签。
turbine_data

标签列表;默认值为 []

turbine_jvm_opts 中可用于标签扩展的数据的标签。
turbine_jvm_opts

字符串列表;默认值为 []

调用 Turbine 时 JVM 的实参列表。
xlint

字符串列表;默认值为 []

要添加到默认列表或从默认列表中移除的警告列表。在前面加上短划线即可移除。如需了解详情,请参阅有关 -Xlint 选项的 Javac 文档。