Reglas de Java

Informar un problema Ver fuente Por la noche · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

Reglas

java_binary

Ver el código fuente de la regla
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)

Compila un archivo Java (“archivo jar”), además de una secuencia de comandos shell wrapper con el mismo nombre que la regla. La secuencia de comandos de shell del wrapper usa una ruta de clase que incluye, entre otras cosas, un archivo jar para cada biblioteca de la que depende el objeto binario. Cuando se ejecuta la secuencia de comandos de shell del wrapper, cualquier recurso La variable de entorno JAVABIN tendrá prioridad sobre la versión especificada mediante Marca --java_runtime_version de Bazel.

La secuencia de comandos del wrapper acepta varias marcas únicas. Consulta //src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt para obtener una lista de marcas configurables y variables de entorno que acepta el wrapper.

Destinos de salida implícitos

  • name.jar: Es un archivo Java que contiene los archivos de clase y otros archivos. recursos correspondientes a las dependencias directas del objeto binario.
  • name-src.jar: Es un archivo que contiene las fuentes ("source jar").
  • name_deploy.jar: un archivo Java adecuado para la implementación (solo compilarse si se solicita explícitamente).

    Compilando el destino <name>_deploy.jar para tu regla crea un archivo jar autónomo con un manifiesto que permite ejecutarlo con el El comando java -jar o con el --singlejar de la secuencia de comandos del wrapper de 12 a 1 con la nueva opción de compresión. Se prefiere el uso de la secuencia de comandos del wrapper en lugar de java -jar, ya que también pasa las marcas de JVM y las opciones cargar bibliotecas nativas.

    El jar de implementación contiene todas las clases que encontraría un cargador de clases Se buscó la ruta de clase desde la secuencia de comandos del wrapper del objeto binario de principio a fin. También que contiene las bibliotecas nativas necesarias para las dependencias. Se cargan automáticamente a la JVM durante el tiempo de ejecución.

    Si el destino especifica un selector. entonces, en lugar de ser un archivo JAR normal, el _deploy.jar será un binario nativo. Esto contendrá el selector y cualquier dependencia nativa (C++) de tu regla, todo vinculado en un objeto binario estático. Los bytes reales del archivo jar serán agregado a ese binario nativo, lo que crea un único BLOB binario que contiene ejecutable y el código Java. Puedes ejecutar el archivo jar resultante directamente como lo harías con cualquier objeto binario nativo.

  • name_deploy-src.jar: Es un archivo que contiene las fuentes. recopilados a partir del cierre transitivo del objetivo. Estos coincidirán con las clases de la deploy.jar, excepto cuando los archivos jar no tienen ninguno de origen coincidente.

No se permite un atributo deps en una regla java_binary sin srcs; esta regla requiere main_class proporcionado por runtime_deps.

En el siguiente fragmento de código, se muestra un error común:

java_binary(
    name = "DontDoThis",
    srcs = [
        ...,
        "GeneratedJavaFile.java",  # a generated .java file
    ],
    deps = [":generating_rule",],  # rule that generates that file
)

En su lugar, haz lo siguiente:

java_binary(
    name = "DoThisInstead",
    srcs = [
        ...,
        ":generating_rule",
    ],
)

Argumentos

Atributos
name

Nombre: obligatorio.

Un nombre único para este destino.


Es una buena práctica usar el nombre del archivo fuente que es el punto de entrada principal de la una aplicación sin importar la extensión. Por ejemplo, si tu punto de entrada se llama Main.java, entonces tu nombre podría ser Main.
deps

Lista de etiquetas; el valor predeterminado es []

Es la lista de otras bibliotecas que se vincularán al destino. Consulta los comentarios generales sobre deps en Atributos típicos definidos por la mayoría de las reglas de compilación.
srcs

Lista de etiquetas; el valor predeterminado es []

La lista de archivos de origen que se procesan para crear el destino. Este atributo casi siempre es obligatorio. consulta las excepciones a continuación.

Se compilan los archivos de origen de tipo .java. En caso de que se generen .java, por lo general, se recomienda colocar el nombre de la regla de generación aquí en lugar del nombre del archivo en sí. Esto no solo mejora la legibilidad, hace que la regla sea más resistente a los cambios futuros: si la regla que se genera genera archivos diferentes en el futuro, solo deberás corregir un lugar: el outs de la regla de generación. No debes incluir la regla de generación en deps porque es una no-op.

Se descomprimen y compilan los archivos fuente de tipo .srcjar. (Esto es útil si debes generar un conjunto de archivos .java con una genrule).

Reglas: Si la regla (generalmente genrule o filegroup) genera cualquiera de los archivos mencionados anteriormente, se utilizarán de la misma forma que se describe para la fuente archivos.

Este argumento casi siempre es obligatorio, excepto si un El atributo main_class especifica una en la ruta de clase del tiempo de ejecución o puedes especificar el argumento runtime_deps.

resources

Lista de etiquetas; el valor predeterminado es []

Lista de archivos de datos para incluir en un jar de Java.

Si se especifican los recursos, se agruparán en el jar con el archivo Archivos .class producidos por la compilación. La ubicación de los recursos que contiene del archivo jar está determinado por la estructura del proyecto. Bazel primero busca la API de Maven diseño de directorio estándar, (un directorio “src” seguido de un directorio de nivel secundario “resources”). Si no es así , Bazel busca el directorio superior llamado "java" o "pruebas de Java" (por lo tanto, para Por ejemplo, si un recurso se encuentra en <workspace root>/x/java/y/java/z, el la ruta de acceso del recurso será y/java/z. Esta heurística no se puede anular, Sin embargo, se puede usar el atributo resource_strip_prefix para especificar un un directorio alternativo específico para archivos de recursos.

Los recursos pueden ser archivos fuente o generados.

classpath_resources

Lista de etiquetas; el valor predeterminado es []

NO UTILICE ESTA OPCIÓN A MENOS QUE NO EXISTE DE OTRO FORMA)

Lista de recursos que deben estar ubicados en la raíz del árbol de Java. De este atributo Su único propósito es admitir bibliotecas de terceros que requieran que sus recursos se que se encuentra en la ruta de clase como "myconfig.xml". Solo se permite en en vez de bibliotecas, debido al peligro de conflictos en el espacio de nombres.

create_executable

Boolean; no configurable; el valor predeterminado es True

obsoleta: Usa java_single_jar en su lugar.
deploy_env

Lista de etiquetas; el valor predeterminado es []

Una lista de otros destinos de java_binary que representan la implementación para este objeto binario. Establece este atributo cuando compiles un complemento que cargará otro java_binary
Configurar este atributo excluye todas las dependencias de la ruta de clase del entorno de ejecución (y el archivo jar de implementación) de este objeto binario que se comparten el objeto binario y los objetivos especificados en deploy_env.
deploy_manifest_lines

