Reglas de Java

Informar un problema Ver fuente Noche

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 variable de entorno JAVABIN que no esté vacía tendrá prioridad sobre la versión especificada mediante la 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 recursos correspondientes a las dependencias directas del objeto binario.
  • name-src.jar: Es un archivo que contiene las fuentes ("jar de origen").
  • name_deploy.jar: Es un archivo Java adecuado para la implementación (solo se compila si se solicita de manera explícita).

    Si compilas el destino <name>_deploy.jar de tu regla, se creará un archivo jar autónomo con un manifiesto que permite que se ejecute con el comando java -jar o con la opción --singlejar de la secuencia de comandos del wrapper. Se prefiere el uso de la secuencia de comandos del wrapper antes que java -jar porque también pasa las marcas de JVM y las opciones para cargar las bibliotecas nativas.

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

    Si el destino especifica un atributo launcher, en lugar de ser un archivo JAR normal, _deploy.jar será un objeto binario nativo. Este contendrá el selector y las dependencias nativas (C++) de tu regla, todas vinculadas en un objeto binario estático. Los bytes reales del archivo jar se adjuntarán a ese objeto binario nativo, lo que creará un único BLOB binario que contendrá el código 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 recopiladas del cierre transitivo del destino. Estos coincidirán con las clases en deploy.jar, excepto cuando los archivos jar no tengan ninguno de origen coincidente.

No se permite un atributo deps en una regla java_binary sin srcs. Dicha regla requiere un 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

Name; obligatorio

Un nombre único para este destino.


Se recomienda usar el nombre del archivo de origen que es el punto de entrada principal de la aplicación (sin 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 el caso de los archivos .java generados, por lo general, se recomienda colocar aquí el nombre de la regla de generación en lugar del nombre del archivo. Esto no solo mejora la legibilidad, sino que hace que la regla sea más resistente a los cambios futuros: si la regla de generación genera archivos diferentes en el futuro, solo debes corregir un lugar: el outs de la regla que se genera. No debes mostrar 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 necesitas generar un conjunto de archivos .java con una genrule).

Reglas: Si la regla (por lo general, genrule o filegroup) genera cualquiera de los archivos mencionados anteriormente, se usarán de la misma manera que se describe para los archivos de origen.

