Reglas de Java

Informar un problema Ver fuente Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Reglas

java_binary

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

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

La secuencia de comandos de wrapper acepta varias marcas únicas. Consulta java_stub_template.txt para obtener una lista de las marcas y las variables de entorno configurables que acepta el wrapper.

Objetivos 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 archivo binario.
  • name-src.jar: Es un archivo que contiene las fuentes ("source jar").
  • name_deploy.jar: Es un archivo Java apto para la implementación (solo se compila si se solicita explícitamente).

    Compilar el destino <name>_deploy.jar para tu regla crea un archivo .jar autónomo con un manifiesto que permite ejecutarlo con el comando java -jar o con la opción --singlejar del script de wrapper. Se prefiere usar la secuencia de comandos de wrapper en lugar de java -jar porque también pasa las marcas de JVM y las opciones para cargar bibliotecas nativas.

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

    Si tu destino especifica un atributo launcher, en lugar de ser un archivo JAR normal, el archivo _deploy.jar será un archivo binario nativo. Contendrá el lanzador y cualquier dependencia nativa (C++) de tu regla, todo vinculado en un objeto binario estático. Los bytes del archivo .jar real se agregarán a ese archivo binario nativo, lo que creará un solo 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. Coincidirán con las clases en deploy.jar, excepto cuando los archivos .jar no tengan un archivo .jar de origen coincidente.

Se recomienda usar el nombre del archivo fuente 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, tu nombre podría ser Main.

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 ilustra 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)

Es 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 [].

Es la lista de archivos fuente que se procesan para crear el destino. Este atributo casi siempre es obligatorio. Consulta las excepciones a continuación.

Se compilan los archivos fuente de tipo .java. En el caso de los archivos .java generados, generalmente es recomendable colocar aquí el nombre de la regla de generación en lugar del nombre del archivo en sí. Esto no solo mejora la legibilidad, sino que también 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 de generación. No debes incluir la regla de generación en deps porque no realiza ninguna operación.