Lista de cadenas; el valor predeterminado es []

Una lista de líneas para agregar al archivo META-INF/manifest.mf generado para la Objetivo de *_deploy.jar. El contenido de este atributo no está sujeto por "Make variable".
javacopts

Lista de cadenas; el valor predeterminado es []

Opciones de compilador adicionales para esta biblioteca. Con la sustitución "Make variable" y Asignación de token de shell de Bourne.

Estas opciones del compilador se pasan a javac después de las opciones globales del compilador.

jvm_flags

Lista de cadenas; el valor predeterminado es []

Una lista de marcas para incorporar en la secuencia de comandos del wrapper generada para ejecutar este objeto binario. Sujeto a $(location) y Sustitución "Make variable" y Asignación de token de shell de Bourne.

La secuencia de comandos del wrapper para un objeto binario de Java incluye una definición de CLASSPATH (para encontrar todos los archivos jar dependientes) y, luego, invoca el intérprete de Java correcto. La línea de comandos que genera la secuencia de comandos del wrapper incluye el nombre del la clase principal seguida de un elemento "$@" para que puedas pasar otros argumentos después del nombre de clase. Sin embargo, los argumentos para analizar por la JVM debe especificarse antes del nombre de clase del comando línea. El contenido de jvm_flags se agrega al wrapper secuencia de comandos antes de que aparezca el nombre de clase.

Ten en cuenta que este atributo no tiene efecto en *_deploy.jar. de salida.

launcher

Etiqueta; el valor predeterminado es None

Especifica un objeto binario que se usará para ejecutar tu programa Java en lugar del programa bin/java normal incluido con el JDK. El objetivo debe ser una cc_binary. Cualquier cc_binary que implementa La API de Java Invocation se puede especificar como un valor para este atributo.

De forma predeterminada, Bazel usará el iniciador de JDK normal (bin/java o java.exe).

La marca de Bazel --java_launcher relacionada solo afecta a aquellas Los objetivos java_binary y java_test que tienen no especificó un atributo launcher.

Ten en cuenta que tus dependencias nativas (C++, SWIG, JNI) se compilarán de manera diferente. dependiendo de si usas el selector de JDK o algún otro selector:

  • Si estás usando el lanzador de JDK normal (predeterminado), las dependencias nativas se compilada como una biblioteca compartida llamada {name}_nativedeps.so, en la que {name} es el atributo name de esta regla java_binary. En esta configuración, el vinculador no quita el código sin usar.
  • Si usas cualquier otro selector, las dependencias nativas (C++) son estáticas vinculado a un objeto binario llamado {name}_nativedeps, en el que {name} es el atributo name de esta regla java_binary. En este caso, el vinculador quitará del objeto binario cualquier código que considere no utilizado lo que significa que cualquier código C++ al que se acceda solo mediante JNI no podrá vincularse, a menos que ese destino cc_library especifica alwayslink = 1.

Cuando se usa cualquier selector que no sea el predeterminado del JDK, el formato de los cambios de salida *_deploy.jar. Ver los principales java_binary para obtener más información.

main_class

String; el valor predeterminado es ""

Nombre de la clase con el método main() para usar como punto de entrada. Si una regla usa esta opción, no necesita una lista de srcs=[...]. Por lo tanto, con este atributo se puede hacer un ejecutable desde una biblioteca de Java que ya Contiene uno o más métodos main().

El valor de este atributo es un nombre de clase, no un archivo de origen. La clase debe ser disponible en el tiempo de ejecución: puede ser compilada por esta regla (de srcs) o proporcionadas por dependencias directas o transitivas (mediante runtime_deps o deps). Si la clase no está disponible, el objeto binario fallará en el tiempo de ejecución. ahí no es una verificación del tiempo de compilación.

plugins

Lista de etiquetas; el valor predeterminado es []

Complementos de compilador de Java para ejecutarse en el tiempo de compilación. Cada java_plugin especificado en este atributo se ejecutará cada vez que esta regla la infraestructura. Una biblioteca también puede heredar complementos de dependencias que usan exported_plugins Recursos que genera el complemento se incluirán en el archivo jar resultante de esta regla.
resource_jars

Lista de etiquetas; el valor predeterminado es []

Obsoleto: usa java_import and deps o runtime_deps.
resource_strip_prefix

String; el valor predeterminado es ""

El prefijo de la ruta de acceso que se quitará de los recursos de Java.

Si se especifica, este prefijo de ruta de acceso se quita de cada archivo en el resources . Es un error que un archivo de recursos no esté en este directorio. Si no es así especificado (predeterminado), la ruta de acceso del archivo de recursos se determina según el mismo como el paquete de Java de los archivos fuente. Por ejemplo, un archivo fuente en stuff/java/foo/bar/a.txt se ubicará en foo/bar/a.txt.

runtime_deps

Lista de etiquetas; el valor predeterminado es []

Bibliotecas que estarán disponibles para el objeto binario final o que se prueben solo en el tiempo de ejecución. Al igual que los deps comunes, estos aparecerán en la ruta de clase del tiempo de ejecución, pero, a diferencia de no en la ruta de clase del tiempo de compilación. Las dependencias que se necesitan solo en el entorno de ejecución que se enumeran aquí. Las herramientas de análisis de dependencias deben ignorar los objetivos que aparecen en ambos runtime_deps y deps.
stamp

Integer; el valor predeterminado es -1

Establece si se debe codificar información de compilación en el objeto binario. Valores posibles:
  • stamp = 1: Siempre marca la información de la compilación en el objeto binario, incluso en --nostamp. Este de configuración debe evitarse, ya que puede finalizar el almacenamiento en caché remoto binario y las acciones descendentes que dependan de él.
  • stamp = 0: Siempre reemplaza la información de compilación por valores constantes. Esta brinda un buen almacenamiento en caché de resultados de compilación.
  • stamp = -1: la incorporación de la información de la compilación está controlada por el --[no]stamp.

Los objetos binarios sellados no se vuelven a compilar, a menos que cambien sus dependencias.

use_launcher

Boolean; el valor predeterminado es True

Indica si el objeto binario debe usar un selector personalizado.

Si este atributo se establece en falso, launcher y los atributos relacionados marca --java_launcher se ignorarán para este destino.

use_testrunner

Boolean; el valor predeterminado es False

Usa el ejecutor de pruebas (de forma predeterminada com.google.testing.junit.runner.BazelTestRunner) como la punto de entrada principal de un programa de Java y proporcionaremos la clase de prueba al ejecutor de pruebas como un valor de bazel.test_suite del sistema. Puedes usar esto para anular el valor predeterminado que consiste en usar un ejecutor de pruebas para java_test reglas, y no para las reglas java_binary. Es poco probable querrán hacer esto. Un uso es para AllTest reglas invocadas por otra regla (para configurar una base de datos antes de ejecutar las pruebas, por ejemplo). El AllTest debe declararse como java_binary, pero no debe sigue usando el ejecutor de pruebas como punto de entrada principal. El nombre de una clase del ejecutor de pruebas se puede anular con el atributo main_class.