Este argumento casi siempre es obligatorio, excepto si un atributo main_class especifica una clase en la ruta de clase de tiempo de ejecución o si especificas 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 recursos, se agruparán en el jar con los archivos .class habituales que produce la compilación. La estructura del proyecto determina la ubicación de los recursos dentro del archivo JAR. En primer lugar, Bazel busca el diseño de directorio estándar de Maven (un directorio “src” seguido de un directorio secundario de “resources”. Si no se encuentra, Bazel busca el directorio superior llamado “java” o “javatests” (por ejemplo, si un recurso se encuentra en <workspace root>/x/java/y/java/z, 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 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. El único propósito de este atributo es admitir bibliotecas de terceros que requieran que sus recursos se encuentren en la ruta de clase como "myconfig.xml". Solo se permite en objetos binarios y no en bibliotecas, ya que existe el riesgo de que haya conflictos de espacio de nombres.

create_executable

Booleano; 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 objetivos de java_binary que representan el entorno de implementación para este objeto binario. Establece este atributo cuando compiles un complemento que cargará otro java_binary.
Cuando se configura este atributo, se excluyen todas las dependencias de la ruta de clase del entorno de ejecución (y del archivo jar de implementación) de este objeto binario que se comparten entre este objeto binario y los destinos 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 el destino *_deploy.jar. El contenido de este atributo no está sujeto a la sustitución "Make variable".
javacopts

Lista de cadenas; el valor predeterminado es []

Opciones de compilador adicionales para esta biblioteca. Sujeto a la sustitución "Make variable" y a la 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 la sustitución $(location) y "Make variable", y a la 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, además, invoca al intérprete de Java correcto. La línea de comandos que genera la secuencia de comandos del wrapper incluye el nombre de la clase principal seguido de un "$@" para que puedas pasar otros argumentos después del nombre de clase. Sin embargo, los argumentos destinados para el análisis por parte de la JVM se deben especificar antes del nombre de clase en la línea de comandos. El contenido de jvm_flags se agrega a la secuencia de comandos del wrapper antes de que se muestre el nombre de clase.

Ten en cuenta que este atributo no tiene efecto en las salidas *_deploy.jar.

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 que se incluye con el JDK. El objetivo debe ser una cc_binary. Se puede especificar cualquier cc_binary que implemente la API de Java Invocation 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 esos destinos java_binary y java_test que no especificaron un atributo launcher.

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

  • Si usas el selector de JDK normal (predeterminado), las dependencias nativas se compilan 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++) se vinculan de forma estática 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á cualquier código que considere que no se use del objeto binario resultante, lo que significa que cualquier código C++ al que se acceda solo mediante JNI no pueda vincularse, a menos que el destino cc_library especifique alwayslink = 1.

Cuando usas cualquier selector que no sea el selector predeterminado de JDK, cambia el formato del resultado de *_deploy.jar. Consulta los documentos principales de 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 estar disponible en el tiempo de ejecución: puede ser compilada por esta regla (desde srcs) o proporcionada por dependencias directas o transitivas (a través de runtime_deps o deps). Si la clase no está disponible, el objeto binario fallará en el tiempo de ejecución; 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á cuando se compile esta regla. Una biblioteca también puede heredar complementos de dependencias que usan exported_plugins. Los recursos que genere 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 atributo resources. Es un error que un archivo de recursos no esté en este directorio. Si no se especifica (el valor predeterminado), la ruta del archivo de recursos se determina según la misma lógica que el paquete de Java de los archivos fuente. Por ejemplo, un archivo de origen 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 ellos, no en la del tiempo de compilación. Las dependencias que se necesitan solo en el entorno de ejecución deben enumerarse aquí. Las herramientas de análisis de dependencias deben ignorar los objetivos que aparecen en runtime_deps y deps.
stamp

Número entero; 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 compilaciones de --nostamp. Se debe evitar esta configuración, ya que es posible que elimine el almacenamiento en caché remoto del objeto binario y cualquier acción descendente que dependa de él.
  • stamp = 0: Siempre reemplaza la información de compilación por valores constantes. Esto brinda un buen almacenamiento en caché de resultados de compilación.
  • stamp = -1: La marca --[no]stamp controla la incorporación de la información de compilación.

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

use_launcher

Booleano; el valor predeterminado es True

Indica si el objeto binario debe usar un selector personalizado.

Si este atributo se establece en falso, el atributo launcher y la marca --java_launcher relacionada se ignorarán para este destino.

use_testrunner

Booleano; el valor predeterminado es False

Usa la clase del ejecutor de pruebas (de forma predeterminada, com.google.testing.junit.runner.BazelTestRunner) como punto de entrada principal para un programa de Java y proporciona la clase de prueba al ejecutor de pruebas como un valor de la propiedad del sistema bazel.test_suite. Puedes usarlo para anular el comportamiento predeterminado, que consiste en usar el ejecutor de pruebas para las reglas java_test y no para las reglas java_binary. Es poco probable que quieras hacerlo. Un uso corresponde a las reglas de AllTest que invoca otra regla (por ejemplo, para configurar una base de datos antes de ejecutar las pruebas). Se debe declarar la regla AllTest como java_binary, pero debe seguir usando el ejecutor de pruebas como su 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, 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)

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

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

Name; 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.
data

Lista de etiquetas; el valor predeterminado es []

La lista de archivos que necesita esta regla en el entorno de ejecución.
add_exports

Lista de cadenas; el valor predeterminado es []

Permite que esta biblioteca acceda a los objetos module o package especificados.

Esto corresponde a las marcas javac y JVM --add-exports=.

add_opens

Lista de cadenas; el valor predeterminado es []

Permite que esta biblioteca acceda de manera reflectante a los objetos module o package determinados.