Los archivos fuente de tipo .srcjar se descomprimen y compilan. (Esto es útil si necesitas generar un conjunto de archivos .java con una regla 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 describió para los archivos fuente.

Este argumento casi siempre es obligatorio, excepto si un atributo main_class especifica una clase en la ruta de acceso 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 tiempo 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 [].

Es una lista de archivos de datos que se incluirán en un archivo .jar de Java.

Los recursos pueden ser archivos fuente o archivos generados.

Si se especifican recursos, se incluirán en el archivo .jar junto con los archivos .class habituales que se producen durante la compilación. La ubicación de los recursos dentro del archivo JAR está determinada por la estructura del proyecto. Primero, Bazel busca el diseño de directorio estándar de Maven (un directorio "src" seguido de un directorio "resources" como nieto). Si no se encuentra, Bazel busca el directorio superior llamado "java" o "javatests" (por ejemplo, si un recurso está 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, el atributo resource_strip_prefix se puede usar para especificar un directorio alternativo específico para los archivos de recursos.

add_exports

Lista de cadenas; el valor predeterminado es []

Permite que esta biblioteca acceda al module o package proporcionado.

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 forma reflexiva al module o package determinado.

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

bootclasspath

Etiqueta: El valor predeterminado es None.

API restringida. No la uses.
classpath_resources

Lista de etiquetas. El valor predeterminado es [].

NO USES ESTA OPCIÓN A MENOS QUE NO HAYA OTRA FORMA

Es una lista de recursos que deben ubicarse en la raíz del árbol de Java. El único propósito de este atributo es admitir bibliotecas de terceros que requieren que sus recursos se encuentren en la ruta de clase exactamente como "myconfig.xml". Solo se permite en archivos binarios y no en bibliotecas, debido al peligro de conflictos de espacios de nombres.

create_executable

Booleano; el valor predeterminado es True

obsoleta: Usa java_single_jar en su lugar.
deploy_env

Lista de etiquetas. El valor predeterminado es [].

Es una lista de otros destinos de java_binary que representan el entorno de implementación de este archivo binario. Establece este atributo cuando compiles un complemento que se cargará con otro java_binary.
Si se configura este atributo, se excluyen todas las dependencias de la ruta de acceso de clase del tiempo de ejecución (y el archivo JAR de implementación) de este binario que se comparten entre este binario y los destinos especificados en deploy_env.
deploy_manifest_lines

Lista de cadenas; el valor predeterminado es []

Es una lista de líneas que se agregarán al archivo META-INF/manifest.mf generado para el destino *_deploy.jar. El contenido de este atributo no está sujeto a la sustitución de "Crear variable".
javacopts

Lista de cadenas; el valor predeterminado es []

Son opciones de compilador adicionales para este objeto binario. Sujeto a la sustitución de "Make variable" y la tokenización de Bourne shell.

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 []

Es una lista de marcas para incorporar en la secuencia de comandos de wrapper que se genera para ejecutar este archivo binario. Sujeto a la sustitución de $(location) y "Make variable", y a la tokenización de Bourne shell.

La secuencia de comandos de wrapper para un archivo binario de Java incluye una definición de CLASSPATH (para encontrar todos los archivos JAR dependientes) y llama al intérprete de Java correcto. La línea de comandos que genera el wrapper incluye el nombre de la clase principal seguido de un "$@" para que puedas pasar otros argumentos después del nombre de la clase. Sin embargo, los argumentos destinados al análisis de la JVM deben especificarse antes del nombre de la clase en la línea de comandos. El contenido de jvm_flags se agrega a la secuencia de comandos de wrapper antes de que se muestre el nombre de la 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 archivo binario que se usará para ejecutar tu programa en Java en lugar del programa bin/java normal incluido en el JDK. El destino debe ser un cc_binary. Se puede especificar cualquier cc_binary que implemente la API de invocación de Java como valor para este atributo.

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

La marca de Bazel --java_launcher relacionada solo afecta a los 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 iniciador del JDK o algún otro:

  • Si usas el iniciador normal del JDK (el predeterminado), las dependencias nativas se compilan como una biblioteca compartida llamada {name}_nativedeps.so, donde {name} es el atributo name de esta regla java_binary. El vinculador no quita el código sin usar en esta configuración.
  • Si usas otro selector, las dependencias nativas (C++) se vinculan de forma estática en un objeto binario llamado {name}_nativedeps, donde {name} es el atributo name de esta regla java_binary. En este caso, el vinculador quitará del archivo binario resultante cualquier código que considere que no se usa, lo que significa que es posible que no se vincule ningún código C++ al que se acceda solo a través de JNI, a menos que ese destino cc_library especifique alwayslink = True.

Cuando se usa un selector que no sea el selector de JDK predeterminado, cambia el formato de la salida de *_deploy.jar. Consulta la documentación principal de java_binary para obtener más detalles.

main_class

Cadena. El valor predeterminado es "".

Nombre de la clase con el método main() que se 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 crear un ejecutable a partir de 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 fuente. La clase debe estar disponible en el tiempo de ejecución: esta regla puede compilarla (desde srcs) o las dependencias directas o transitivas pueden proporcionarla (a través de runtime_deps o deps). Si la clase no está disponible, el archivo binario fallará en el tiempo de ejecución; no hay ninguna verificación en el tiempo de compilación.

Booleano; el valor predeterminado es False

plugins

Lista de etiquetas. El valor predeterminado es [].

Son complementos del compilador de Java que se ejecutan en tiempo de compilación. Cada java_plugin especificado en este atributo se ejecutará cada vez que se compile esta regla. Una biblioteca también puede heredar complementos de dependencias que usan exported_plugins. Los recursos que genera el complemento se incluirán en el archivo .jar resultante de esta regla.
resource_strip_prefix

Cadena. El valor predeterminado es "".

Es el prefijo de 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 del atributo resources. Es un error que un archivo de recursos no esté en este directorio. Si no se especifica (opción predeterminada), la ruta del archivo de recursos se determina según la misma lógica que el paquete 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 [].

Son las bibliotecas que estarán disponibles para el archivo binario final o la prueba solo en el tiempo de ejecución. Al igual que los deps comunes, estos aparecerán en la ruta de clase de tiempo de ejecución, pero, a diferencia de ellos, no en la ruta de clase de tiempo de compilación. Aquí se deben enumerar las dependencias que solo se necesitan en el tiempo de ejecución. Las herramientas de análisis de dependencias deben ignorar los destinos que aparecen en runtime_deps y deps.
stamp

Número entero; el valor predeterminado es -1

Indica si se debe codificar la información de compilación en el archivo binario. Valores posibles:
  • stamp = 1: Siempre se debe incluir la información de compilación en el binario, incluso en las compilaciones de --nostamp. Se debe evitar este parámetro de configuración, ya que podría detener el almacenamiento en caché remoto del binario y cualquier acción posterior que dependa de él.
  • stamp = 0: Siempre reemplaza la información de compilación por valores constantes. Esto permite un buen almacenamiento en caché de los resultados de la compilación.
  • stamp = -1: La incorporación de información de compilación se controla con la marca --[no]stamp.

Los archivos binarios con marca de tiempo no se vuelven a compilar, a menos que cambien sus dependencias.

use_launcher

Booleano; el valor predeterminado es True

Indica si el binario debe usar un selector personalizado.

Si este atributo se establece en falso, se ignorarán el atributo launcher y la marca --java_launcher relacionada 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 el punto de entrada principal para un programa en Java y proporciona la clase de prueba al ejecutor de pruebas como un valor de la propiedad del sistema bazel.test_suite.
Puedes usar esto para anular el comportamiento predeterminado, que es usar el ejecutor de pruebas para las reglas java_test y no usarlo para las reglas java_binary. Es poco probable que quieras hacer esto. Un uso es para las reglas de AllTest que invoca otra regla (para configurar una base de datos antes de ejecutar las pruebas, por ejemplo). La regla AllTest se debe declarar como java_binary, pero debe seguir usando el ejecutor de pruebas como su punto de entrada principal. El nombre de una clase de ejecutor de pruebas se puede anular con el atributo main_class.

java_import

Ver la fuente de la regla
java_import(name, deps, data, add_exports, add_opens, compatible_with, constraints, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, exports, features, jars, licenses, neverlink, package_metadata, proguard_specs, restricted_to, runtime_deps, srcjar, tags, target_compatible_with, testonly, toolchains, visibility)

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

Nombre (obligatorio)

Es 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 [].

Es la lista de archivos que necesita esta regla en el tiempo de ejecución.
add_exports

Lista de cadenas; el valor predeterminado es []

Permite que esta biblioteca acceda al module o package proporcionado.

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 forma reflexiva al module o package determinado.

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

constraints

Lista de cadenas; el valor predeterminado es []

Son restricciones adicionales impuestas en esta regla como una biblioteca de Java.
exports

Lista de etiquetas. El valor predeterminado es [].

Son los objetivos que se deben poner a disposición de los usuarios de esta regla. Consulta java_library.exports.
jars

Lista de etiquetas; obligatorio

Es la lista de archivos JAR proporcionados a los destinos de Java que dependen de este destino.

Booleano; el valor predeterminado es False

Solo usa esta biblioteca para la compilación y no en 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. Estos describirán el conjunto de especificaciones que usará Proguard. Si se especifican, se agregarán a cualquier destino android_binary que dependa de 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 los proguard_specs de android_binary para garantizar combinaciones no tautológicas.
runtime_deps

Lista de etiquetas. El valor predeterminado es [].

Son las bibliotecas que estarán disponibles para el archivo binario final o la prueba solo en el tiempo de ejecución. Consulta java_library.runtime_deps.
srcjar

Etiqueta: El valor predeterminado es None.

Es un archivo JAR que contiene el código fuente de los archivos JAR compilados.

java_library

Ver la fuente de la regla
java_library(name, deps, srcs, data, resources, add_exports, add_opens, bootclasspath, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, exported_plugins, exports, features, javabuilder_jvm_flags, javacopts, licenses, neverlink, package_metadata, plugins, proguard_specs, resource_strip_prefix, restricted_to, runtime_deps, tags, target_compatible_with, testonly, toolchains, visibility)

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

Salidas implícitas

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

Argumentos

Atributos
name

Nombre (obligatorio)

Es 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 compilados por las reglas de java_library que se indican en deps estarán en la ruta de acceso de la compilación de esta regla. Además, el cierre transitivo de sus deps, runtime_deps y exports estará en la ruta de acceso de la clase de tiempo de ejecución.

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

srcs

Lista de etiquetas. El valor predeterminado es [].

Es la lista de archivos fuente que se procesan para crear el destino. Este atributo casi siempre es obligatorio. Consulta las excepciones a continuación.

Se compilan los archivos fuente de tipo .java. En el caso de los archivos .java generados, generalmente es recomendable colocar aquí el nombre de la regla de generación en lugar del nombre del archivo en sí. Esto no solo mejora la legibilidad, sino que también 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 de generación. No debes incluir la regla de generación en deps porque no realiza ninguna operación.

Los archivos fuente de tipo .srcjar se descomprimen y compilan. (Esto es útil si necesitas generar un conjunto de archivos .java con una regla 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 describió para los archivos fuente.

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

Se ignorarán todos los demás archivos, siempre y cuando haya al menos uno de un tipo de archivo descrito anteriormente. De lo contrario, se generará 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 tiempo 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 archivos data son archivos generados, Bazel los genera. Cuando compilas una prueba que depende de este java_library, Bazel copia o vincula los archivos data en el área de archivos ejecutables.

resources

Lista de etiquetas. El valor predeterminado es [].

Es una lista de archivos de datos que se incluirán en un archivo .jar de Java.

Los recursos pueden ser archivos fuente o archivos generados.

Si se especifican recursos, se incluirán en el archivo .jar junto con los archivos .class habituales que se producen durante la compilación. La ubicación de los recursos dentro del archivo JAR está determinada por la estructura del proyecto. Primero, Bazel busca el diseño de directorio estándar de Maven (un directorio "src" seguido de un directorio "resources" como nieto). Si no se encuentra, Bazel busca el directorio superior llamado "java" o "javatests" (por ejemplo, si un recurso está 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, el atributo resource_strip_prefix se puede usar para especificar un directorio alternativo específico para los archivos de recursos.

add_exports

Lista de cadenas; el valor predeterminado es []

Permite que esta biblioteca acceda al module o package proporcionado.

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 forma reflexiva al module o package determinado.

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

bootclasspath

Etiqueta: El valor predeterminado es None.

API restringida. No la uses.
exported_plugins

Lista de etiquetas. El valor predeterminado es [].

Lista de java_plugins (p.ej., procesadores de anotaciones) que se exportarán a las bibliotecas que dependen directamente de esta biblioteca.

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

exports

Lista de etiquetas. El valor predeterminado es [].

Son las bibliotecas exportadas.

Si se enumeran reglas aquí, estarán disponibles para las reglas principales, como si las reglas principales dependieran explícitamente de estas reglas. Esto no es cierto para los deps normales (no exportados).

Resumen: Una regla X puede acceder al código en Y si existe una ruta de dependencia entre ellas que comienza con una arista deps seguida de cero o más aristas 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 correctamente. Sin embargo, A no podrá usar clases en C. Para permitirlo, A debe declarar C en su deps, o bien B puede facilitarle las cosas a A (y a cualquier elemento que pueda depender de A) declarando C en su atributo exports (de B).

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

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

javabuilder_jvm_flags

Lista de cadenas; el valor predeterminado es []

API restringida. No la uses.
javacopts

Lista de cadenas; el valor predeterminado es []

Son opciones adicionales del compilador para esta biblioteca. Sujeto a la sustitución de "Make variable" y la tokenización de Bourne shell.

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 se debe usar para la compilación y no en 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 del IDE para los complementos del IDE o tools.jar para cualquier elemento que se ejecute en un JDK estándar.

Ten en cuenta que neverlink = True no impide que el compilador inserte material de esta biblioteca en los destinos de compilación que dependen de ella, según lo permite la especificación del lenguaje Java (p.ej., Constantes static final de String o de tipos primitivos). Por lo tanto, el caso de uso preferido es cuando la biblioteca de tiempo de ejecución es idéntica a la biblioteca de compilación.

Si la biblioteca de 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 a los compiladores insertar código en línea (y eso debe cumplirse para todas las versiones futuras del JLS).

plugins

Lista de etiquetas. El valor predeterminado es [].

Son complementos del compilador de Java que se ejecutan en tiempo de compilación. Cada java_plugin especificado en este atributo se ejecutará cada vez que se compile esta regla. Una biblioteca también puede heredar complementos de dependencias que usan exported_plugins. Los 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. Estos describirán el conjunto de especificaciones que usará Proguard. Si se especifican, se agregarán a cualquier destino android_binary que dependa de 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 los proguard_specs de android_binary para garantizar combinaciones no tautológicas.
resource_strip_prefix

Cadena. El valor predeterminado es "".

Es el prefijo de 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 del atributo resources. Es un error que un archivo de recursos no esté en este directorio. Si no se especifica (opción predeterminada), la ruta del archivo de recursos se determina según la misma lógica que el paquete 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 [].

Son las bibliotecas que estarán disponibles para el archivo binario final o la prueba solo en el tiempo de ejecución. Al igual que los deps comunes, estos aparecerán en la ruta de clase de tiempo de ejecución, pero, a diferencia de ellos, no en la ruta de clase de tiempo de compilación. Aquí se deben enumerar las dependencias que solo se necesitan en el tiempo de ejecución. Las herramientas de análisis de dependencias deben ignorar los destinos que aparecen en runtime_deps y deps.

java_test

Ver la 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, env, env_inherit, exec_compatible_with, exec_group_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, launcher, licenses, local, main_class, neverlink, package_metadata, plugins, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, use_testrunner, visibility)

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

Objetivos de salida implícitos

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

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

Es 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 [].

Es la lista de archivos fuente que se procesan para crear el destino. Este atributo casi siempre es obligatorio. Consulta las excepciones a continuación.

Se compilan los archivos fuente de tipo .java. En el caso de los archivos .java generados, generalmente es recomendable colocar aquí el nombre de la regla de generación en lugar del nombre del archivo en sí. Esto no solo mejora la legibilidad, sino que también 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 de generación. No debes incluir la regla de generación en deps porque no realiza ninguna operación.

Los archivos fuente de tipo .srcjar se descomprimen y compilan. (Esto es útil si necesitas generar un conjunto de archivos .java con una regla 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 describió para los archivos fuente.

Este argumento casi siempre es obligatorio, excepto si un atributo main_class especifica una clase en la ruta de acceso 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 tiempo 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 [].

Es una lista de archivos de datos que se incluirán en un archivo .jar de Java.

Los recursos pueden ser archivos fuente o archivos generados.

Si se especifican recursos, se incluirán en el archivo .jar junto con los archivos .class habituales que se producen durante la compilación. La ubicación de los recursos dentro del archivo JAR está determinada por la estructura del proyecto. Primero, Bazel busca el diseño de directorio estándar de Maven (un directorio "src" seguido de un directorio "resources" como nieto). Si no se encuentra, Bazel busca el directorio superior llamado "java" o "javatests" (por ejemplo, si un recurso está 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, el atributo resource_strip_prefix se puede usar para especificar un directorio alternativo específico para los archivos de recursos.

add_exports

Lista de cadenas; el valor predeterminado es []

Permite que esta biblioteca acceda al module o package proporcionado.

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 forma reflexiva al module o package determinado.

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

bootclasspath

Etiqueta: El valor predeterminado es None.

API restringida. No la uses.
classpath_resources

Lista de etiquetas. El valor predeterminado es [].

NO USES ESTA OPCIÓN A MENOS QUE NO HAYA OTRA FORMA

Es una lista de recursos que deben ubicarse en la raíz del árbol de Java. El único propósito de este atributo es admitir bibliotecas de terceros que requieren que sus recursos se encuentren en la ruta de clase exactamente como "myconfig.xml". Solo se permite en archivos binarios y no en bibliotecas, debido al peligro de conflictos de espacios 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 []

Es una lista de líneas que se agregarán al archivo META-INF/manifest.mf generado para el destino *_deploy.jar. El contenido de este atributo no está sujeto a la sustitución de "Crear variable".
javacopts

Lista de cadenas; el valor predeterminado es []

Son opciones de compilador adicionales para este objeto binario. Sujeto a la sustitución de "Make variable" y la tokenización de Bourne shell.

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 []

Es una lista de marcas para incorporar en la secuencia de comandos de wrapper que se genera para ejecutar este archivo binario. Sujeto a la sustitución de $(location) y "Make variable", y a la tokenización de Bourne shell.

La secuencia de comandos de wrapper para un archivo binario de Java incluye una definición de CLASSPATH (para encontrar todos los archivos JAR dependientes) y llama al intérprete de Java correcto. La línea de comandos que genera el wrapper incluye el nombre de la clase principal seguido de un "$@" para que puedas pasar otros argumentos después del nombre de la clase. Sin embargo, los argumentos destinados al análisis de la JVM deben especificarse antes del nombre de la clase en la línea de comandos. El contenido de jvm_flags se agrega a la secuencia de comandos de wrapper antes de que se muestre el nombre de la 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 archivo binario que se usará para ejecutar tu programa en Java en lugar del programa bin/java normal incluido en el JDK. El destino debe ser un cc_binary. Se puede especificar cualquier cc_binary que implemente la API de invocación de Java como valor para este atributo.

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

La marca de Bazel --java_launcher relacionada solo afecta a los 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 iniciador del JDK o algún otro:

  • Si usas el iniciador normal del JDK (el predeterminado), las dependencias nativas se compilan como una biblioteca compartida llamada {name}_nativedeps.so, donde {name} es el atributo name de esta regla java_binary. El vinculador no quita el código sin usar en esta configuración.
  • Si usas otro selector, las dependencias nativas (C++) se vinculan de forma estática en un objeto binario llamado {name}_nativedeps, donde {name} es el atributo name de esta regla java_binary. En este caso, el vinculador quitará del archivo binario resultante cualquier código que considere que no se usa, lo que significa que es posible que no se vincule ningún código C++ al que se acceda solo a través de JNI, a menos que ese destino cc_library especifique alwayslink = True.

Cuando se usa un selector que no sea el selector de JDK predeterminado, cambia el formato de la salida de *_deploy.jar. Consulta la documentación principal de java_binary para obtener más detalles.

main_class

Cadena. El valor predeterminado es "".

Nombre de la clase con el método main() que se 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 crear un ejecutable a partir de 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 fuente. La clase debe estar disponible en el tiempo de ejecución: esta regla puede compilarla (desde srcs) o las dependencias directas o transitivas pueden proporcionarla (a través de runtime_deps o deps). Si la clase no está disponible, el archivo binario fallará en el tiempo de ejecución; no hay ninguna verificación en el tiempo de compilación.

Booleano; el valor predeterminado es False

plugins

Lista de etiquetas. El valor predeterminado es [].

Son complementos del compilador de Java que se ejecutan en tiempo de compilación. Cada java_plugin especificado en este atributo se ejecutará cada vez que se compile esta regla. Una biblioteca también puede heredar complementos de dependencias que usan exported_plugins. Los recursos que genera el complemento se incluirán en el archivo .jar resultante de esta regla.
resource_strip_prefix

Cadena. El valor predeterminado es "".

Es el prefijo de 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 del atributo resources. Es un error que un archivo de recursos no esté en este directorio. Si no se especifica (opción predeterminada), la ruta del archivo de recursos se determina según la misma lógica que el paquete 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 [].

Son las bibliotecas que estarán disponibles para el archivo binario final o la prueba solo en el tiempo de ejecución. Al igual que los deps comunes, estos aparecerán en la ruta de clase de tiempo de ejecución, pero, a diferencia de ellos, no en la ruta de clase de tiempo de compilación. Aquí se deben enumerar las dependencias que solo se necesitan en el tiempo de ejecución. Las herramientas de análisis de dependencias deben ignorar los destinos que aparecen en runtime_deps y deps.
stamp

Número entero; el valor predeterminado es 0

Indica si se debe codificar la información de compilación en el archivo binario. Valores posibles:
  • stamp = 1: Siempre se debe incluir la información de compilación en el binario, incluso en las compilaciones de --nostamp. Se debe evitar este parámetro de configuración, ya que podría detener el almacenamiento en caché remoto del binario y cualquier acción posterior que dependa de él.
  • stamp = 0: Siempre reemplaza la información de compilación por valores constantes. Esto permite un buen almacenamiento en caché de los resultados de la compilación.
  • stamp = -1: La incorporación de información de compilación se controla con la marca --[no]stamp.

Los archivos binarios con marca de tiempo no se vuelven a compilar, a menos que cambien sus dependencias.

test_class

Cadena. El valor predeterminado es "".

Clase Java que cargará el ejecutor de pruebas.

De forma predeterminada, si no se define este argumento, se usa el modo heredado y, en su lugar, se usan los 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. Es raro que debas configurar este parámetro. Si se omite este argumento, se inferirá con el name del destino y su ruta de acceso relativa a la raíz de la fuente. Si la prueba se encuentra fuera de una raíz de fuente conocida, Bazel informará un error si test_class no está configurado.

En 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 devuelva un junit.framework.Test (o una subclase de Test).

Este atributo permite que varias reglas java_test compartan el mismo Test (TestCase, TestSuite, etcétera). 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 binario debe usar un selector personalizado.

Si este atributo se establece en falso, se ignorarán el atributo launcher 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 el punto de entrada principal para un programa en Java y proporciona la clase de prueba al ejecutor de pruebas como un valor de la propiedad del sistema bazel.test_suite.
Puedes usar esto para anular el comportamiento predeterminado, que es usar el ejecutor de pruebas para las reglas java_test y no usarlo para las reglas java_binary. Es poco probable que quieras hacer esto. Un uso es para las reglas de AllTest que invoca otra regla (para configurar una base de datos antes de ejecutar las pruebas, por ejemplo). La regla AllTest se debe declarar como java_binary, pero debe seguir usando el ejecutor de pruebas como su punto de entrada principal. El nombre de una clase de ejecutor de pruebas se puede anular con el atributo main_class.

java_package_configuration

Ver la fuente de la regla
java_package_configuration(name, data, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, javacopts, output_licenses, package_metadata, packages, restricted_to, system, tags, target_compatible_with, testonly, toolchains, visibility)

Es la configuración que se aplicará a un conjunto de paquetes. Se pueden agregar configuraciones a los 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)

Es un nombre único para este destino.

data

Lista de etiquetas. El valor predeterminado es [].

Es la lista de archivos que necesita esta configuración durante el tiempo de ejecución.
javacopts

Lista de cadenas; el valor predeterminado es []

Marcas 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_groups al que se debe aplicar la configuración.
system

Etiqueta: El valor predeterminado es None.

Corresponde a la marca --system de javac.

java_plugin

Ver la fuente de la regla
java_plugin(name, deps, srcs, data, resources, add_exports, add_opens, bootclasspath, compatible_with, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, generates_api, javabuilder_jvm_flags, javacopts, licenses, neverlink, output_licenses, package_metadata, plugins, processor_class, proguard_specs, resource_strip_prefix, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

java_plugin define complementos para el compilador de Java que ejecuta Bazel. El único tipo de complementos admitido son los procesadores de anotaciones. Una regla java_library o java_binary puede ejecutar complementos si depende 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.

Objetivos de salida implícitos

  • libname.jar: Es un archivo Java.

Los argumentos son un subconjunto de los de java_library() (y tienen la misma semántica), excepto por la adición de los argumentos processor_class y generates_api.

Argumentos

Atributos
name

Nombre (obligatorio)

Es 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 compilados por las reglas de java_library que se indican en deps estarán en la ruta de acceso de la compilación de esta regla. Además, el cierre transitivo de sus deps, runtime_deps y exports estará en la ruta de acceso de la clase de tiempo de ejecución.

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

srcs

Lista de etiquetas. El valor predeterminado es [].

Es la lista de archivos fuente que se procesan para crear el destino. Este atributo casi siempre es obligatorio. Consulta las excepciones a continuación.

Se compilan los archivos fuente de tipo .java. En el caso de los archivos .java generados, generalmente es recomendable colocar aquí el nombre de la regla de generación en lugar del nombre del archivo en sí. Esto no solo mejora la legibilidad, sino que también 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 de generación. No debes incluir la regla de generación en deps porque no realiza ninguna operación.

Los archivos fuente de tipo .srcjar se descomprimen y compilan. (Esto es útil si necesitas generar un conjunto de archivos .java con una regla 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 describió para los archivos fuente.

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

Se ignorarán todos los demás archivos, siempre y cuando haya al menos uno de un tipo de archivo descrito anteriormente. De lo contrario, se generará 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 tiempo 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 archivos data son archivos generados, Bazel los genera. Cuando compilas una prueba que depende de este java_library, Bazel copia o vincula los archivos data en el área de archivos ejecutables.

resources

Lista de etiquetas. El valor predeterminado es [].

Es una lista de archivos de datos que se incluirán en un archivo .jar de Java.

Los recursos pueden ser archivos fuente o archivos generados.

Si se especifican recursos, se incluirán en el archivo .jar junto con los archivos .class habituales que se producen durante la compilación. La ubicación de los recursos dentro del archivo JAR está determinada por la estructura del proyecto. Primero, Bazel busca el diseño de directorio estándar de Maven (un directorio "src" seguido de un directorio "resources" como nieto). Si no se encuentra, Bazel busca el directorio superior llamado "java" o "javatests" (por ejemplo, si un recurso está 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, el atributo resource_strip_prefix se puede usar para especificar un directorio alternativo específico para los archivos de recursos.

add_exports

Lista de cadenas; el valor predeterminado es []

Permite que esta biblioteca acceda al module o package proporcionado.

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 forma reflexiva al module o package determinado.

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

bootclasspath

Etiqueta: El valor predeterminado es None.

API restringida. No la uses.
generates_api

Booleano; el valor predeterminado es False

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

Si una regla usa un procesador de anotaciones que genera APIs, otras reglas que dependen de ella solo pueden hacer referencia al código generado si sus acciones de compilación se programan después de la regla de generación. Este atributo indica a Bazel que introduzca restricciones de programación cuando se habilita --java_header_compilation.

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 la uses.
javacopts

Lista de cadenas; el valor predeterminado es []

Son opciones adicionales del compilador para esta biblioteca. Sujeto a la sustitución de "Make variable" y la tokenización de Bourne shell.

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 se debe usar para la compilación y no en 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 del IDE para los complementos del IDE o tools.jar para cualquier elemento que se ejecute en un JDK estándar.

Ten en cuenta que neverlink = True no impide que el compilador inserte material de esta biblioteca en los destinos de compilación que dependen de ella, según lo permite la especificación del lenguaje Java (p.ej., Constantes static final de String o de tipos primitivos). Por lo tanto, el caso de uso preferido es cuando la biblioteca de tiempo de ejecución es idéntica a la biblioteca de compilación.

Si la biblioteca de 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 a los compiladores insertar código en línea (y eso debe cumplirse para todas las versiones futuras del JLS).

output_licenses

Lista de cadenas; el valor predeterminado es []

plugins

Lista de etiquetas. El valor predeterminado es [].

Son complementos del compilador de Java que se ejecutan en tiempo de compilación. Cada java_plugin especificado en este atributo se ejecutará cada vez que se compile esta regla. Una biblioteca también puede heredar complementos de dependencias que usan exported_plugins. Los recursos que genera el complemento se incluirán en el archivo .jar resultante de esta regla.
processor_class

Cadena. El valor predeterminado es "".

La clase del procesador es el tipo completamente calificado de la clase que el compilador de Java debe usar como punto de entrada para el procesador de anotaciones. Si no se especifica, esta regla no aportará un procesador de anotaciones al procesamiento de anotaciones del compilador de Java, pero su ruta de clase de tiempo de ejecución se incluirá en la ruta del procesador de anotaciones del compilador. (Esto está destinado principalmente a los complementos de Error Prone, 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. Estos describirán el conjunto de especificaciones que usará Proguard. Si se especifican, se agregarán a cualquier destino android_binary que dependa de 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 los proguard_specs de android_binary para garantizar combinaciones no tautológicas.
resource_strip_prefix

Cadena. El valor predeterminado es "".

Es el prefijo de 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 del atributo resources. Es un error que un archivo de recursos no esté en este directorio. Si no se especifica (opción predeterminada), la ruta del archivo de recursos se determina según la misma lógica que el paquete 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 la fuente de la regla
java_runtime(name, srcs, compatible_with, default_cds, deprecation, exec_compatible_with, exec_group_compatible_with, exec_properties, features, hermetic_srcs, hermetic_static_libs, java, java_home, lib_ct_sym, lib_modules, output_licenses, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, version, visibility)

Especifica la configuración de 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)

Es un nombre único para este destino.

srcs

Lista de etiquetas. El valor predeterminado es [].

Todos los archivos en el tiempo de ejecución.
default_cds

Etiqueta: El valor predeterminado es None.

Es el archivo CDS predeterminado para java_runtime hermético. Cuando se habilita el modo hermético para un destino java_binary, el CDS predeterminado java_runtime se empaqueta en el JAR de implementación hermético.
hermetic_srcs

Lista de etiquetas. El valor predeterminado es [].

Son los archivos del entorno de ejecución necesarios para las implementaciones herméticas.
hermetic_static_libs

Lista de etiquetas. El valor predeterminado es [].

Son las bibliotecas que se vinculan de forma estática con el selector para las implementaciones herméticas.
java

Etiqueta: El valor predeterminado es None.

Ruta de acceso al ejecutable de Java.
java_home

Cadena. El valor predeterminado es "".

Es la ruta de acceso a la raíz del entorno de ejecución. Sujeto a la sustitución de la variable "Make" Si esta ruta es absoluta, la regla denota un tiempo 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.

Es 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.

Es 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 devuelve Runtime.version().feature().

java_single_jar

Ver la fuente de la regla
java_single_jar(name, deps, compatible_with, compress, deploy_env, deploy_manifest_lines, deprecation, exclude_build_data, exec_compatible_with, exec_group_compatible_with, exec_properties, features, multi_release, package_metadata, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)
Recopila dependencias de Java y archivos JAR en un solo archivo JAR `java_single_jar` recopila dependencias de Java y archivos JAR en un solo archivo JAR. Es similar a java_binary, pero con todo lo relacionado con los ejecutables inhabilitado, y proporciona una alternativa al "truco de JAR de implementación" de java_binary. ## Ejemplo ```skylark load("//tools/build_defs/java_single_jar:java_single_jar.bzl", "java_single_jar") java_single_jar( name = "my_single_jar", deps = [ "//java/com/google/foo", "//java/com/google/bar", ], ) ``` Salidas: {name}.jar: Un solo JAR que contiene todas las entradas.

Argumentos

Atributos
name

Nombre (obligatorio)

Es un nombre único para este destino.

deps

Lista de etiquetas. El valor predeterminado es [].

Son los destinos de Java (incluidos java_import y java_library) desde los que se recopilan las dependencias transitivas. Las dependencias del tiempo de ejecución se recopilan a través de deps, exports y runtime_deps. También se recopilan recursos. Las dependencias nativas de cc_library o java_wrap_cc no lo son.
compress

Cadena. El valor predeterminado es "preserve".

Indica si siempre se debe comprimir ("yes"), siempre almacenar ("no") o pasar sin modificar ("preserve"). El valor predeterminado es "preserve", y es la opción más eficiente, ya que no se realiza ningún trabajo adicional para inflar o desinflar.
deploy_env

Lista de etiquetas. El valor predeterminado es [].

Es una lista de destinos `java_binary` o `java_single_jar` que representan el entorno de implementación de este objeto binario. Establece este atributo cuando compiles un complemento que se cargará con otro `java_binary`. Las dependencias de `deploy_env` se excluyen del archivo .jar compilado por esta regla.
deploy_manifest_lines

Lista de cadenas; el valor predeterminado es []

Es una lista de líneas que se agregarán al archivo META-INF/manifest.mf.
exclude_build_data

Booleano; el valor predeterminado es True

Indica si se debe omitir el archivo build-data.properties que se genera de forma predeterminada.
multi_release

Booleano; el valor predeterminado es True

Indica si se deben habilitar los archivos .jar de salida de Multi-Release.

java_toolchain

Ver la 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, exec_compatible_with, exec_group_compatible_with, exec_properties, features, forcibly_disable_header_compilation, genclass, header_compiler, header_compiler_builtin_processors, header_compiler_direct, ijar, jacocorunner, java_runtime, javabuilder, javabuilder_data, javabuilder_jvm_opts, javac_supports_multiplex_workers, javac_supports_worker_cancellation, javac_supports_worker_multiplex_sandboxing, javac_supports_workers, javacopts, jspecify_implicit_deps, jspecify_javacopts, jspecify_packages, jspecify_processor, jspecify_processor_class, jspecify_stubs, jvm_opts, licenses, misc, oneversion, oneversion_allowlist, oneversion_allowlist_for_tests, oneversion_whitelist, package_configuration, package_metadata, proguard_allowlister, reduced_classpath_incompatible_processors, restricted_to, singlejar, source_version, tags, target_compatible_with, target_version, testonly, timezone_data, toolchains, tools, turbine_data, turbine_jvm_opts, visibility, xlint)

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

Ejemplos

Un ejemplo simple 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)

Es un nombre único para este destino.

android_lint_data

Lista de etiquetas. El valor predeterminado es [].

Son las 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 []

Es la lista de argumentos de Android Lint.
android_lint_package_configuration

Lista de etiquetas. El valor predeterminado es [].

Es la configuración de Android Lint que se debe aplicar 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 [].

Son las entradas de la ruta de arranque de destino de Java. Corresponde a la marca -bootclasspath de javac.
compatible_javacopts

Es nulo. El valor predeterminado es {}.

API interna. No la uses.
deps_checker

Etiqueta: El valor predeterminado es None.

Es la etiqueta del 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 la admiten, p.ej., JDK 7 Bazel.
genclass

Etiqueta: El valor predeterminado es None.

Es la etiqueta del archivo JAR de implementación de GenClass.
header_compiler

Etiqueta: El valor predeterminado es None.

Es la etiqueta del compilador de encabezado. Obligatorio si se habilita --java_header_compilation.
header_compiler_builtin_processors

Lista de cadenas; el valor predeterminado es []

API interna. No la uses.
header_compiler_direct

Etiqueta: El valor predeterminado es None.

Es la etiqueta opcional del compilador de encabezados que se usará para las acciones directas de classpath que no incluyen ningún procesador de anotaciones que genere APIs.

Esta herramienta no admite el procesamiento de anotaciones.

ijar

Etiqueta: El valor predeterminado es None.

Es la etiqueta del ejecutable de ijar.
jacocorunner

Etiqueta: El valor predeterminado es None.

Es la etiqueta del JAR de implementación de JacocoCoverageRunner.
java_runtime

Etiqueta: El valor predeterminado es None.

Es el java_runtime que se usará con esta cadena de herramientas. De forma predeterminada, se establece en java_runtime en la configuración de ejecución.
javabuilder

Etiqueta: El valor predeterminado es None.

Es la etiqueta del JAR de implementación de JavaBuilder.
javabuilder_data

Lista de etiquetas. El valor predeterminado es [].

Son las etiquetas de los datos disponibles para la expansión de etiquetas en javabuilder_jvm_opts.
javabuilder_jvm_opts

Lista de cadenas; el valor predeterminado es []

Es la 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 de multiplexación y 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 y 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 un trabajador persistente multiplexado con aislamiento, y falso si no lo admite.
javac_supports_workers

Booleano; el valor predeterminado es True

Es verdadero si JavaBuilder admite la ejecución como un trabajador persistente y falso si no la admite.
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 la lista completa de las marcas posibles 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

Cadena. 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 []

Es la lista de argumentos para la JVM cuando se invoca el compilador de Java. Consulta la documentación de la máquina virtual de Java para obtener la lista completa 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.

Es la etiqueta del objeto binario de aplicación de una versión.
oneversion_allowlist

Etiqueta: El valor predeterminado es None.

Es la etiqueta de la lista de entidades permitidas de una versión.
oneversion_allowlist_for_tests

Etiqueta: El valor predeterminado es None.

Es la etiqueta de la lista de entidades permitidas de una versión para las pruebas.
oneversion_whitelist

Etiqueta: El valor predeterminado es None.

Obsoleto: Usa oneversion_allowlist en su lugar.
package_configuration

Lista de etiquetas. El valor predeterminado es [].

Es la configuración que se debe aplicar a los grupos de paquetes especificados.
proguard_allowlister

Etiqueta: El valor predeterminado es "@bazel_tools//tools/jdk:proguard_whitelister".

Es la etiqueta de la lista de elementos permitidos de Proguard.
reduced_classpath_incompatible_processors

Lista de cadenas; el valor predeterminado es []

API interna. No la uses.
singlejar

Etiqueta: El valor predeterminado es None.

Es la etiqueta del JAR de implementación de SingleJar.
source_version

Cadena. El valor predeterminado es "".

Versión de la fuente 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

Cadena. El valor predeterminado es "".

Es la versión de destino 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.

Es la etiqueta de un archivo JAR de recursos que contiene datos de zona horaria. Si se configura, los datos de zona horaria se agregan como una dependencia de tiempo de ejecución implícita de todas las reglas de java_binary.
tools

Lista de etiquetas. El valor predeterminado es [].

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

Lista de etiquetas. El valor predeterminado es [].

Son las etiquetas de los datos disponibles para la expansión de etiquetas en turbine_jvm_opts.
turbine_jvm_opts

Lista de cadenas; el valor predeterminado es []

Es la lista de argumentos para la JVM cuando se invoca Turbine.
xlint

Lista de cadenas; el valor predeterminado es []

Es la lista de advertencias que se agregarán o quitarán de la lista predeterminada. Antepón un guion para quitarlo. Consulta la documentación de Javac sobre las opciones de -Xlint para obtener más información.