java_import

Ver el código fuente de la regla
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)

Esta regla permite el uso de archivos .jar precompilados como bibliotecas para java_library y java_binary reglas.

Ejemplos

    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",
        ],
    )

Argumentos

Atributos
name

Nombre: obligatorio.

Un nombre único para este destino.

deps

Lista de etiquetas; el valor predeterminado es []

Es la lista de otras bibliotecas que se vincularán al destino. Consulta java_library.deps.
constraints

Lista de cadenas; no configurable; el valor predeterminado es []

Restricciones adicionales impuestas en esta regla como biblioteca Java.
exports

Lista de etiquetas; el valor predeterminado es []

Son los objetivos que estarán disponibles para los usuarios de esta regla. Consulta java_library.exports.
jars

Lista de etiquetas; obligatorio.

La lista de archivos JAR que se proporciona a los destinos de Java que dependen de este destino.

Boolean; el valor predeterminado es False

Usa esta biblioteca solo para la compilación y no durante el tiempo de ejecución. Es útil si el entorno de ejecución proporcionará la biblioteca. durante la ejecución. Algunos ejemplos de bibliotecas como esta son las APIs de IDE para complementos de IDE o tools.jar para cualquier elemento que se ejecute un JDK estándar.
proguard_specs

Lista de etiquetas; el valor predeterminado es []

Archivos que se usarán como especificación de ProGuard. Describirán el conjunto de especificaciones que usará ProGuard. Si se especifica, se agregarán a cualquier destino de android_binary según la biblioteca. Los archivos incluidos aquí solo deben tener reglas idempotentes, es decir, -dontnote, -dontwarn, asume efectos secundarios y reglas que comienzan con -keep. Otras opciones solo pueden aparecer en Proguard_specs de android_binary para garantizar combinaciones no tautológicas.
runtime_deps

Lista de etiquetas; el valor predeterminado es []

Bibliotecas que estarán disponibles para el objeto binario final o que se prueben solo en el tiempo de ejecución. Consulta java_library.runtime_deps.
srcjar

Etiqueta; el valor predeterminado es None

Un archivo JAR que contiene el código fuente para los archivos JAR compilados.

java_library

Ver el código fuente de la regla
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)

Esta regla compila y vincula fuentes en un archivo .jar.

Destinos de salida implícitos

  • libname.jar: Es un archivo de Java que contiene los archivos de clase.
  • libname-src.jar: Es un archivo que contiene las fuentes ("source jar").

Argumentos

Atributos
name

Nombre: obligatorio.

Un nombre único para este destino.

deps

Lista de etiquetas; el valor predeterminado es []

Es la lista de bibliotecas que se vincularán a esta biblioteca. Consulta los comentarios generales sobre deps en Atributos típicos definidos por la mayoría de las reglas de compilación.

Los archivos jar creados por las reglas de java_library enumeradas en deps estarán activados la ruta de clase del tiempo de compilación de esta regla. Además, el cierre transitivo de sus deps, runtime_deps y exports estarán en la de clase del tiempo de ejecución.

Por el contrario, los destinos del atributo data se incluyen en los runfiles, pero ni en la ruta de clase de tiempo de compilación ni de tiempo de ejecución.

srcs

Lista de etiquetas; el valor predeterminado es []

La lista de archivos de origen que se procesan para crear el destino. Este atributo casi siempre es obligatorio. consulta las excepciones a continuación.

Se compilan los archivos de origen de tipo .java. En caso de que se generen .java, por lo general, se recomienda colocar el nombre de la regla de generación aquí en lugar del nombre del archivo en sí. Esto no solo mejora la legibilidad, hace que la regla sea más resistente a los cambios futuros: si la regla que se genera genera archivos diferentes en el futuro, solo deberás corregir un lugar: el outs de la regla de generación. No debes incluir la regla de generación en deps porque es una no-op.

Se descomprimen y compilan los archivos fuente de tipo .srcjar. (Esto es útil si debes generar un conjunto de archivos .java con una genrule).

Reglas: Si la regla (generalmente genrule o filegroup) genera cualquiera de los archivos mencionados anteriormente, se utilizarán de la misma forma que se describe para la fuente archivos.

Este argumento casi siempre es obligatorio, excepto si un El atributo main_class especifica una en la ruta de clase del tiempo de ejecución o puedes especificar el argumento runtime_deps.

data

Lista de etiquetas; el valor predeterminado es []

Es la lista de archivos que necesita esta biblioteca en el entorno de ejecución. Consulta los comentarios generales sobre data en Atributos típicos definidos por la mayoría de las reglas de compilación.

Cuando se compila un java_library, Bazel no coloca estos archivos en ningún lugar. si los Los archivos data son archivos generados y Bazel los genera. Al crear un que depende de esta java_library; Bazel copia o vincula las data en el área de runfiles.

resources

Lista de etiquetas; el valor predeterminado es []

Lista de archivos de datos para incluir en un jar de Java.