Esto corresponde a las marcas javac y JVM --add-opens=.

constraints

Lista de cadenas; 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.

Booleano; 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 en 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 android_binary según esta biblioteca. Los archivos incluidos aquí solo deben tener reglas idempotentes, es decir, -dontnote, -dontwarn, assumenosideeffects y reglas que comiencen con -keep. Otras opciones solo pueden aparecer en proguard_specs de android_binary para garantizar las 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, 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)

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

Salidas implícitas

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

Argumentos

Atributos
name

Name; 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 que compilan las reglas java_library que se enumeran en deps se encuentran en 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á en la ruta de clase del tiempo de ejecución.

Por el contrario, los objetivos del atributo data se incluyen en los archivos de ejecución, pero no en la ruta de clase del tiempo de compilación ni del entorno 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 el caso de los archivos .java generados, por lo general, se recomienda colocar el nombre de la regla de generación aquí en lugar del nombre del archivo. Esto no solo mejora la legibilidad, sino que hace que la regla sea más resistente a los cambios futuros: si la regla de generación genera archivos diferentes en el futuro, solo debes corregir un lugar: el outs de la regla que se genera. No debes enumerar 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 necesitas generar un conjunto de archivos .java con una genrule).

Reglas: Si la regla (por lo general, genrule o filegroup) genera cualquiera de los archivos mencionados anteriormente, se usarán de la misma manera que se describe para los archivos fuente.

Los archivos de origen de tipo .properties se tratan como recursos.

Se ignoran todos los demás archivos, siempre que haya al menos un archivo de uno de los tipos descritos anteriormente. De lo contrario, se genera un error.

Este argumento casi siempre es obligatorio, excepto si especificas 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 compilas un java_library, Bazel no coloca estos archivos en ningún lugar. Si los archivos data son archivos generados, Bazel los genera. Cuando compilas una prueba que depende de esta java_library, Bazel copia o vincula los archivos data al área de archivos de ejecución.

resources

Lista de etiquetas; el valor predeterminado es []

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

Los recursos pueden ser archivos fuente o generados.

Si se especifican los recursos, se agruparán en el jar junto con los archivos .class habituales que produce la compilación. La estructura del proyecto determina la ubicación de los recursos dentro del archivo JAR. Bazel primero busca el diseño de directorio estándar de Maven (un directorio “src” seguido de un directorio de “recursos” secundario). Si no se encuentra, Bazel buscará el directorio superior llamado “java” o “javatests” (por ejemplo, si un recurso se encuentra en <workspace root>/x/java/y/java/z, la ruta 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 directorio alternativo específico para archivos de recursos.

add_exports

Lista de cadenas; el valor predeterminado es []

Permite que esta biblioteca acceda a los objetos module o package especificados.

Esto corresponde a las marcas javac y JVM --add-exports=.

add_opens

Lista de cadenas; el valor predeterminado es []

Permite que esta biblioteca acceda de manera reflectante a los objetos module o package determinados.

Esto corresponde a las marcas javac y JVM --add-opens=.

bootclasspath

Etiqueta; el valor predeterminado es None

API restringida, no se debe usar
exported_plugins

Lista de etiquetas; el valor predeterminado es []

Es la lista de java_plugin (p.ej., procesadores de anotaciones) para exportar a bibliotecas que dependen directamente de esta biblioteca.

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

exports

Lista de etiquetas; el valor predeterminado es []

Se exportaron las bibliotecas.

Enumerar las reglas aquí las pondrán a disposición de las reglas superiores, como si los superiores dependieran de forma explícita 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 ruta de dependencia entre ellas que comience con un borde deps seguida de cero o más bordes exports. 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 volver a compilar A volverá a compilar todo de forma correcta. Sin embargo, A no podrá usar clases en C. Para permitir eso, A debe declarar C en su deps, o bien B puede facilitarle a A (y cualquier otra cosa que pueda depender de A) declarando C en su atributo exports (B).

El cierre de las bibliotecas exportadas está disponible para todas las reglas superiores directas. Veamos un ejemplo ligeramente 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 bien, si C y D exportaron algunas bibliotecas, C' y D' respectivamente, A solo podría acceder a C', pero no D'.

Importante: Una regla exportada no es una dependencia normal. Siguiendo con el ejemplo anterior, si B exporta C y también quiere usar C, también debe enumerarlo en su propio deps.

javabuilder_jvm_flags

Lista de cadenas; el valor predeterminado es []

API restringida, no se debe usar
javacopts

Lista de cadenas; el valor predeterminado es []

Opciones de compilador adicionales para esta biblioteca. Sujeto a la sustitución "Make variable" y a la asignación de token de shell de Bourne.

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

Booleano; 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. Algunos ejemplos de estas bibliotecas son las APIs de IDE para complementos de IDE o tools.jar para cualquier elemento que se ejecute en un JDK estándar.

Ten en cuenta que neverlink = 1 no evita que el compilador inserte material de esta biblioteca en objetivos de compilación que dependen de él, según lo permitido por la especificación del lenguaje Java (p.ej., static final de String o de tipos primitivos). Por lo tanto, el caso de uso preferido es cuando la biblioteca en tiempo de ejecución es idéntica a la biblioteca de compilación.

Si la biblioteca en tiempo de ejecución difiere de la biblioteca de compilación, debes asegurarte de que solo difiera en los lugares en los que el JLS prohíbe que los compiladores se integren (y que debe ser compatible con 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á cuando se compile esta regla. Una biblioteca también puede heredar complementos de dependencias que usan exported_plugins. Los recursos que genere 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 android_binary según esta biblioteca. Los archivos incluidos aquí solo deben tener reglas idempotentes, es decir, -dontnote, -dontwarn, assumenosideeffects y reglas que comiencen con -keep. Otras opciones solo pueden aparecer en proguard_specs de android_binary para garantizar las combinaciones no tautológicas.
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 atributo resources. Es un error que un archivo de recursos no esté en este directorio. Si no se especifica (el valor predeterminado), la ruta del archivo de recursos se determina de acuerdo con la misma lógica que el paquete de Java de los archivos fuente. Por ejemplo, un archivo de origen 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 ellos, no en la del tiempo de compilación. Las dependencias que se necesitan solo en el entorno de ejecución deben aparecer aquí. Las herramientas de análisis de dependencias deben ignorar los objetivos que aparecen en runtime_deps y deps.

java_lite_proto_library

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

deps debe apuntar a las reglas proto_library .

Ejemplo:


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

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

proto_library(
    name = "bar",
)

Argumentos

Atributos
name

Name; obligatorio

Un nombre único para este destino.

deps

Lista de etiquetas; el valor predeterminado es []

Es la lista de reglas proto_library para las que se generará código Java.

java_proto_library

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

deps debe apuntar a las reglas proto_library .

Ejemplo:


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

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

proto_library(
    name = "foo_proto",
)

Argumentos

Atributos
name

Name; obligatorio

Un nombre único para este destino.

deps

Lista de etiquetas; el valor predeterminado es []

Es la lista de reglas proto_library para las que se generará código Java.

java_test

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

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 la implementación. (Solo se compila si se solicita explícitamente). Consulta la descripción del resultado name_deploy.jar de java_binary para obtener más información.

Consulta la sección sobre argumentos 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

Name; 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 el caso de los archivos .java generados, por lo general, se recomienda colocar el nombre de la regla de generación aquí en lugar del nombre del archivo. Esto no solo mejora la legibilidad, sino que hace que la regla sea más resistente a los cambios futuros: si la regla de generación genera archivos diferentes en el futuro, solo debes corregir un lugar: el outs de la regla que se genera. No debes enumerar 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 necesitas generar un conjunto de archivos .java con una genrule).

Reglas: Si la regla (por lo general, genrule o filegroup) genera cualquiera de los archivos mencionados anteriormente, se usarán de la misma manera que se describe para los archivos fuente.

Este argumento casi siempre es obligatorio, excepto si un atributo main_class especifica una clase en la ruta de clase del tiempo de ejecución o si especificas 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.
resources

Lista de etiquetas; el valor predeterminado es []

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

Los recursos pueden ser archivos fuente o generados.

Si se especifican los recursos, se agruparán en el jar junto con los archivos .class habituales que produce la compilación. La estructura del proyecto determina la ubicación de los recursos dentro del archivo JAR. Bazel primero busca el diseño de directorio estándar de Maven (un directorio “src” seguido de un directorio de “recursos” secundario). Si no se encuentra, Bazel buscará el directorio superior llamado “java” o “javatests” (por ejemplo, si un recurso se encuentra en <workspace root>/x/java/y/java/z, la ruta 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 directorio alternativo específico para archivos de recursos.

add_exports

Lista de cadenas; el valor predeterminado es []

Permite que esta biblioteca acceda a los objetos module o package especificados.

Esto corresponde a las marcas javac y JVM --add-exports=.

add_opens

Lista de cadenas; el valor predeterminado es []

Permite que esta biblioteca acceda de manera reflectante a los objetos module o package determinados.

Esto corresponde a las marcas javac y JVM --add-opens=.

bootclasspath

Etiqueta; el valor predeterminado es None

API restringida, no se debe usar
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. El único propósito de este atributo es admitir bibliotecas de terceros que requieran que sus recursos se encuentren en la ruta de clase como "myconfig.xml". Solo se permite en objetos binarios y no en bibliotecas, debido al peligro de que haya conflictos de espacio de nombres.

create_executable

Booleano; 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 el destino *_deploy.jar. El contenido de este atributo no está sujeto a la sustitución "Make variable".
javacopts

Lista de cadenas; el valor predeterminado es []

Opciones de compilador adicionales para este objeto binario. Sujeto a la sustitución "Make variable" y a la 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 la sustitución $(location) y "Make variable", y a la 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, además, invoca al intérprete de Java correcto. La línea de comandos que genera la secuencia de comandos del wrapper incluye el nombre de la clase principal seguido de un "$@" para que puedas pasar otros argumentos después del nombre de clase. Sin embargo, los argumentos destinados a que la JVM los analice antes del nombre de clase en la línea de comandos. El contenido de jvm_flags se agrega a la secuencia de comandos del wrapper antes de que se muestre el nombre de clase.

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

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. Se puede especificar cualquier cc_binary que implemente la API de Java Invocation 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 esos destinos java_binary y java_test que no especificaron un atributo launcher.

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

  • Si usas el selector de JDK normal (predeterminado), las dependencias nativas se compilan 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++) se vinculan de forma estática 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á cualquier código que crea que no se use del objeto binario resultante, lo que significa que cualquier código C++ al que se acceda solo mediante JNI no pueda vincularse, a menos que el destino cc_library especifique alwayslink = 1.

Cuando usas cualquier selector que no sea el selector predeterminado de JDK, cambia el formato del resultado de *_deploy.jar. Consulta los documentos principales de 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 estar disponible en el tiempo de ejecución: puede ser compilada por esta regla (desde srcs) o proporcionada 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. No hay verificación de tiempo de compilación.

Booleano; el valor predeterminado es False

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á cuando se compile esta regla. Una biblioteca también puede heredar complementos de dependencias que usan exported_plugins. Los recursos que genere el complemento se incluirán en el archivo jar resultante de esta regla.
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 atributo resources. Es un error que un archivo de recursos no esté en este directorio. Si no se especifica (el valor predeterminado), la ruta del archivo de recursos se determina de acuerdo con la misma lógica que el paquete de Java de los archivos fuente. Por ejemplo, un archivo de origen 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 ellos, no en la del tiempo de compilación. Las dependencias que se necesitan solo en el entorno de ejecución deben aparecer aquí. Las herramientas de análisis de dependencias deben ignorar los objetivos que aparecen en runtime_deps y deps.
stamp

Número entero; 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 compilaciones de --nostamp. Se debe evitar esta configuración, ya que es posible que elimine el almacenamiento en caché remoto del objeto binario y cualquier acción descendente que dependa de él.
  • stamp = 0: Siempre reemplaza la información de compilación por valores constantes. Esto brinda un buen almacenamiento en caché de resultados de compilación.
  • stamp = -1: La marca --[no]stamp controla la incorporación de la información de compilación.

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

test_class

String; el valor predeterminado es ""

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 usan los argumentos de prueba en su lugar. Configura la marca --nolegacy_bazel_java_test para que no sea un resguardo en el 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 destino y su ruta de acceso relativa de raíz de origen. Si la prueba está fuera de una raíz de origen conocida, Bazel informará un error si no estableces test_class.

Para JUnit3, la clase de prueba debe ser una subclase de junit.framework.TestCase o debe tener un método suite() estático público que muestre un junit.framework.Test (o una subclase de Test). En el caso de JUnit4, la clase debe anotarse con org.junit.runner.RunWith.

Este atributo permite que varias reglas java_test compartan el mismo Test (TestCase, TestSuite, ...). Por lo general, se le pasa información adicional (p.ej., a través de jvm_flags=['-Dkey=value']) para que su comportamiento difiera en cada caso, como ejecutar un subconjunto diferente de las pruebas. Este atributo también permite el uso de pruebas de Java fuera del árbol javatests.

use_launcher

Booleano; el valor predeterminado es True

Indica si el objeto binario debe usar un selector personalizado.

Si este atributo se establece como falso, se ignorarán el atributo selector y la marca --java_launcher relacionada para este destino.

use_testrunner

Booleano; el valor predeterminado es True

Usa la clase del ejecutor de pruebas (de forma predeterminada, com.google.testing.junit.runner.BazelTestRunner) como punto de entrada principal para un programa de Java y proporciona la clase de prueba al ejecutor de pruebas como un valor de la propiedad del sistema bazel.test_suite.
Puedes usarlo para anular el comportamiento predeterminado, que consiste en usar el ejecutor de pruebas para las reglas java_test y no para las reglas java_binary. Es poco probable que quieras hacer esto. Uno de los usos es para las reglas de AllTest que invoca otra regla (por ejemplo, para configurar una base de datos antes de ejecutar las pruebas). La regla AllTest debe declararse como java_binary, pero debe seguir usando el ejecutor de pruebas como su 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, exec_compatible_with, exec_properties, features, javacopts, output_licenses, packages, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

Configuración que se aplica a un conjunto de paquetes. Se pueden agregar configuraciones a los objetos 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

Name; 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.
output_licenses

Lista de cadenas; el valor predeterminado es []

packages

Lista de etiquetas; el valor predeterminado es []

Es el conjunto de package_group a los que se debe aplicar la configuración.

java_plugin

Ver el código fuente de la regla
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 define los complementos para el compilador de Java que ejecuta Bazel. El único tipo de complemento admitido son los procesadores de anotaciones. Una regla java_library o java_binary puede ejecutar complementos en función de ellos a través del atributo plugins. Un java_library también puede exportar automáticamente complementos a bibliotecas que dependen directamente de él con exported_plugins.

Destinos de salida implícitos

  • libname.jar: Es un archivo de Java.

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

Argumentos

Atributos
name

Name; 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 que compilan las reglas java_library que se enumeran en deps se encuentran en 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á en la ruta de clase del tiempo de ejecución.

Por el contrario, los objetivos del atributo data se incluyen en los archivos de ejecución, pero no en la ruta de clase del tiempo de compilación ni del entorno 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 el caso de los archivos .java generados, por lo general, se recomienda colocar el nombre de la regla de generación aquí en lugar del nombre del archivo. Esto no solo mejora la legibilidad, sino que hace que la regla sea más resistente a los cambios futuros: si la regla de generación genera archivos diferentes en el futuro, solo debes corregir un lugar: el outs de la regla que se genera. No debes enumerar 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 necesitas generar un conjunto de archivos .java con una genrule).