Si se especifican los recursos, se agruparán en el jar con el archivo Archivos .class producidos por la compilación. La ubicación de los recursos que contiene del archivo jar está determinado por la estructura del proyecto. Bazel primero busca la API de Maven diseño de directorio estándar, (un directorio “src” seguido de un directorio de nivel secundario “resources”). Si no es así , Bazel busca el directorio superior llamado "java" o "pruebas de Java" (por lo tanto, para Por ejemplo, si un recurso se encuentra en <workspace root>/x/java/y/java/z, el la ruta de acceso del recurso será y/java/z. Esta heurística no se puede anular, Sin embargo, se puede usar el atributo resource_strip_prefix para especificar un un directorio alternativo específico para archivos de recursos.

Los recursos pueden ser archivos fuente o generados.

exported_plugins

Lista de etiquetas; el valor predeterminado es []

La lista de java_plugin (p.ej., anotación procesadores) para exportarlos a bibliotecas que dependen directamente de ella.

La lista especificada de java_plugin se aplicará a cualquier biblioteca que depende directamente de esta biblioteca, como si esta hubiera declarado explícitamente etiquetas en plugins.

exports

Lista de etiquetas; el valor predeterminado es []

Se exportaron las bibliotecas.

Aquí, las reglas estarán disponibles para las reglas superiores, como si las superiores dependía de estas reglas. Esto no se aplica a deps normal (no exportado).

Resumen: Una regla X puede acceder al código en Y si existe una dependencia. ruta entre ellas que comienza con un borde deps seguido de cero o más exports bordes. Veamos algunos ejemplos para ilustrar esto.

Supongamos que A depende de B, y B depende de C. En este caso, C es una dependencia transitiva de A, por lo que cambiar las fuentes de C y recompilar A volver a compilar todo correctamente. Sin embargo, A no podrá usar clases en C. Para permitir que, ya sea A debe declarar C en su deps, o B puede facilitar que A (y cualquier cosa que pueda depender de A) declarando C en su (B) exports .

El cierre de las bibliotecas exportadas está disponible para todas las reglas superiores directas. Toma un poco ejemplo diferente: A depende de B, B depende de C y D, y también exporta C, pero no D. Ahora A tiene acceso a C, pero no a D. Ahora, si C y D exportaron algunas bibliotecas, C' y D' respectivamente, A solo podría acceder a C' pero no la D'.

Importante: Una regla exportada no es una dependencia normal. Volviendo al ejemplo anterior, si B exporta C y quiere usar también C, también tiene que enumerarlo en su propio deps

javacopts

Lista de cadenas; el valor predeterminado es []

Opciones de compilador adicionales para esta biblioteca. Con la sustitución "Make variable" y Asignación de token de shell de Bourne.

Estas opciones del compilador se pasan a javac después de las opciones globales del compilador.

Boolean; el valor predeterminado es False

Indica si esta biblioteca solo debe usarse para la compilación y no durante el tiempo de ejecución. Es útil si el entorno de ejecución proporcionará la biblioteca durante la ejecución. Ejemplos de esas bibliotecas son las APIs de IDE para complementos de IDE o tools.jar para cualquier elemento que se ejecuta en un JDK estándar.

Ten en cuenta que neverlink = 1 no impide que el compilador inserte material. de esta biblioteca en objetivos de compilación que dependen de ella, como lo permite Java Especificación de lenguaje (p.ej., Constantes static final de String o de tipos primitivos). Por lo tanto, el caso de uso preferido es cuando la biblioteca del entorno de ejecución idénticos a los de la biblioteca de compilación.

Si la biblioteca de tiempo de ejecución difiere de la biblioteca de compilación, debes asegurarte de que se diferencia solo en los lugares en los que JLS prohíbe que los compiladores se integren (y que deben conservarse para todas las versiones futuras del JLS).

plugins

Lista de etiquetas; el valor predeterminado es []

Complementos de compilador de Java para ejecutarse en el tiempo de compilación. Cada java_plugin especificado en este atributo se ejecutará cada vez que esta regla la infraestructura. Una biblioteca también puede heredar complementos de dependencias que usan exported_plugins Recursos que genera el complemento se incluirán en el archivo jar resultante de esta regla.
proguard_specs

Lista de etiquetas; el valor predeterminado es []

Archivos que se usarán como especificación de ProGuard. Describirán el conjunto de especificaciones que usará ProGuard. Si se especifica, se agregarán a cualquier destino de android_binary según la biblioteca. Los archivos incluidos aquí solo deben tener reglas idempotentes, es decir, -dontnote, -dontwarn, asume efectos secundarios y reglas que comienzan con -keep. Otras opciones solo pueden aparecer en Proguard_specs de android_binary para garantizar combinaciones no tautológicas.
resource_jars

Lista de etiquetas; el valor predeterminado es []

Obsoleto: usa java_import and deps o runtime_deps.
resource_strip_prefix

String; el valor predeterminado es ""

El prefijo de la ruta de acceso que se quitará de los recursos de Java.

Si se especifica, este prefijo de ruta de acceso se quita de cada archivo en el resources . Es un error que un archivo de recursos no esté en este directorio. Si no es así especificado (predeterminado), la ruta de acceso del archivo de recursos se determina según el mismo como el paquete de Java de los archivos fuente. Por ejemplo, un archivo fuente en stuff/java/foo/bar/a.txt se ubicará en foo/bar/a.txt.

runtime_deps

Lista de etiquetas; el valor predeterminado es []

Bibliotecas que estarán disponibles para el objeto binario final o que se prueben solo en el tiempo de ejecución. Al igual que los deps comunes, estos aparecerán en la ruta de clase del tiempo de ejecución, pero, a diferencia de no en la ruta de clase del tiempo de compilación. Las dependencias que se necesitan solo en el entorno de ejecución que se enumeran aquí. Las herramientas de análisis de dependencias deben ignorar los objetivos que aparecen en ambos runtime_deps y deps.

java_lite_proto_library

Ver el código fuente de la regla
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 genera código Java a partir de archivos .proto.

deps debe apuntar a las reglas proto_library .

Ejemplo:

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

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

proto_library(
    name = "bar",
)

Argumentos

Atributos
name

Nombre: obligatorio.

Un nombre único para este destino.

deps

Lista de etiquetas; el valor predeterminado es []

Lista de proto_library las reglas para generar código Java.

java_proto_library

Ver el código fuente de la regla
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 genera código Java a partir de archivos .proto.

deps debe apuntar a las reglas proto_library .

Ejemplo:

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

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

proto_library(
    name = "foo_proto",
)

Argumentos

Atributos
name

Nombre: obligatorio.

Un nombre único para este destino.

deps

Lista de etiquetas; el valor predeterminado es []

Lista de proto_library las reglas para generar código Java.

java_test

Ver el código fuente de la regla
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)

Una regla java_test() compila una prueba de Java. Una prueba es un wrapper binario que rodea tu código de prueba. Se invoca el método principal del ejecutor de pruebas en lugar de que se compile la clase principal.

Destinos de salida implícitos

  • name.jar: Es un archivo de Java.
  • name_deploy.jar: Es un archivo Java adecuado. para su implementación. (Solo se compila si se solicita explícitamente). Consulta la descripción del name_deploy.jar resultado de java_binary para obtener más información.

Consulta la sección sobre argumentos de java_binary(). Esta regla también admite todos los atributos comunes a todas las reglas de prueba (*_test).

Ejemplos

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",
    ],
)

Argumentos

Atributos
name

Nombre: obligatorio.

Un nombre único para este destino.

deps

Lista de etiquetas; el valor predeterminado es []

Es la lista de otras bibliotecas que se vincularán al destino. Consulta los comentarios generales sobre deps en Atributos típicos definidos por la mayoría de las reglas de compilación.
srcs

Lista de etiquetas; el valor predeterminado es []

La lista de archivos de origen que se procesan para crear el destino. Este atributo casi siempre es obligatorio. consulta las excepciones a continuación.

Se compilan los archivos de origen de tipo .java. En caso de que se generen .java, por lo general, se recomienda colocar el nombre de la regla de generación aquí en lugar del nombre del archivo en sí. Esto no solo mejora la legibilidad, hace que la regla sea más resistente a los cambios futuros: si la regla que se genera genera archivos diferentes en el futuro, solo deberás corregir un lugar: el outs de la regla de generación. No debes incluir la regla de generación en deps porque es una no-op.

Se descomprimen y compilan los archivos fuente de tipo .srcjar. (Esto es útil si debes generar un conjunto de archivos .java con una genrule).

Reglas: Si la regla (generalmente genrule o filegroup) genera cualquiera de los archivos mencionados anteriormente, se utilizarán de la misma forma que se describe para la fuente archivos.

Este argumento casi siempre es obligatorio, excepto si un El atributo main_class especifica una en la ruta de clase del tiempo de ejecución o puedes especificar el argumento runtime_deps.

resources

Lista de etiquetas; el valor predeterminado es []

Lista de archivos de datos para incluir en un jar de Java.

Si se especifican los recursos, se agruparán en el jar con el archivo Archivos .class producidos por la compilación. La ubicación de los recursos que contiene del archivo jar está determinado por la estructura del proyecto. Bazel primero busca la API de Maven diseño de directorio estándar, (un directorio “src” seguido de un directorio de nivel secundario “resources”). Si no es así , Bazel busca el directorio superior llamado "java" o "pruebas de Java" (por lo tanto, para Por ejemplo, si un recurso se encuentra en <workspace root>/x/java/y/java/z, el la ruta de acceso del recurso será y/java/z. Esta heurística no se puede anular, Sin embargo, se puede usar el atributo resource_strip_prefix para especificar un un directorio alternativo específico para archivos de recursos.

Los recursos pueden ser archivos fuente o generados.

classpath_resources

Lista de etiquetas; el valor predeterminado es []

NO UTILICE ESTA OPCIÓN A MENOS QUE NO EXISTE DE OTRO FORMA)

Lista de recursos que deben estar ubicados en la raíz del árbol de Java. De este atributo Su único propósito es admitir bibliotecas de terceros que requieran que sus recursos se que se encuentra en la ruta de clase como "myconfig.xml". Solo se permite en en vez de bibliotecas, debido al peligro de conflictos en el espacio de nombres.

create_executable

Boolean; no configurable; el valor predeterminado es True

obsoleta: Usa java_single_jar en su lugar.
deploy_manifest_lines

Lista de cadenas; el valor predeterminado es []

Una lista de líneas para agregar al archivo META-INF/manifest.mf generado para la Objetivo de *_deploy.jar. El contenido de este atributo no está sujeto por "Make variable".
javacopts

Lista de cadenas; el valor predeterminado es []

Opciones de compilador adicionales para esta biblioteca. Con la sustitución "Make variable" y Asignación de token de shell de Bourne.

Estas opciones del compilador se pasan a javac después de las opciones globales del compilador.

jvm_flags

Lista de cadenas; el valor predeterminado es []

Una lista de marcas para incorporar en la secuencia de comandos del wrapper generada para ejecutar este objeto binario. Sujeto a $(location) y Sustitución "Make variable" y Asignación de token de shell de Bourne.

La secuencia de comandos del wrapper para un objeto binario de Java incluye una definición de CLASSPATH (para encontrar todos los archivos jar dependientes) y, luego, invoca el intérprete de Java correcto. La línea de comandos que genera la secuencia de comandos del wrapper incluye el nombre del la clase principal seguida de un elemento "$@" para que puedas pasar otros argumentos después del nombre de clase. Sin embargo, los argumentos para analizar por la JVM debe especificarse antes del nombre de clase del comando línea. El contenido de jvm_flags se agrega al wrapper secuencia de comandos antes de que aparezca el nombre de clase.

Ten en cuenta que este atributo no tiene efecto en *_deploy.jar. de salida.

launcher

Etiqueta; el valor predeterminado es None

Especifica un objeto binario que se usará para ejecutar tu programa Java en lugar del programa bin/java normal incluido con el JDK. El objetivo debe ser una cc_binary. Cualquier cc_binary que implementa La API de Java Invocation se puede especificar como un valor para este atributo.

De forma predeterminada, Bazel usará el iniciador de JDK normal (bin/java o java.exe).

La marca de Bazel --java_launcher relacionada solo afecta a aquellas Los objetivos java_binary y java_test que tienen no especificó un atributo launcher.

Ten en cuenta que tus dependencias nativas (C++, SWIG, JNI) se compilarán de manera diferente. dependiendo de si usas el selector de JDK o algún otro selector:

  • Si estás usando el lanzador de JDK normal (predeterminado), las dependencias nativas se compilada como una biblioteca compartida llamada {name}_nativedeps.so, en la que {name} es el atributo name de esta regla java_binary. En esta configuración, el vinculador no quita el código sin usar.
  • Si usas cualquier otro selector, las dependencias nativas (C++) son estáticas vinculado a un objeto binario llamado {name}_nativedeps, en el que {name} es el atributo name de esta regla java_binary. En este caso, el vinculador quitará del objeto binario cualquier código que considere no utilizado lo que significa que cualquier código C++ al que se acceda solo mediante JNI no podrá vincularse, a menos que ese destino cc_library especifica alwayslink = 1.

Cuando se usa cualquier selector que no sea el predeterminado del JDK, el formato de los cambios de salida *_deploy.jar. Ver los principales java_binary para obtener más información.

main_class

String; el valor predeterminado es ""

Nombre de la clase con el método main() para usar como punto de entrada. Si una regla usa esta opción, no necesita una lista de srcs=[...]. Por lo tanto, con este atributo se puede hacer un ejecutable desde una biblioteca de Java que ya Contiene uno o más métodos main().

El valor de este atributo es un nombre de clase, no un archivo de origen. La clase debe ser disponible en el tiempo de ejecución: puede ser compilada por esta regla (de srcs) o proporcionadas por dependencias directas o transitivas (mediante runtime_deps o deps). Si la clase no está disponible, el objeto binario fallará en el tiempo de ejecución. ahí no hay verificación de tiempo de compilación.

plugins

Lista de etiquetas; el valor predeterminado es []

Complementos de compilador de Java para ejecutarse en el tiempo de compilación. Cada java_plugin especificado en este atributo se ejecutará cada vez que esta regla la infraestructura. Una biblioteca también puede heredar complementos de dependencias que usan exported_plugins Recursos que genera el complemento se incluirán en el archivo jar resultante de esta regla.
resource_jars

Lista de etiquetas; el valor predeterminado es []

Obsoleto: usa java_import and deps o runtime_deps.
resource_strip_prefix

String; el valor predeterminado es ""

El prefijo de la ruta de acceso que se quitará de los recursos de Java.

Si se especifica, este prefijo de ruta de acceso se quita de cada archivo en el resources . Es un error que un archivo de recursos no esté en este directorio. Si no es así especificado (predeterminado), la ruta de acceso del archivo de recursos se determina según el mismo como el paquete de Java de los archivos fuente. Por ejemplo, un archivo fuente en stuff/java/foo/bar/a.txt se ubicará en foo/bar/a.txt.