Reglas: Si la regla (por lo general, genrule o filegroup) genera cualquiera de los archivos mencionados anteriormente, se usarán de la misma manera que se describe para los archivos fuente.

Los archivos de origen de tipo .properties se tratan como recursos.

Se ignoran todos los demás archivos, siempre que haya al menos un archivo de uno de los tipos descritos anteriormente. De lo contrario, se genera un error.

Este argumento casi siempre es obligatorio, excepto si especificas 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 compilas un java_library, Bazel no coloca estos archivos en ningún lugar. Si los archivos data son archivos generados, Bazel los genera. Cuando compilas una prueba que depende de esta java_library, Bazel copia o vincula los archivos data al área de archivos de ejecución.

resources

Lista de etiquetas; el valor predeterminado es []

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

Los recursos pueden ser archivos fuente o generados.

Si se especifican los recursos, se agruparán en el jar junto con los archivos .class habituales que produce la compilación. La estructura del proyecto determina la ubicación de los recursos dentro del archivo JAR. Bazel primero busca el diseño de directorio estándar de Maven (un directorio “src” seguido de un directorio de “recursos” secundario). Si no se encuentra, Bazel buscará el directorio superior llamado “java” o “javatests” (por ejemplo, si un recurso se encuentra en <workspace root>/x/java/y/java/z, la ruta 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 directorio alternativo específico para archivos de recursos.

add_exports

Lista de cadenas; el valor predeterminado es []

Permite que esta biblioteca acceda a los objetos module o package especificados.

Esto corresponde a las marcas javac y JVM --add-exports=.

add_opens

Lista de cadenas; el valor predeterminado es []

Permite que esta biblioteca acceda de manera reflectante a los objetos module o package determinados.

Esto corresponde a las marcas javac y JVM --add-opens=.

bootclasspath

Etiqueta; el valor predeterminado es None

API restringida, no se debe usar
generates_api

Booleano; 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, que dependen de esta, pueden hacer referencia al código generado solo si sus acciones de compilación se programan después de la regla de generación. Este atributo le indica a Bazel que ingrese restricciones de programación cuando --java_header_compilation está habilitado.

ADVERTENCIA: Este atributo afecta el rendimiento de la compilación, úsalo solo si es necesario.

javabuilder_jvm_flags

Lista de cadenas; el valor predeterminado es []

API restringida, no se debe usar
javacopts

Lista de cadenas; el valor predeterminado es []

Opciones de compilador adicionales para esta biblioteca. Sujeto a la sustitución "Make variable" y a la asignación de token de shell de Bourne.

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

Booleano; 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. Algunos ejemplos de estas bibliotecas son las APIs de IDE para complementos de IDE o tools.jar para cualquier elemento que se ejecute en un JDK estándar.

Ten en cuenta que neverlink = 1 no evita que el compilador inserte material de esta biblioteca en objetivos de compilación que dependen de él, según lo permitido por la especificación del lenguaje Java (p.ej., static final de String o de tipos primitivos). Por lo tanto, el caso de uso preferido es cuando la biblioteca en tiempo de ejecución es idéntica a la biblioteca de compilación.

Si la biblioteca en tiempo de ejecución difiere de la biblioteca de compilación, debes asegurarte de que solo difiera en los lugares en los que el JLS prohíbe que los compiladores se integren (y que debe ser compatible con todas las versiones futuras del JLS).

output_licenses

Lista de cadenas; el valor predeterminado es []

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á cuando se compile esta regla. Una biblioteca también puede heredar complementos de dependencias que usan exported_plugins. Los recursos que genere 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, esta regla no contribuirá a un procesador de anotaciones al procesamiento de anotaciones del compilador de Java, pero su ruta de clase del entorno de ejecución se incluirá de todos modos en la ruta del procesador de anotaciones del compilador. (principalmente, se diseñó para que lo usen los complementos de Prone error, que se cargan desde 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 android_binary según esta biblioteca. Los archivos incluidos aquí solo deben tener reglas idempotentes, es decir, -dontnote, -dontwarn, assumenosideeffects y reglas que comiencen con -keep. Otras opciones solo pueden aparecer en proguard_specs de android_binary para garantizar las combinaciones no tautológicas.
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 atributo resources. Es un error que un archivo de recursos no esté en este directorio. Si no se especifica (el valor predeterminado), la ruta del archivo de recursos se determina de acuerdo con la misma lógica que el paquete de Java de los archivos fuente. Por ejemplo, un archivo de origen 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, 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)

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

Name; 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 el método hermético está habilitado para un objetivo java_binary y este no proporciona su propio archivo CDS especificando el atributo classlist, el java_runtime CDS predeterminado 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.
hermetic_static_libs

Lista de etiquetas; el valor predeterminado es []

Las bibliotecas que están vinculadas estáticamente con el selector 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 la sustitución "Make" variable. Si esta ruta de acceso es absoluta, la regla denota un entorno de ejecución de Java no hermético con una ruta conocida. 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 de acceso termina en /lib/ct.sym, se usa ese archivo.
lib_modules

Etiqueta; el valor predeterminado es None

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

Lista de cadenas; el valor predeterminado es []

version

Número entero; 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 muestra 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_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)