runtime_deps

Lista de etiquetas; el valor predeterminado es []

Bibliotecas que estarán disponibles para el objeto binario final o que se prueben solo en el tiempo de ejecución. Al igual que los deps comunes, estos aparecerán en la ruta de clase del tiempo de ejecución, pero, a diferencia de no en la ruta de clase del tiempo de compilación. Las dependencias que se necesitan solo en el entorno de ejecución que se enumeran aquí. Las herramientas de análisis de dependencias deben ignorar los objetivos que aparecen en ambos runtime_deps y deps.
stamp

Integer; el valor predeterminado es 0

Establece si se debe codificar información de compilación en el objeto binario. Valores posibles:
  • stamp = 1: Siempre marca la información de la compilación en el objeto binario, incluso en --nostamp. Este de configuración debe evitarse, ya que puede finalizar el almacenamiento en caché remoto binario y las acciones descendentes que dependan de él.
  • stamp = 0: Siempre reemplaza la información de compilación por valores constantes. Esta brinda un buen almacenamiento en caché de resultados de compilación.
  • stamp = -1: la incorporación de la información de la compilación está controlada por el --[no]stamp.

Los objetos binarios sellados no se vuelven a compilar, a menos que cambien sus dependencias.

test_class

String; el valor predeterminado es ""

La clase Java que cargará el ejecutor de pruebas.

De forma predeterminada, si este argumento no está definido, se usa el modo heredado y se en su lugar, se usan argumentos de prueba. Establece la marca --nolegacy_bazel_java_test para no recurrir al primer argumento.

Este atributo especifica el nombre de una clase Java que ejecutará esta prueba. No es común establecer esta configuración. Si se omite este argumento, se inferirá mediante el name del objetivo y su ruta de acceso relativa de raíz de origen. Si la prueba está fuera de un raíz de origen, Bazel informará un error si test_class no está establecido.

Para JUnit3, la clase de prueba debe ser una subclase de junit.framework.TestCase o debe tener una cuenta método suite() estático que muestra un junit.framework.Test (o una subclase de Test). Para JUnit4, la clase debe anotarse con org.junit.runner.RunWith

Este atributo permite que varias reglas java_test comparten el mismo Test (TestCase, TestSuite, ...). Precio habitual se le pasa información adicional, (p.ej., a través de jvm_flags=['-Dkey=value']) para que el comportamiento varía en cada caso, como ejecutar una aplicación subconjunto de las pruebas. Este atributo también permite el uso de Pruebas de Java fuera del árbol javatests

use_launcher

Boolean; el valor predeterminado es True

Indica si el objeto binario debe usar un selector personalizado.

Si este atributo se establece en falso, launcher y los atributos relacionados marca --java_launcher se ignorarán para este destino.

use_testrunner

Boolean; el valor predeterminado es True

Usa el ejecutor de pruebas (de forma predeterminada com.google.testing.junit.runner.BazelTestRunner) como la punto de entrada principal de un programa de Java y proporcionaremos la clase de prueba al ejecutor de pruebas como un valor de bazel.test_suite del sistema. Puedes usar esto para anular el valor predeterminado que consiste en usar un ejecutor de pruebas para java_test reglas, y no para las reglas java_binary. Es poco probable querrán hacer esto. Un uso es para AllTest reglas invocadas por otra regla (para configurar una base de datos antes de ejecutar las pruebas, por ejemplo). El AllTest debe declararse como java_binary, pero no debe sigue usando el ejecutor de pruebas como punto de entrada principal. El nombre de una clase del ejecutor de pruebas se puede anular con el atributo main_class.

java_package_configuration

Ver el código fuente de la regla
java_package_configuration(name, data, compatible_with, deprecation, distribs, features, javacopts, licenses, packages, restricted_to, tags, target_compatible_with, testonly, visibility)

Configuración que se aplica a un conjunto de paquetes. Las configuraciones se pueden agregar java_toolchain.javacopts

Ejemplo:

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",
    ]
)

Argumentos

Atributos
name

Nombre: obligatorio.

Un nombre único para este destino.

data

Lista de etiquetas; el valor predeterminado es []

Es la lista de archivos que necesita esta configuración en el entorno de ejecución.
javacopts

Lista de cadenas; el valor predeterminado es []

Indicadores del compilador de Java.
packages

Lista de etiquetas; el valor predeterminado es []

El conjunto de package_group al que se debe aplicar la configuración.

java_plugin

Ver el código fuente de la regla
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 define los complementos para el compilador de Java que ejecuta Bazel. Por el momento, Solo los complementos admitidos son procesadores de anotaciones. Una java_library o La regla java_binary puede ejecutar complementos dependiendo de ellos a través del plugins. . Un java_library también puede exportar automáticamente complementos a bibliotecas que depender directamente de él exported_plugins

Destinos de salida implícitos

  • libname.jar: Es un archivo de Java.

Los argumentos son idénticos a java_library, excepto para la adición del argumento processor_class.

Argumentos

Atributos
name

Nombre: obligatorio.

Un nombre único para este destino.

deps

Lista de etiquetas; el valor predeterminado es []

Es la lista de bibliotecas que se vincularán a esta biblioteca. Consulta los comentarios generales sobre deps en Atributos típicos definidos por la mayoría de las reglas de compilación.

Los archivos jar creados por las reglas de java_library enumeradas en deps estarán activados la ruta de clase del tiempo de compilación de esta regla. Además, el cierre transitivo de sus deps, runtime_deps y exports estarán en la de clase del tiempo de ejecución.

Por el contrario, los destinos del atributo data se incluyen en los runfiles, pero ni en la ruta de clase de tiempo de compilación ni de tiempo de ejecución.

srcs

Lista de etiquetas; el valor predeterminado es []

La lista de archivos de origen que se procesan para crear el destino. Este atributo casi siempre es obligatorio. consulta las excepciones a continuación.

Se compilan los archivos de origen de tipo .java. En caso de que se generen .java, por lo general, se recomienda colocar el nombre de la regla de generación aquí en lugar del nombre del archivo en sí. Esto no solo mejora la legibilidad, hace que la regla sea más resistente a los cambios futuros: si la regla que se genera genera archivos diferentes en el futuro, solo deberás corregir un lugar: el outs de la regla de generación. No debes incluir la regla de generación en deps porque es una no-op.

Se descomprimen y compilan los archivos fuente de tipo .srcjar. (Esto es útil si debes generar un conjunto de archivos .java con una genrule).

Reglas: Si la regla (generalmente genrule o filegroup) genera cualquiera de los archivos mencionados anteriormente, se utilizarán de la misma forma que se describe para la fuente archivos.

Este argumento casi siempre es obligatorio, excepto si un El atributo main_class especifica una en la ruta de clase del tiempo de ejecución o puedes especificar el argumento runtime_deps.