Especifica la configuración del compilador Java. La cadena de herramientas que se debe usar se puede cambiar a través del 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

Name; 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.
compatible_javacopts

null; default is {}

API interna, no se debe usar
deps_checker

Etiqueta; el valor predeterminado es None

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

Booleano; el valor predeterminado es False

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

Etiqueta; el valor predeterminado es None

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

Etiqueta; el valor predeterminado es None

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

Lista de cadenas; el valor predeterminado es []

API interna, no se debe usar
header_compiler_direct

Etiqueta; el valor predeterminado es None

Etiqueta opcional del compilador de encabezados para usar en acciones directas de ruta de clase que no incluyen ningún procesador de anotaciones que generen API.

Esta herramienta no admite el procesamiento de anotaciones.

ijar

Etiqueta; el valor predeterminado es None

Etiqueta del ejecutable de ijar.
jacocorunner

Etiqueta; el valor predeterminado es None

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

Etiqueta; el valor predeterminado es None

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

Etiqueta; el valor predeterminado es None

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

Booleano; 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_cancellation

Booleano; el valor predeterminado es True

Es verdadero si JavaBuilder admite la cancelación de trabajadores persistentes. Es falso si no lo hace.
javac_supports_worker_multiplex_sandboxing

Booleano; el valor predeterminado es False