data

Lista de etiquetas; el valor predeterminado es []

Es la lista de archivos que necesita esta biblioteca en el entorno de ejecución. Consulta los comentarios generales sobre data en Atributos típicos definidos por la mayoría de las reglas de compilación.

Cuando se compila un java_library, Bazel no coloca estos archivos en ningún lugar. si los Los archivos data son archivos generados y Bazel los genera. Al crear un que depende de esta java_library; Bazel copia o vincula las data en el área de runfiles.

resources

Lista de etiquetas; el valor predeterminado es []

Lista de archivos de datos para incluir en un jar de Java.

Si se especifican los recursos, se agruparán en el jar con el archivo Archivos .class producidos por la compilación. La ubicación de los recursos que contiene del archivo jar está determinado por la estructura del proyecto. Bazel primero busca la API de Maven diseño de directorio estándar, (un directorio “src” seguido de un directorio de nivel secundario “resources”). Si no es así , Bazel busca el directorio superior llamado "java" o "pruebas de Java" (por lo tanto, para Por ejemplo, si un recurso se encuentra en <workspace root>/x/java/y/java/z, el la ruta de acceso del recurso será y/java/z. Esta heurística no se puede anular, Sin embargo, se puede usar el atributo resource_strip_prefix para especificar un un directorio alternativo específico para archivos de recursos.

Los recursos pueden ser archivos fuente o generados.

generates_api

Boolean; el valor predeterminado es False

Este atributo marca procesadores de anotaciones que generan código de API.

Si una regla usa un procesador de anotaciones que genera API, otras reglas según el código, puede hacer referencia al código generado solo si su Las acciones de compilación se programan después de la regla de generación. Esta le indica a Bazel que introduzca restricciones de programación cuando --java_header_compilation habilitado.

ADVERTENCIA: Este atributo afecta la compilación su rendimiento, utilícelo solo si es necesario.

javacopts

Lista de cadenas; el valor predeterminado es []

Opciones de compilador adicionales para esta biblioteca. Con la sustitución "Make variable" y Asignación de token de shell de Bourne.

Estas opciones del compilador se pasan a javac después de las opciones globales del compilador.

Boolean; el valor predeterminado es False

Indica si esta biblioteca solo debe usarse para la compilación y no durante el tiempo de ejecución. Es útil si el entorno de ejecución proporcionará la biblioteca durante la ejecución. Ejemplos de esas bibliotecas son las APIs de IDE para complementos de IDE o tools.jar para cualquier elemento que se ejecuta en un JDK estándar.

Ten en cuenta que neverlink = 1 no impide que el compilador inserte material. de esta biblioteca en objetivos de compilación que dependen de ella, como lo permite Java Especificación de lenguaje (p.ej., Constantes static final de String o de tipos primitivos). Por lo tanto, el caso de uso preferido es cuando la biblioteca del entorno de ejecución idénticos a los de la biblioteca de compilación.

Si la biblioteca de tiempo de ejecución difiere de la biblioteca de compilación, debes asegurarte de que se diferencia solo en los lugares en los que JLS prohíbe que los compiladores se integren (y que deben conservarse para todas las versiones futuras del JLS).

output_licenses

Tipo de licencia; el valor predeterminado es ["none"]

Consulta common attributes .
plugins

Lista de etiquetas; el valor predeterminado es []

Complementos de compilador de Java para ejecutarse en el tiempo de compilación. Cada java_plugin especificado en este atributo se ejecutará cada vez que esta regla la infraestructura. Una biblioteca también puede heredar complementos de dependencias que usan exported_plugins Recursos que genera el complemento se incluirán en el archivo jar resultante de esta regla.
processor_class

String; el valor predeterminado es ""

La clase de procesador es el tipo completamente calificado de la clase que el compilador de Java debe usar como punto de entrada al procesador de anotaciones. Si no se especifica, no se aplicará aportan un procesador de anotaciones al procesamiento de anotaciones del compilador de Java, pero su aún se incluirá en la ruta del procesador de anotaciones del compilador. (Este se diseñó principalmente para que lo usen Complementos propensos a errores, que están cargados de la ruta del procesador de anotaciones con java.util.ServiceLoader.)
proguard_specs

Lista de etiquetas; el valor predeterminado es []

Archivos que se usarán como especificación de ProGuard. Describirán el conjunto de especificaciones que usará ProGuard. Si se especifica, se agregarán a cualquier destino de android_binary según la biblioteca. Los archivos incluidos aquí solo deben tener reglas idempotentes, es decir, -dontnote, -dontwarn, asume efectos secundarios y reglas que comienzan con -keep. Otras opciones solo pueden aparecer en Proguard_specs de android_binary para garantizar combinaciones no tautológicas.
resource_jars

Lista de etiquetas; el valor predeterminado es []

Obsoleto: usa java_import and deps o runtime_deps.
resource_strip_prefix

String; el valor predeterminado es ""

El prefijo de la ruta de acceso que se quitará de los recursos de Java.

Si se especifica, este prefijo de ruta de acceso se quita de cada archivo en el resources . Es un error que un archivo de recursos no esté en este directorio. Si no es así especificado (predeterminado), la ruta de acceso del archivo de recursos se determina según el mismo como el paquete de Java de los archivos fuente. Por ejemplo, un archivo fuente en stuff/java/foo/bar/a.txt se ubicará en foo/bar/a.txt.

java_runtime

Ver el código fuente de la regla
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)

Especifica la configuración para un entorno de ejecución de Java.

Ejemplo:

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

Argumentos

Atributos
name

Nombre: obligatorio.

Un nombre único para este destino.

srcs

Lista de etiquetas; el valor predeterminado es []

Todos los archivos del entorno de ejecución.
default_cds

Etiqueta; el valor predeterminado es None

Archivo CDS predeterminado para java_runtime hermético. Cuando es hermético esté habilitado para un destino java_binary y, si el destino no proporcionar su propio archivo CDS especificando el atributo classlist, El CDS predeterminado de java_runtime se empaqueta en el JAR de implementación hermética.
hermetic_srcs

Lista de etiquetas; el valor predeterminado es []

Archivos en el entorno de ejecución necesarios para implementaciones herméticas.
java

Etiqueta; el valor predeterminado es None

Ruta al ejecutable de Java.
java_home

String; el valor predeterminado es ""

Es la ruta a la raíz del entorno de ejecución. Sujeto a "Marca" de variables. Si esta ruta es absoluta, la regla denota un entorno de ejecución de Java no hermético con un ruta de acceso. En ese caso, los atributos srcs y java deben estar vacíos.
lib_ct_sym

Etiqueta; el valor predeterminado es None

El archivo lib/ct.sym necesario para la compilación con --release. Si no se especifica y hay exactamente un archivo en srcs cuya ruta termina con /lib/ct.sym, se está usando ese archivo.
lib_modules