Es verdadero si JavaBuilder admite la ejecución como trabajador persistente multiplex con zona de pruebas. Si no lo hace, es falso.
javac_supports_workers

Booleano; 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 la documentación del compilador de Java para obtener una lista extensa de posibles marcas del compilador de Java.
jspecify_implicit_deps

Etiqueta; el valor predeterminado es None

Experimental, no usar
jspecify_javacopts

Lista de cadenas; el valor predeterminado es []

Experimental, no usar
jspecify_packages

Lista de etiquetas; el valor predeterminado es []

Experimental, no usar
jspecify_processor

Etiqueta; el valor predeterminado es None

Experimental, no usar
jspecify_processor_class

String; el valor predeterminado es ""

Experimental, no usar
jspecify_stubs

Lista de etiquetas; el valor predeterminado es []

Experimental, no usar
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 sobre máquinas virtuales Java para obtener una lista extensa de marcas posibles para esta opción.
misc

Lista de cadenas; el valor predeterminado es []

Obsoleto: usa javacopts en su lugar
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.
reduced_classpath_incompatible_processors

Lista de cadenas; el valor predeterminado es []

API interna, no se debe usar
singlejar

Etiqueta; el valor predeterminado es None

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 se permiten 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 se debe compilar la clase.
timezone_data

Etiqueta; el valor predeterminado es None

Etiqueta de un jar de recursos que contiene datos de zona horaria. Si se configura, los datos de la zona horaria se agregan como una 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 precede con un guion para quitarlo. Consulta la documentación de Javac sobre las opciones -Xlint para obtener más información.