Etiqueta; el valor predeterminado es None

El archivo lib/modules necesario para las implementaciones herméticas.
version

Integer; el valor predeterminado es 0

Es la versión de la función del entorno de ejecución de Java. Es decir, el número entero que devuelve Runtime.version().feature()

java_toolchain

Ver el código fuente de la regla
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)

Especifica la configuración del compilador Java. La cadena de herramientas que se debe usar se puede cambiar con el argumento --java_toolchain. Por lo general, no debes escribir ese tipo de reglas, a menos que desees ajustar tu compilador de Java.

Ejemplos

Un ejemplo sencillo sería el siguiente:

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",
)

Argumentos

Atributos
name

Nombre: obligatorio.

Un nombre único para este destino.

android_lint_data

Lista de etiquetas; el valor predeterminado es []

Etiquetas de las herramientas disponibles para la expansión de etiquetas en android_lint_jvm_opts.
android_lint_jvm_opts

Lista de cadenas; el valor predeterminado es []

Lista de argumentos para la JVM cuando se invoca Android Lint.
android_lint_opts

Lista de cadenas; el valor predeterminado es []

Lista de argumentos de Android Lint.
android_lint_package_configuration

Lista de etiquetas; el valor predeterminado es []

Configuración de Android Lint que debe aplicarse a los grupos de paquetes especificados.
android_lint_runner

Etiqueta; el valor predeterminado es None

Etiqueta del ejecutor de Android Lint, si corresponde.
bootclasspath

Lista de etiquetas; el valor predeterminado es []

Las entradas de bootclasspath de destino de Java. Corresponde a la marca -bootclasspath de javac.
deps_checker

Lista de etiquetas; el valor predeterminado es []

Etiqueta del archivo jar de implementación de ImportDepsChecker.
forcibly_disable_header_compilation

Boolean; el valor predeterminado es False

Anula --java_header_compilation para inhabilitar la compilación de encabezados en plataformas que no lo hacen respaldarlo, p.ej., JDK 7 Bazel.
genclass

Lista de etiquetas; obligatorio.

Etiqueta del archivo jar de implementación de GenClass.
header_compiler

Lista de etiquetas; el valor predeterminado es []

Etiqueta del compilador del encabezado. Obligatorio si --java_header_compilation está habilitado.
header_compiler_direct

Lista de etiquetas; el valor predeterminado es []

Etiqueta opcional del compilador de encabezados para usar en acciones directas de ruta de clase que no cumplen incluir procesadores de anotaciones que generen API.

Esta herramienta no admite el procesamiento de anotaciones.

ijar

Lista de etiquetas; obligatorio.

Etiqueta del ejecutable de ijar.
jacocorunner

Etiqueta; el valor predeterminado es None

Etiqueta del archivo jar de implementación de JacocoCoverageRunner.
java_runtime

Etiqueta; obligatorio.

El java_runtime que se usará con esta cadena de herramientas. El valor predeterminado es java_runtime. en la configuración de ejecución.
javabuilder

Lista de etiquetas; obligatorio.

Etiqueta del archivo jar de implementación de JavaBuilder.
javabuilder_data

Lista de etiquetas; el valor predeterminado es []

Etiquetas de datos disponibles para la expansión de etiquetas en javabuilder_jvm_opts.
javabuilder_jvm_opts

Lista de cadenas; el valor predeterminado es []

Lista de argumentos para la JVM cuando se invoca JavaBuilder.
javac_supports_multiplex_workers

Boolean; el valor predeterminado es True

Es verdadero si JavaBuilder admite la ejecución como un trabajador persistente multiplex. Es falso si no lo hace.
javac_supports_worker_multiplex_sandboxing

Boolean; el valor predeterminado es False

Es verdadero si JavaBuilder admite zonas de pruebas multiplex. Es falso si no lo hace.
javac_supports_workers

Boolean; el valor predeterminado es True

Es verdadero si JavaBuilder admite la ejecución como un trabajador persistente. Es falso si no lo hace.
javacopts

Lista de cadenas; el valor predeterminado es []

Lista de argumentos adicionales para el compilador de Java. Consulta el compilador de Java para obtener la lista extensa de posibles marcas del compilador de Java.
jvm_opts

Lista de cadenas; el valor predeterminado es []

Lista de argumentos para la JVM cuando se invoca el compilador de Java. Consulta la documentación en la documentación de máquina virtual para obtener una lista extensa de marcas posibles de esta opción.
oneversion

Etiqueta; el valor predeterminado es None

Etiqueta del objeto binario de aplicación de una versión.
oneversion_allowlist_for_tests

Etiqueta; el valor predeterminado es None

Etiqueta de la lista de entidades permitidas de una versión para pruebas.
oneversion_whitelist

Etiqueta; el valor predeterminado es None

Etiqueta de la lista de entidades permitidas de una versión.
package_configuration

Lista de etiquetas; el valor predeterminado es []

Configuración que debe aplicarse a los grupos de paquetes especificados.
proguard_allowlister

Etiqueta; el valor predeterminado es "@bazel_tools//tools/jdk:proguard_whitelister"

Etiqueta de la lista de entidades permitidas de ProGuard.
resourcejar

Lista de etiquetas; el valor predeterminado es []

Etiqueta del ejecutable del compilador de jar de recursos.
singlejar

Lista de etiquetas; obligatorio.

Etiqueta del archivo jar de implementación de SingleJar.
source_version

String; el valor predeterminado es ""

Es la versión de origen de Java (p.ej., '6' o "7"). Especifica qué conjunto de estructuras de código están permitidos en el código fuente de Java.
target_version

String; el valor predeterminado es ""

Es la versión objetivo de Java (p.ej., '6' o "7"). Especifica para qué entorno de ejecución de Java la clase debe compilarse.
timezone_data

Etiqueta; el valor predeterminado es None

Etiqueta de un jar de recursos que contiene datos de zona horaria. Si se establece, los datos de la zona horaria se agregan como un Dependencia implícita del entorno de ejecución de todas las reglas java_binary.
tools

Lista de etiquetas; el valor predeterminado es []

Etiquetas de las herramientas disponibles para la expansión de etiquetas en jvm_opts.
turbine_data

Lista de etiquetas; el valor predeterminado es []

Etiquetas de datos disponibles para la expansión de etiquetas en turbine_jvm_opts.
turbine_jvm_opts

Lista de cadenas; el valor predeterminado es []

Lista de argumentos para la JVM cuando se invoca la turbina.
xlint

Lista de cadenas; el valor predeterminado es []

La lista de advertencias para agregar o quitar de la lista predeterminada. Lo antecede con un guion a la quita. Consulta la documentación de Javac sobre las opciones -Xlint para obtener más información.