Règles Java

Signaler un problème Afficher la source

Règles

java_binary

Afficher la source de la règle
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)

Crée une archive Java ("fichier JAR") et un script shell wrapper portant le même nom que la règle. Le script shell de wrapper utilise un chemin de classe qui inclut, entre autres, un fichier JAR pour chaque bibliothèque dont dépend le binaire. Lors de l'exécution du script shell de wrapper, toute variable d'environnement JAVABIN non vide est prioritaire sur la version spécifiée via l'option --java_runtime_version de Bazel.

Le script wrapper accepte plusieurs indicateurs uniques. Reportez-vous à //src/main/java/com/google/devtools/build/lib/bazel/rules/java/java_stub_template.txt pour obtenir la liste des indicateurs configurables et des variables d'environnement acceptés par le wrapper.

Objectifs de résultats implicites

  • name.jar: archive Java contenant les fichiers de classe et d'autres ressources correspondant aux dépendances directes du binaire.
  • name-src.jar: archive contenant les sources ("JAR source").
  • name_deploy.jar: archive Java adaptée au déploiement (créée uniquement sur demande explicite).

    La création de la cible <name>_deploy.jar pour votre règle entraîne la création d'un fichier JAR autonome avec un fichier manifeste qui permet de l'exécuter à l'aide de la commande java -jar ou de l'option --singlejar du script wrapper. Il est préférable d'utiliser le script wrapper java -jar, car il transmet également les indicateurs JVM et les options permettant de charger des bibliothèques natives.

    Le fichier JAR de déploiement contient toutes les classes qui seraient trouvées par un ClassLoader qui recherche du début à la fin le classpath à partir du script du wrapper du binaire. Il contient également les bibliothèques natives nécessaires aux dépendances. Ceux-ci sont automatiquement chargés dans la JVM au moment de l'exécution.

    Si votre cible spécifie un attribut launcher, le fichier _deploy.jar sera un fichier binaire natif au lieu d'être un fichier JAR normal. Il contiendra le lanceur d'applications et toutes les dépendances natives (C++) de votre règle, le tout lié à un binaire statique. Les octets réels du fichier JAR seront ajoutés à ce binaire natif, créant ainsi un seul blob binaire contenant à la fois l'exécutable et le code Java. Vous pouvez exécuter le fichier JAR obtenu directement comme vous exécuteriez n'importe quel binaire natif.

  • name_deploy-src.jar: archive contenant les sources collectées lors de la fermeture transitive de la cible. Elles correspondront aux classes de deploy.jar, sauf lorsque les fichiers JAR n'ont pas de fichier JAR source correspondant.

Un attribut deps n'est pas autorisé dans une règle java_binary sans srcs. Une telle règle nécessite un main_class fourni par runtime_deps.

L'extrait de code suivant illustre une erreur courante:

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

Procédez plutôt comme suit:

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

Arguments

Attributs
name

Nom (obligatoire)

Nom unique de cette cible.


Il est recommandé d'utiliser le nom du fichier source qui est le point d'entrée principal de l'application (moins l'extension). Par exemple, si votre point d'entrée s'appelle Main.java, votre nom pourrait être Main.
deps

Liste des libellés ; la valeur par défaut est []

Liste des autres bibliothèques à associer à la cible. Consultez les commentaires généraux sur deps dans la section Attributs standards définis par la plupart des règles de compilation.
srcs

Liste des libellés ; la valeur par défaut est []

Liste des fichiers sources traités pour créer la cible. Cet attribut est presque toujours obligatoire (voir les exceptions ci-dessous).

Les fichiers sources de type .java sont compilés. Dans le cas de fichiers .java générés, il est généralement conseillé d'indiquer ici le nom de la règle génératrice plutôt que le nom du fichier lui-même. Cela permet non seulement d'améliorer la lisibilité, mais aussi de rendre la règle plus résistante aux modifications futures. En effet, si la règle qui génère différents fichiers à l'avenir sera générée, il vous suffira de corriger un seul endroit : le outs de cette règle. Vous ne devez pas répertorier la règle génératrice dans deps, car il s'agit d'une règle no-op.

Les fichiers sources de type .srcjar sont décompressés et compilés. (Cela est utile si vous devez générer un ensemble de fichiers .java avec une genrule.)

Règles: si la règle (généralement genrule ou filegroup) génère l'un des fichiers répertoriés ci-dessus, elle sera utilisée de la même manière que pour les fichiers sources.

Cet argument est presque toujours obligatoire, sauf si un attribut main_class spécifie une classe dans le classpath d'exécution ou si vous spécifiez l'argument runtime_deps.

resources

Liste des libellés ; la valeur par défaut est []

Liste de fichiers de données à inclure dans un fichier JAR Java.

Si des ressources sont spécifiées, elles seront regroupées dans le fichier JAR avec les fichiers .class habituels générés par la compilation. L'emplacement des ressources dans le fichier JAR est déterminé par la structure du projet. Bazel recherche d'abord la mise en page standard des répertoires de Maven (un répertoire "src" suivi d'un petit-enfant du répertoire "resources"). Si ce répertoire n'est pas trouvé, Bazel recherche ensuite le répertoire de niveau supérieur nommé "java" ou "javatests" (par exemple, si une ressource se trouve sur <workspace root>/x/java/y/java/z, son chemin d'accès sera y/java/z). Cette heuristique ne peut pas être remplacée, mais l'attribut resource_strip_prefix peut être utilisé pour spécifier un autre répertoire spécifique pour les fichiers de ressources.

Les ressources peuvent être des fichiers sources ou générés.

classpath_resources

Liste des libellés ; la valeur par défaut est []

N'UTILISEZ PAS CETTE OPTION, SAUF SI il n'y en a aucune AUTRE)

Liste des ressources qui doivent être situées à la racine de l'arborescence Java. La seule fonction de cet attribut est d'accepter les bibliothèques tierces qui exigent que leurs ressources se trouvent sur le chemin de classe avec la valeur "myconfig.xml" exacte. Elle n'est autorisée que sur les binaires, pas sur les bibliothèques, en raison des risques de conflits d'espaces de noms.

create_executable

Booléen ; non configurable ; la valeur par défaut est True

Obsolète, utilisez plutôt java_single_jar.
deploy_env

Liste des libellés ; la valeur par défaut est []

Liste d'autres cibles java_binary représentant l'environnement de déploiement pour ce binaire. Définissez cet attribut lors de la création d'un plug-in qui sera chargé par un autre java_binary.
La définition de cet attribut exclut toutes les dépendances du classpath d'exécution (et du fichier JAR de déploiement) de ce binaire, qui sont partagées entre ce binaire et les cibles spécifiées dans deploy_env.
deploy_manifest_lines

Liste de chaînes ; la valeur par défaut est []

Liste de lignes à ajouter au fichier META-INF/manifest.mf généré pour la cible *_deploy.jar. Le contenu de cet attribut n'est pas soumis au remplacement de "Make variable".
javacopts

Liste de chaînes ; la valeur par défaut est []

Options de compilateur supplémentaires pour cette bibliothèque. Cette opération est soumise à la substitution de la variable "Make variable" et à la tokenisation de l'interface système Bourne.

Ces options du compilateur sont transmises à javac après les options globales du compilateur.

jvm_flags

Liste de chaînes ; la valeur par défaut est []

Liste d'indicateurs à intégrer dans le script wrapper généré pour l'exécution de ce binaire. Soumis à la substitution de $(location) et à la méthode Make variable, ainsi qu'à la tokenisation de l'interface système Bourne.

Le script wrapper d'un binaire Java inclut une définition de CLASSPATH (pour trouver tous les fichiers JAR dépendants) et appelle l'interpréteur Java approprié. La ligne de commande générée par le script wrapper inclut le nom de la classe principale suivi d'un élément "$@" afin que vous puissiez transmettre d'autres arguments après le nom de classe. Toutefois, les arguments destinés à être analysés par la JVM doivent être spécifiés avant le nom de classe sur la ligne de commande. Le contenu de jvm_flags est ajouté au script du wrapper avant que le nom de classe ne soit listé.

Notez que cet attribut n'a aucun effet sur les sorties *_deploy.jar.

launcher

Libellé ; la valeur par défaut est None

Spécifiez un binaire qui sera utilisé pour exécuter votre programme Java à la place du programme bin/java normal inclus avec le JDK. La cible doit être une cc_binary. Tout cc_binary qui implémente l' API d'appel Java peut être spécifié en tant que valeur pour cet attribut.

Par défaut, Bazel utilise le lanceur JDK standard (bin/java ou java.exe).

L'indicateur Bazel --java_launcher associé n'affecte que les cibles java_binary et java_test qui n'ont pas spécifié d'attribut launcher.

Notez que vos dépendances natives (C++, SWIG, JNI) seront compilées différemment selon que vous utilisez le lanceur JDK ou un autre lanceur:

  • Si vous utilisez le lanceur JDK standard (par défaut), les dépendances natives sont créées sous la forme d'une bibliothèque partagée nommée {name}_nativedeps.so, où {name} est l'attribut name de cette règle java_binary. Dans cette configuration, le code inutilisé n'est pas supprimé par l'éditeur de liens.
  • Si vous utilisez un autre lanceur d'applications, les dépendances natives (C++) sont associées de manière statique à un binaire nommé {name}_nativedeps, où {name} est l'attribut name de cette règle java_binary. Dans ce cas, l'éditeur de liens supprime tout code qu'il estime inutilisé du binaire obtenu, ce qui signifie que tout code C++ accessible uniquement via JNI ne peut pas être associé, sauf si cette cible cc_library spécifie alwayslink = 1.

Lorsque vous utilisez un lanceur d'applications autre que le lanceur JDK par défaut, le format de la sortie *_deploy.jar change. Pour en savoir plus, consultez la documentation principale sur java_binary.

main_class

Chaîne ; la valeur par défaut est ""

Nom de la classe avec la méthode main() à utiliser comme point d'entrée. Si une règle utilise cette option, elle n'a pas besoin de liste srcs=[...]. Ainsi, cet attribut permet de créer un exécutable à partir d'une bibliothèque Java contenant déjà une ou plusieurs méthodes main().

La valeur de cet attribut est un nom de classe et non un fichier source. La classe doit être disponible au moment de l'exécution: elle peut être compilée à l'aide de cette règle (à partir de srcs) ou fournie par des dépendances directes ou transitives (via runtime_deps ou deps). Si la classe n'est pas disponible, le binaire échouera au moment de l'exécution, car il n'y a pas de contrôle de la compilation.

plugins

Liste des libellés ; la valeur par défaut est []

Plug-ins de compilation Java à exécuter au moment de la compilation. Chaque valeur java_plugin spécifiée dans cet attribut sera exécutée chaque fois que cette règle sera créée. Une bibliothèque peut également hériter des plug-ins des dépendances qui utilisent exported_plugins. Les ressources générées par le plug-in seront incluses dans le fichier JAR résultant de cette règle.
resource_jars

Liste des libellés ; la valeur par défaut est []

Obsolète: utilisez plutôt java_import et deps ou runtime_deps.
resource_strip_prefix

Chaîne ; la valeur par défaut est ""

Préfixe de chemin d'accès à supprimer des ressources Java.

S'il est spécifié, ce préfixe de chemin d'accès est supprimé de chaque fichier dans l'attribut resources. Un fichier de ressources ne se trouve pas dans ce répertoire. S'il n'est pas spécifié (valeur par défaut), le chemin d'accès au fichier de ressources est déterminé selon la même logique que le package Java des fichiers sources. Par exemple, un fichier source dans stuff/java/foo/bar/a.txt sera situé à l'emplacement foo/bar/a.txt.

runtime_deps

Liste des libellés ; la valeur par défaut est []

Bibliothèques à mettre à la disposition du binaire final ou à effectuer des tests uniquement lors de l'exécution. Comme les deps ordinaires, ces valeurs apparaissent sur le classpath d'exécution, mais contrairement à elles, et non sur le classpath au moment de la compilation. Les dépendances nécessaires uniquement au moment de l'exécution doivent être listées ici. Les outils d'analyse des dépendances doivent ignorer les cibles qui apparaissent à la fois dans runtime_deps et deps.
stamp

Entier ; la valeur par défaut est -1

Indique s'il faut encoder les informations de compilation dans le binaire. Les valeurs possibles sont :
  • stamp = 1: permet toujours d'ajouter les informations de compilation dans le binaire, même dans les compilations --nostamp. Ce paramètre doit être évité, car il peut éliminer la mise en cache à distance du binaire et toutes les actions en aval qui en dépendent.
  • stamp = 0: remplace toujours les informations de compilation par des valeurs constantes. Cela permet une bonne mise en cache des résultats de compilation.
  • stamp = -1: l'intégration des informations de compilation est contrôlée par l'indicateur --[no]stamp.

Les binaires estampés ne sont pas recréés, sauf si leurs dépendances changent.

use_launcher

Booléen ; la valeur par défaut est True

Indique si le binaire doit utiliser un lanceur personnalisé.

Si cet attribut est défini sur "false", l'attribut launcher et l'indicateur --java_launcher associé seront ignorés pour cette cible.

use_testrunner

Booléen ; la valeur par défaut est False

Utilisez la classe du lanceur de test (par défaut, com.google.testing.junit.runner.BazelTestRunner) comme point d'entrée principal d'un programme Java et fournissez la classe de test au lanceur de test en tant que valeur de la propriété système bazel.test_suite. Vous pouvez l'utiliser pour ignorer le comportement par défaut, qui consiste à utiliser le lanceur de test pour les règles java_test, et non pour les règles java_binary. Vous ne souhaiterez probablement pas effectuer cette opération. Une utilisation est possible pour les règles AllTest appelées par une autre règle (par exemple, pour configurer une base de données avant d'exécuter les tests). La règle AllTest doit être déclarée en tant que java_binary, mais doit toujours utiliser le lanceur de test comme point d'entrée principal. Le nom d'une classe de lanceur de test peut être remplacé par l'attribut main_class.

java_import

Afficher la source de la règle
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)

Cette règle autorise l'utilisation de fichiers .jar précompilés en tant que bibliothèques pour les règles java_library et java_binary.

Exemples


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

Arguments

Attributs
name

Nom (obligatoire)

Nom unique de cette cible.

deps

Liste des libellés ; la valeur par défaut est []

Liste des autres bibliothèques à associer à la cible. Consultez java_library.deps.
data

Liste des libellés ; la valeur par défaut est []

Liste des fichiers nécessaires à cette règle au moment de l'exécution.
add_exports

Liste de chaînes ; la valeur par défaut est []

Autoriser cette bibliothèque à accéder au module ou au package donné.

Cela correspond aux indicateurs javac et JVM --add-exports=.

add_opens

Liste de chaînes ; la valeur par défaut est []

Autoriser cette bibliothèque à accéder de manière réfléchie au module ou au package donné.

Cela correspond aux indicateurs javac et JVM --add-opens=.

constraints

Liste de chaînes ; la valeur par défaut est []

Contraintes supplémentaires imposées à cette règle en tant que bibliothèque Java.
exports

Liste des libellés ; la valeur par défaut est []

Cibles à mettre à la disposition des utilisateurs de cette règle. Consultez java_library.exports.
jars

Liste des libellés (obligatoire)

Liste des fichiers JAR fournis aux cibles Java qui en dépendent.

Booléen ; la valeur par défaut est False

N'utilisez cette bibliothèque que pour la compilation, et non lors de l'exécution. Utile si la bibliothèque est fournie par l'environnement d'exécution lors de l'exécution. Les API IDE pour les plug-ins IDE sont des exemples de bibliothèques comme celle-ci, ou tools.jar pour tout ce qui s'exécute sur un JDK standard.
proguard_specs

Liste des libellés ; la valeur par défaut est []

Fichiers à utiliser comme spécification ProGuard. Celles-ci décrivent l'ensemble des caractéristiques que ProGuard doit utiliser. S'il est spécifié, ils seront ajoutés à n'importe quelle cible android_binary en fonction de cette bibliothèque. Les fichiers inclus ici ne doivent comporter que des règles idempotentes, à savoir -dontnote, -dontwarn, assumenosideeffects et commençant par -keep. D'autres options ne peuvent apparaître que dans proguard_specs de android_binary, pour garantir les fusions non tautologiques.
runtime_deps

Liste des libellés ; la valeur par défaut est []

Bibliothèques à mettre à la disposition du binaire final ou à effectuer des tests uniquement lors de l'exécution. Consultez java_library.runtime_deps.
srcjar

Libellé ; la valeur par défaut est None

Un fichier JAR contenant le code source des fichiers JAR compilés.

java_library

Afficher la source de la règle
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)

Cette règle compile et associe les sources dans un fichier .jar.

Sorties implicites

  • libname.jar: archive Java contenant les fichiers de classe.
  • libname-src.jar: archive contenant les sources ("JAR source").

Arguments

Attributs
name

Nom (obligatoire)

Nom unique de cette cible.

deps

Liste des libellés ; la valeur par défaut est []

Liste des bibliothèques à associer à cette bibliothèque. Consultez les commentaires généraux sur deps dans la section Attributs classiques définis par la plupart des règles de compilation.

Les fichiers JAR créés par les règles java_library répertoriées dans deps seront dans le classpath au moment de la compilation de cette règle. De plus, la fermeture transitive de leurs deps, runtime_deps et exports se fera sur le classpath d'exécution.

En revanche, les cibles de l'attribut data sont incluses dans les fichiers d'exécution, mais ni dans le classpath au moment de la compilation, ni dans le classpath d'exécution.

srcs

Liste des libellés ; la valeur par défaut est []

Liste des fichiers sources traités pour créer la cible. Cet attribut est presque toujours obligatoire (voir les exceptions ci-dessous).

Les fichiers sources de type .java sont compilés. Dans le cas de fichiers .java générés, il est généralement conseillé de placer le nom de la règle qui génère la règle ici plutôt que le nom du fichier lui-même. Cela permet non seulement d'améliorer la lisibilité, mais aussi de rendre la règle plus résistante aux modifications futures. En effet, si la règle qui génère différents fichiers par la suite génère d'autres fichiers, il vous suffit de corriger l'élément outs de cette règle. Vous ne devez pas répertorier la règle de génération dans deps, car il s'agit d'une règle no-op.

Les fichiers sources de type .srcjar sont décompressés et compilés. (Cela est utile si vous devez générer un ensemble de fichiers .java avec une genrule.)

Règles: si la règle (généralement genrule ou filegroup) génère l'un des fichiers répertoriés ci-dessus, ils seront utilisés de la même manière que pour les fichiers sources.

Les fichiers sources de type .properties sont traités comme des ressources.

Tous les autres fichiers sont ignorés, à condition qu'il existe au moins un fichier d'un type décrit ci-dessus. Sinon, une erreur est générée.

Cet argument est presque toujours obligatoire, sauf si vous spécifiez l'argument runtime_deps.

data

Liste des libellés ; la valeur par défaut est []

Liste des fichiers dont cette bibliothèque a besoin au moment de l'exécution. Consultez les commentaires généraux sur data dans la section Attributs classiques définis par la plupart des règles de compilation.

Lors de la création d'un java_library, Bazel ne place ces fichiers nulle part. Si les fichiers data sont des fichiers générés, Bazel les génère. Lorsque vous compilez un test qui dépend de ce java_library, Bazel copie ou associe les fichiers data dans la zone des fichiers d'exécution.

resources

Liste des libellés ; la valeur par défaut est []

Liste de fichiers de données à inclure dans un fichier JAR Java.

Les ressources peuvent être des fichiers sources ou générés.

Si des ressources sont spécifiées, elles seront regroupées dans le fichier JAR avec les fichiers .class habituels générés par la compilation. L'emplacement des ressources dans le fichier JAR est déterminé par la structure du projet. Bazel recherche d'abord la mise en page standard des répertoires de Maven (un répertoire "src" suivi d'un petit-enfant du répertoire "resources"). Si ce n'est pas le cas, Bazel recherche ensuite le répertoire de niveau supérieur nommé "java" ou "javatests" (par exemple, si une ressource se trouve sur <workspace root>/x/java/y/java/z, son chemin d'accès sera y/java/z). Cette heuristique ne peut pas être remplacée. Toutefois, l'attribut resource_strip_prefix peut être utilisé pour spécifier un autre répertoire spécifique pour les fichiers de ressources.

add_exports

Liste de chaînes ; la valeur par défaut est []

Autoriser cette bibliothèque à accéder au module ou au package donné.

Cela correspond aux indicateurs javac et JVM --add-exports=.

add_opens

Liste de chaînes ; la valeur par défaut est []

Autoriser cette bibliothèque à accéder de manière réfléchie au module ou au package donné.

Cela correspond aux indicateurs javac et JVM --add-opens=.

bootclasspath

Libellé ; la valeur par défaut est None

API restreinte, ne pas utiliser
exported_plugins

Liste des libellés ; la valeur par défaut est []

Liste de java_plugin (processeurs d'annotations, par exemple) à exporter vers les bibliothèques qui en dépendent directement.

La liste de java_plugin spécifiée sera appliquée à toute bibliothèque qui dépend directement de cette bibliothèque, comme si cette bibliothèque avait explicitement déclaré ces libellés dans plugins.

exports

Liste des libellés ; la valeur par défaut est []

Bibliothèques exportées.

Les règles listées ici les rendront disponibles pour les règles parentes, comme si les parents en dépendaient explicitement. Ce n'est pas le cas pour les deps standards (non exportés).

Résumé: Une règle X peut accéder au code dans Y s'il existe un chemin de dépendance entre elles qui commence par une arête deps suivie d'aucune, ou de plusieurs arêtes exports. Voyons quelques exemples pour illustrer cela.

Supposons que A dépend de B et que B dépend de C. Dans le cas présent, C est une dépendance transitive de A. Par conséquent, le fait de modifier les sources de C et de recompiler A permet de tout reconstruire correctement. Toutefois, A ne pourra pas utiliser de classes dans C. Pour ce faire, A doit déclarer C dans son deps, ou B peut faciliter la tâche pour A (et pour tout ce qui peut dépendre de A) en déclarant C dans son attribut exports (B).

La fermeture des bibliothèques exportées est disponible pour toutes les règles parentes directes. Prenons un exemple légèrement différent: A dépend de B, B dépend de C et D, et exporte également C, mais pas D. Maintenant, A a accès à C, mais pas à D. Maintenant, si C et D exportaient certaines bibliothèques, respectivement C' et D', A ne pourrait accéder qu'à C', mais pas à D'.

Important: Une règle exportée n'est pas une dépendance standard. Reprenons l'exemple précédent : si B exporte C et souhaite également utiliser C, il doit également le répertorier dans son propre deps.

javabuilder_jvm_flags

Liste de chaînes ; la valeur par défaut est []

API restreinte, ne pas utiliser
javacopts

Liste de chaînes ; la valeur par défaut est []

Options de compilateur supplémentaires pour cette bibliothèque. Soumis à la substitution de "Make variable" et à la tokenisation de l'interface système Bourne.

Ces options du compilateur sont transmises à javac après les options globales du compilateur.

Booléen ; la valeur par défaut est False

Indique si cette bibliothèque doit être utilisée uniquement pour la compilation et non lors de l'exécution. Utile si la bibliothèque est fournie par l'environnement d'exécution lors de l'exécution. Les API IDE pour les plug-ins IDE ou tools.jar pour tout ce qui s'exécute sur un JDK standard sont des exemples de ces bibliothèques.

Notez que neverlink = 1 n'empêche pas le compilateur d'intégrer le contenu de cette bibliothèque dans les cibles de compilation qui en dépendent, comme le permet la spécification du langage Java (par exemple, constantes static final de String ou de types primitifs). Le cas d'utilisation privilégié est donc lorsque la bibliothèque d'exécution est identique à la bibliothèque de compilation.

Si la bibliothèque d'exécution diffère de la bibliothèque de compilation, vous devez vous assurer qu'elle ne diffère que sur les emplacements que le JLS interdit d'intégrer aux compilateurs (et qui doivent être conservés pour toutes les futures versions du JLS).

plugins

Liste des libellés ; la valeur par défaut est []

Plug-ins de compilation Java à exécuter au moment de la compilation. Chaque java_plugin spécifié dans cet attribut sera exécuté à chaque fois que cette règle est créée. Une bibliothèque peut également hériter des plug-ins des dépendances qui utilisent exported_plugins. Les ressources générées par le plug-in seront incluses dans le fichier JAR résultant de cette règle.
proguard_specs

Liste des libellés ; la valeur par défaut est []

Fichiers à utiliser comme spécification ProGuard. Celles-ci décrivent l'ensemble des caractéristiques que ProGuard doit utiliser. S'il est spécifié, ils seront ajoutés à n'importe quelle cible android_binary en fonction de cette bibliothèque. Les fichiers inclus ici ne doivent comporter que des règles idempotentes, à savoir -dontnote, -dontwarn, assumenosideeffects et commençant par -keep. D'autres options ne peuvent apparaître que dans proguard_specs de android_binary, pour garantir les fusions non tautologiques.
resource_strip_prefix

Chaîne ; la valeur par défaut est ""

Préfixe de chemin d'accès à supprimer des ressources Java.

S'il est spécifié, ce préfixe de chemin d'accès est supprimé de chaque fichier dans l'attribut resources. Un fichier de ressources ne se trouve pas dans ce répertoire. S'il n'est pas spécifié (valeur par défaut), le chemin d'accès au fichier de ressources est déterminé selon la même logique que le package Java de fichiers sources. Par exemple, un fichier source dans stuff/java/foo/bar/a.txt sera situé à l'emplacement foo/bar/a.txt.

runtime_deps

Liste des libellés ; la valeur par défaut est []

Bibliothèques à mettre à la disposition du binaire final ou à effectuer des tests uniquement lors de l'exécution. Comme les deps ordinaires, ces valeurs apparaissent sur le classpath d'exécution, mais contrairement à elles, et non sur le classpath au moment de la compilation. Les dépendances nécessaires uniquement au moment de l'exécution doivent être listées ici. Les outils d'analyse des dépendances doivent ignorer les cibles qui apparaissent à la fois dans runtime_deps et deps.

java_lite_proto_library

Afficher la source de la règle
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 génère du code Java à partir de fichiers .proto.

deps doit pointer vers les règles proto_library .

Exemple :


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

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

proto_library(
    name = "bar",
)

Arguments

Attributs
name

Nom (obligatoire)

Nom unique de cette cible.

deps

Liste des libellés ; la valeur par défaut est []

Liste des règles proto_library pour lesquelles générer du code Java.

java_proto_library

Afficher la source de la règle
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 génère du code Java à partir de fichiers .proto.

deps doit pointer vers les règles proto_library .

Exemple :


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

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

proto_library(
    name = "foo_proto",
)

Arguments

Attributs
name

Nom (obligatoire)

Nom unique de cette cible.

deps

Liste des libellés ; la valeur par défaut est []

Liste des règles proto_library pour lesquelles générer du code Java.

java_test

Afficher la source de la règle
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)

Une règle java_test() compile un test Java. Un test est un wrapper binaire autour de votre code de test. La méthode principale du lanceur de test est appelée au lieu de la classe principale en cours de compilation.

Objectifs de résultats implicites

  • name.jar: archive Java.
  • name_deploy.jar: archive Java adaptée au déploiement. (créé uniquement sur demande explicite). Pour en savoir plus, consultez la description de la sortie name_deploy.jar de java_binary.

Consultez la section sur les arguments java_binary(). Cette règle accepte également tous les attributs communs à toutes les règles de test (*_test).

Exemples



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

Arguments

Attributs
name

Nom (obligatoire)

Nom unique de cette cible.

deps

Liste des libellés ; la valeur par défaut est []

Liste des autres bibliothèques à associer à la cible. Consultez les commentaires généraux sur deps dans la section Attributs classiques définis par la plupart des règles de compilation.
srcs

Liste des libellés ; la valeur par défaut est []

Liste des fichiers sources traités pour créer la cible. Cet attribut est presque toujours obligatoire (voir les exceptions ci-dessous).

Les fichiers sources de type .java sont compilés. Dans le cas de fichiers .java générés, il est généralement conseillé de placer le nom de la règle qui génère la règle ici plutôt que le nom du fichier lui-même. Cela permet non seulement d'améliorer la lisibilité, mais aussi de rendre la règle plus résistante aux modifications futures. En effet, si la règle qui génère différents fichiers par la suite génère d'autres fichiers, il vous suffit de corriger l'élément outs de cette règle. Vous ne devez pas répertorier la règle de génération dans deps, car il s'agit d'une règle no-op.

Les fichiers sources de type .srcjar sont décompressés et compilés. (Cela est utile si vous devez générer un ensemble de fichiers .java avec une genrule.)

Règles: si la règle (généralement genrule ou filegroup) génère l'un des fichiers répertoriés ci-dessus, ils seront utilisés de la même manière que pour les fichiers sources.

Cet argument est presque toujours obligatoire, sauf si un attribut main_class spécifie une classe sur le classpath d'exécution ou si vous spécifiez l'argument runtime_deps.

data

Liste des libellés ; la valeur par défaut est []

Liste des fichiers dont cette bibliothèque a besoin au moment de l'exécution. Consultez les commentaires généraux sur data dans la section Attributs standards définis par la plupart des règles de compilation.
resources

Liste des libellés ; la valeur par défaut est []

Liste de fichiers de données à inclure dans un fichier JAR Java.

Les ressources peuvent être des fichiers sources ou générés.

Si des ressources sont spécifiées, elles seront regroupées dans le fichier JAR avec les fichiers .class habituels générés par la compilation. L'emplacement des ressources dans le fichier JAR est déterminé par la structure du projet. Bazel recherche d'abord la mise en page standard des répertoires de Maven (un répertoire "src" suivi d'un petit-enfant du répertoire "resources"). Si ce n'est pas le cas, Bazel recherche ensuite le répertoire de niveau supérieur nommé "java" ou "javatests" (par exemple, si une ressource se trouve sur <workspace root>/x/java/y/java/z, son chemin d'accès sera y/java/z). Cette heuristique ne peut pas être remplacée. Toutefois, l'attribut resource_strip_prefix peut être utilisé pour spécifier un autre répertoire spécifique pour les fichiers de ressources.

add_exports

Liste de chaînes ; la valeur par défaut est []

Autoriser cette bibliothèque à accéder au module ou au package donné.

Cela correspond aux indicateurs javac et JVM --add-exports=.

add_opens

Liste de chaînes ; la valeur par défaut est []

Autoriser cette bibliothèque à accéder de manière réfléchie au module ou au package donné.

Cela correspond aux indicateurs javac et JVM --add-opens=.

bootclasspath

Libellé ; la valeur par défaut est None

API restreinte, ne pas utiliser
classpath_resources

Liste des libellés ; la valeur par défaut est []

N'UTILISEZ PAS CETTE OPTION, SAUF SI il n'y en a aucune AUTRE)

Liste des ressources qui doivent être situées à la racine de l'arborescence Java. Le seul objectif de cet attribut est d'accepter les bibliothèques tierces qui exigent que leurs ressources soient trouvées sur le chemin de classe avec la valeur "myconfig.xml" exacte. Elle n'est autorisée que sur les binaires, et non sur les bibliothèques, en raison des risques de conflits d'espaces de noms.

create_executable

Booléen ; la valeur par défaut est True

Obsolète, utilisez plutôt java_single_jar.
deploy_manifest_lines

Liste de chaînes ; la valeur par défaut est []

Liste de lignes à ajouter au fichier META-INF/manifest.mf généré pour la cible *_deploy.jar. Le contenu de cet attribut n'est pas soumis au remplacement de "Make variable".
javacopts

Liste de chaînes ; la valeur par défaut est []

Options de compilateur supplémentaires pour ce binaire. Soumis à la substitution de "Make variable" et à la tokenisation de l'interface système Bourne.

Ces options du compilateur sont transmises à javac après les options globales du compilateur.

jvm_flags

Liste de chaînes ; la valeur par défaut est []

Liste d'indicateurs à intégrer dans le script wrapper généré pour l'exécution de ce binaire. Soumis à la substitution de $(location) et à la méthode "Make variable", ainsi qu'à la tokenisation de l'interface système Bourne.

Le script wrapper d'un binaire Java inclut une définition de CLASSPATH (pour trouver tous les fichiers JAR dépendants) et appelle l'interpréteur Java approprié. La ligne de commande générée par le script wrapper inclut le nom de la classe principale suivi d'un élément "$@" afin que vous puissiez transmettre d'autres arguments après le nom de classe. Toutefois, les arguments destinés à être analysés par la JVM doivent être spécifiés avant le nom de classe sur la ligne de commande. Le contenu de jvm_flags est ajouté au script du wrapper avant que le nom de classe ne soit listé.

Notez que cet attribut n'a aucun effet sur les sorties *_deploy.jar.

launcher

Libellé ; la valeur par défaut est None

Spécifiez un binaire qui sera utilisé pour exécuter votre programme Java à la place du programme bin/java normal inclus avec le JDK. La cible doit être une cc_binary. Tout cc_binary qui implémente l' API d'appel Java peut être spécifié en tant que valeur pour cet attribut.

Par défaut, Bazel utilise le lanceur JDK standard (bin/java ou java.exe).

L'indicateur Bazel --java_launcher associé n'affecte que les cibles java_binary et java_test qui n'ont pas spécifié d'attribut launcher.

Notez que vos dépendances natives (C++, SWIG, JNI) seront compilées différemment selon que vous utilisez le lanceur JDK ou un autre lanceur:

  • Si vous utilisez le lanceur JDK standard (par défaut), les dépendances natives sont créées sous la forme d'une bibliothèque partagée nommée {name}_nativedeps.so, où {name} est l'attribut name de cette règle java_binary. Dans cette configuration, le code inutilisé n'est pas supprimé par l'éditeur de liens.
  • Si vous utilisez un autre lanceur d'applications, les dépendances natives (C++) sont associées de manière statique à un binaire nommé {name}_nativedeps, où {name} est l'attribut name de cette règle java_binary. Dans ce cas, l'éditeur de liens supprime tout code qu'il estime inutilisé du binaire obtenu, ce qui signifie que tout code C++ accessible uniquement via JNI ne peut pas être associé, sauf si cette cible cc_library spécifie alwayslink = 1.

Lorsque vous utilisez un lanceur d'applications autre que le lanceur JDK par défaut, le format de la sortie *_deploy.jar change. Pour en savoir plus, consultez la documentation principale sur java_binary.

main_class

Chaîne ; la valeur par défaut est ""

Nom de la classe avec la méthode main() à utiliser comme point d'entrée. Si une règle utilise cette option, elle n'a pas besoin de liste srcs=[...]. Ainsi, cet attribut permet de créer un exécutable à partir d'une bibliothèque Java contenant déjà une ou plusieurs méthodes main().

La valeur de cet attribut est un nom de classe et non un fichier source. La classe doit être disponible au moment de l'exécution: elle peut être compilée par cette règle (à partir de srcs) ou fournie par des dépendances directes ou transitives (via runtime_deps ou deps). Si la classe n'est pas disponible, le binaire échouera au moment de l'exécution, et il n'y a pas de contrôle de la compilation.

Booléen ; la valeur par défaut est False

plugins

Liste des libellés ; la valeur par défaut est []

Plug-ins de compilation Java à exécuter au moment de la compilation. Chaque java_plugin spécifié dans cet attribut sera exécuté à chaque fois que cette règle est créée. Une bibliothèque peut également hériter des plug-ins des dépendances qui utilisent exported_plugins. Les ressources générées par le plug-in seront incluses dans le fichier JAR résultant de cette règle.
resource_strip_prefix

Chaîne ; la valeur par défaut est ""

Préfixe de chemin d'accès à supprimer des ressources Java.

S'il est spécifié, ce préfixe de chemin d'accès est supprimé de chaque fichier dans l'attribut resources. Un fichier de ressources ne se trouve pas dans ce répertoire. S'il n'est pas spécifié (valeur par défaut), le chemin d'accès au fichier de ressources est déterminé selon la même logique que le package Java de fichiers sources. Par exemple, un fichier source dans stuff/java/foo/bar/a.txt sera situé à l'emplacement foo/bar/a.txt.

runtime_deps

Liste des libellés ; la valeur par défaut est []

Bibliothèques à mettre à la disposition du binaire final ou à effectuer des tests uniquement lors de l'exécution. Comme les deps ordinaires, ces valeurs apparaissent sur le classpath d'exécution, mais contrairement à elles, et non sur le classpath au moment de la compilation. Les dépendances nécessaires uniquement au moment de l'exécution doivent être listées ici. Les outils d'analyse des dépendances doivent ignorer les cibles qui apparaissent à la fois dans runtime_deps et deps.
stamp

Entier ; la valeur par défaut est 0

Indique s'il faut encoder les informations de compilation dans le binaire. Valeurs possibles :
  • stamp = 1: permet toujours d'ajouter les informations de compilation dans le binaire, même dans les compilations --nostamp. Ce paramètre doit être évité, car il peut éliminer la mise en cache à distance du binaire et toutes les actions en aval qui en dépendent.
  • stamp = 0: remplace toujours les informations de compilation par des valeurs constantes. Cela permet une bonne mise en cache des résultats de compilation.
  • stamp = -1: l'intégration des informations de compilation est contrôlée par l'indicateur --[no]stamp.

Les binaires estampés ne sont pas recréés, sauf si leurs dépendances changent.

test_class

Chaîne ; la valeur par défaut est ""

Classe Java à charger par le lanceur de test.

Par défaut, si cet argument n'est pas défini, l'ancien mode est utilisé et les arguments de test sont utilisés à la place. Définissez l'option --nolegacy_bazel_java_test pour ne pas utiliser le premier argument.

Cet attribut spécifie le nom d'une classe Java à exécuter par ce test. Il est rare d'avoir besoin de définir cela. Si cet argument est omis, il sera déduit à l'aide de l'élément name de la cible et de son chemin d'accès relatif à la racine de la source. Si le test se trouve en dehors d'une racine source connue, Bazel signale une erreur si test_class n'est pas défini.

Pour JUnit3, la classe de test doit être une sous-classe de junit.framework.TestCase ou disposer d'une méthode suite() statique publique qui renvoie un junit.framework.Test (ou une sous-classe de Test). Pour JUnit4, la classe doit être annotée avec org.junit.runner.RunWith.

Cet attribut permet à plusieurs règles java_test de partager le même Test (TestCase, TestSuite, etc.). En général, des informations supplémentaires lui sont transmises (par exemple, via jvm_flags=['-Dkey=value']) de sorte que son comportement diffère dans chaque cas (par exemple, exécuter un sous-ensemble différent de tests). Cet attribut permet également d'utiliser des tests Java en dehors de l'arborescence javatests.

use_launcher

Booléen ; la valeur par défaut est True

Indique si le binaire doit utiliser un lanceur personnalisé.

Si cet attribut est défini sur "false", l'attribut launcher et l'indicateur --java_launcher associé seront ignorés pour cette cible.

use_testrunner

Booléen ; la valeur par défaut est True

Utilisez la classe du lanceur de test (com.google.testing.junit.runner.BazelTestRunner par défaut) comme point d'entrée principal d'un programme Java et fournissez la classe de test au lanceur de test en tant que valeur de la propriété système bazel.test_suite.
Vous pouvez utiliser cette option pour ignorer le comportement par défaut, qui consiste à utiliser le lanceur de test pour les règles java_test, et non pour les règles java_binary. Il est peu probable que vous le fassiez. Une utilisation est possible pour les règles AllTest appelées par une autre règle (par exemple, pour configurer une base de données avant d'exécuter les tests). La règle AllTest doit être déclarée en tant que java_binary, mais doit toujours utiliser le lanceur de test comme point d'entrée principal. Le nom d'une classe de lanceur de test peut être remplacé par l'attribut main_class.

java_package_configuration

Afficher la source de la règle
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)

Configuration à appliquer à un ensemble de packages. Les configurations peuvent être ajoutées aux java_toolchain.javacoptss.

Exemple :



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


Arguments

Attributs
name

Nom (obligatoire)

Nom unique de cette cible.

data

Liste des libellés ; la valeur par défaut est []

Liste des fichiers dont cette configuration a besoin au moment de l'exécution.
javacopts

Liste de chaînes ; la valeur par défaut est []

Indicateurs de compilation Java
output_licenses

Liste de chaînes ; la valeur par défaut est []

packages

Liste des libellés ; la valeur par défaut est []

Ensemble de propriétés package_group auxquelles la configuration doit être appliquée.

java_plugin

Afficher la source de la règle
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 définit les plug-ins pour le compilateur Java exécuté par Bazel. Pour le moment, les processeurs d'annotations sont les seuls types de plug-ins compatibles. Une règle java_library ou java_binary peut exécuter des plug-ins en fonction de ceux-ci via l'attribut plugins. Un java_library peut également exporter automatiquement des plug-ins vers des bibliothèques qui en dépendent directement à l'aide de exported_plugins.

Objectifs de résultats implicites

  • libname.jar: archive Java.

Les arguments sont identiques à java_library, à l'exception de l'ajout de l'argument processor_class.

Arguments

Attributs
name

Nom (obligatoire)

Nom unique de cette cible.

deps

Liste des libellés ; la valeur par défaut est []

Liste des bibliothèques à associer à cette bibliothèque. Consultez les commentaires généraux sur deps dans la section Attributs classiques définis par la plupart des règles de compilation.

Les fichiers JAR créés par les règles java_library répertoriées dans deps seront dans le classpath au moment de la compilation de cette règle. De plus, la fermeture transitive de leurs deps, runtime_deps et exports se fera sur le classpath d'exécution.

En revanche, les cibles de l'attribut data sont incluses dans les fichiers d'exécution, mais ni dans le classpath au moment de la compilation, ni dans le classpath d'exécution.

srcs

Liste des libellés ; la valeur par défaut est []

Liste des fichiers sources traités pour créer la cible. Cet attribut est presque toujours obligatoire (voir les exceptions ci-dessous).

Les fichiers sources de type .java sont compilés. Dans le cas de fichiers .java générés, il est généralement conseillé de placer le nom de la règle qui génère la règle ici plutôt que le nom du fichier lui-même. Cela permet non seulement d'améliorer la lisibilité, mais aussi de rendre la règle plus résistante aux modifications futures. En effet, si la règle qui génère différents fichiers par la suite génère d'autres fichiers, il vous suffit de corriger l'élément outs de cette règle. Vous ne devez pas répertorier la règle de génération dans deps, car il s'agit d'une règle no-op.

Les fichiers sources de type .srcjar sont décompressés et compilés. (Cela est utile si vous devez générer un ensemble de fichiers .java avec une genrule.)

Règles: si la règle (généralement genrule ou filegroup) génère l'un des fichiers répertoriés ci-dessus, ils seront utilisés de la même manière que pour les fichiers sources.

Les fichiers sources de type .properties sont traités comme des ressources.

Tous les autres fichiers sont ignorés, à condition qu'il existe au moins un fichier d'un type décrit ci-dessus. Sinon, une erreur est générée.

Cet argument est presque toujours obligatoire, sauf si vous spécifiez l'argument runtime_deps.

data

Liste des libellés ; la valeur par défaut est []

Liste des fichiers dont cette bibliothèque a besoin au moment de l'exécution. Consultez les commentaires généraux sur data dans la section Attributs classiques définis par la plupart des règles de compilation.

Lors de la création d'un java_library, Bazel ne place ces fichiers nulle part. Si les fichiers data sont des fichiers générés, Bazel les génère. Lorsque vous compilez un test qui dépend de ce java_library, Bazel copie ou associe les fichiers data dans la zone des fichiers d'exécution.

resources

Liste des libellés ; la valeur par défaut est []

Liste de fichiers de données à inclure dans un fichier JAR Java.

Les ressources peuvent être des fichiers sources ou générés.

Si des ressources sont spécifiées, elles seront regroupées dans le fichier JAR avec les fichiers .class habituels générés par la compilation. L'emplacement des ressources dans le fichier JAR est déterminé par la structure du projet. Bazel recherche d'abord la mise en page standard des répertoires de Maven (un répertoire "src" suivi d'un petit-enfant du répertoire "resources"). Si ce n'est pas le cas, Bazel recherche ensuite le répertoire de niveau supérieur nommé "java" ou "javatests" (par exemple, si une ressource se trouve sur <workspace root>/x/java/y/java/z, son chemin d'accès sera y/java/z). Cette heuristique ne peut pas être remplacée. Toutefois, l'attribut resource_strip_prefix peut être utilisé pour spécifier un autre répertoire spécifique pour les fichiers de ressources.

add_exports

Liste de chaînes ; la valeur par défaut est []

Autoriser cette bibliothèque à accéder au module ou au package donné.

Cela correspond aux indicateurs javac et JVM --add-exports=.

add_opens

Liste de chaînes ; la valeur par défaut est []

Autoriser cette bibliothèque à accéder de manière réfléchie au module ou au package donné.

Cela correspond aux indicateurs javac et JVM --add-opens=.

bootclasspath

Libellé ; la valeur par défaut est None

API restreinte, ne pas utiliser
generates_api

Booléen ; la valeur par défaut est False

Cet attribut marque les processeurs d'annotations qui génèrent le code de l'API.

Si une règle utilise un processeur d'annotations générant des API, les autres règles qui dépendent de celle-ci ne peuvent faire référence au code généré que si leurs actions de compilation sont planifiées après la règle de génération. Cet attribut indique à Bazel d'introduire des contraintes de planification lorsque l'option --java_header_compilation est activée.

AVERTISSEMENT: Cet attribut affecte les performances de compilation. Utilisez-le uniquement si nécessaire.

javabuilder_jvm_flags

Liste de chaînes ; la valeur par défaut est []

API restreinte, ne pas utiliser
javacopts

Liste de chaînes ; la valeur par défaut est []

Options de compilateur supplémentaires pour cette bibliothèque. Soumis à la substitution de "Make variable" et à la tokenisation de l'interface système Bourne.

Ces options du compilateur sont transmises à javac après les options globales du compilateur.

Booléen ; la valeur par défaut est False

Indique si cette bibliothèque doit être utilisée uniquement pour la compilation et non lors de l'exécution. Utile si la bibliothèque est fournie par l'environnement d'exécution lors de l'exécution. Les API IDE pour les plug-ins IDE ou tools.jar pour tout ce qui s'exécute sur un JDK standard sont des exemples de ces bibliothèques.

Notez que neverlink = 1 n'empêche pas le compilateur d'intégrer le contenu de cette bibliothèque dans les cibles de compilation qui en dépendent, comme le permet la spécification du langage Java (par exemple, constantes static final de String ou de types primitifs). Le cas d'utilisation privilégié est donc lorsque la bibliothèque d'exécution est identique à la bibliothèque de compilation.

Si la bibliothèque d'exécution diffère de la bibliothèque de compilation, vous devez vous assurer qu'elle ne diffère que sur les emplacements que le JLS interdit d'intégrer aux compilateurs (et qui doivent être conservés pour toutes les futures versions du JLS).

output_licenses

Liste de chaînes ; la valeur par défaut est []

plugins

Liste des libellés ; la valeur par défaut est []

Plug-ins de compilation Java à exécuter au moment de la compilation. Chaque java_plugin spécifié dans cet attribut sera exécuté à chaque fois que cette règle est créée. Une bibliothèque peut également hériter des plug-ins des dépendances qui utilisent exported_plugins. Les ressources générées par le plug-in seront incluses dans le fichier JAR résultant de cette règle.
processor_class

Chaîne ; la valeur par défaut est ""

La classe du processeur est le type complet de la classe que le compilateur Java doit utiliser comme point d'entrée du processeur d'annotations. Si elle n'est pas spécifiée, cette règle ne contribuera pas au traitement des annotations du compilateur Java, mais son classpath d'exécution sera toujours inclus dans le chemin d'accès au processeur d'annotations du compilateur. (Ceci est principalement destiné à être utilisé par les plug-ins susceptibles d'entraîner des erreurs, qui sont chargés à partir du chemin d'accès du processeur d'annotations à l'aide de java.util.ServiceLoader.)
proguard_specs

Liste des libellés ; la valeur par défaut est []

Fichiers à utiliser comme spécification ProGuard. Celles-ci décrivent l'ensemble des caractéristiques que ProGuard doit utiliser. S'il est spécifié, ils seront ajoutés à n'importe quelle cible android_binary en fonction de cette bibliothèque. Les fichiers inclus ici ne doivent comporter que des règles idempotentes, à savoir -dontnote, -dontwarn, assumenosideeffects et commençant par -keep. D'autres options ne peuvent apparaître que dans proguard_specs de android_binary, pour garantir les fusions non tautologiques.
resource_strip_prefix

Chaîne ; la valeur par défaut est ""

Préfixe de chemin d'accès à supprimer des ressources Java.

S'il est spécifié, ce préfixe de chemin d'accès est supprimé de chaque fichier dans l'attribut resources. Un fichier de ressources ne se trouve pas dans ce répertoire. S'il n'est pas spécifié (valeur par défaut), le chemin d'accès au fichier de ressources est déterminé selon la même logique que le package Java de fichiers sources. Par exemple, un fichier source dans stuff/java/foo/bar/a.txt sera situé à l'emplacement foo/bar/a.txt.

java_runtime

Afficher la source de la règle
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)

Spécifie la configuration d'un environnement d'exécution Java.

Exemple :



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


Arguments

Attributs
name

Nom (obligatoire)

Nom unique de cette cible.

srcs

Liste des libellés ; la valeur par défaut est []

Tous les fichiers dans l'environnement d'exécution.
default_cds

Libellé ; la valeur par défaut est None

Archive CDS par défaut pour java_runtime hermétique. Lorsque le mode Hermétique est activé pour une cible java_binary et que la cible ne fournit pas sa propre archive CDS en spécifiant l'attribut classlist, le CDS par défaut java_runtime est empaqueté dans le fichier JAR de déploiement hermétique.
hermetic_srcs

Liste des libellés ; la valeur par défaut est []

Fichiers de l'environnement d'exécution nécessaires aux déploiements hermétiques.
hermetic_static_libs

Liste des libellés ; la valeur par défaut est []

Bibliothèques associées de manière statique au lanceur pour les déploiements hermétiques
java

Libellé ; la valeur par défaut est None

Chemin d'accès à l'exécutable Java.
java_home

Chaîne ; la valeur par défaut est ""

Chemin d'accès à la racine de l'environnement d'exécution. Soumis à la substitution de la variable"Make". Si ce chemin d'accès est absolu, la règle indique un environnement d'exécution Java non hermétique avec un chemin d'accès bien connu. Dans ce cas, les attributs srcs et java doivent être vides.
lib_ct_sym

Libellé ; la valeur par défaut est None

Fichier lib/ct.sym requis pour la compilation avec --release. Si ce champ n'est pas spécifié et qu'il existe exactement un fichier dans srcs dont le chemin d'accès se termine par /lib/ct.sym, ce fichier est utilisé.
lib_modules

Libellé ; la valeur par défaut est None

Fichier lib/modules nécessaire pour les déploiements hermétiques.
output_licenses

Liste de chaînes ; la valeur par défaut est []

version

Entier ; la valeur par défaut est 0

Version de l'environnement d'exécution Java. C'est-à-dire l'entier renvoyé par Runtime.version().feature().

java_toolchain

Afficher la source de la règle
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)

Spécifie la configuration du compilateur Java. La chaîne d'outils à utiliser peut être modifiée via l'argument --java_launcher. Normalement, vous ne devriez pas écrire ce type de règles, sauf si vous souhaitez régler votre compilateur Java.

Exemples

Voici un exemple simple:



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

Arguments

Attributs
name

Nom (obligatoire)

Nom unique de cette cible.

android_lint_data

Liste des libellés ; la valeur par défaut est []

Étiquettes d'outils disponibles pour l'expansion de libellés dans android_lint_jvm_opts.
android_lint_jvm_opts

Liste de chaînes ; la valeur par défaut est []

Liste des arguments de la JVM lors de l'appel d'Android Lint.
android_lint_opts

Liste de chaînes ; la valeur par défaut est []

Liste des arguments Android Lint.
android_lint_package_configuration

Liste des libellés ; la valeur par défaut est []

Configuration Android Lint à appliquer aux groupes de packages spécifiés.
android_lint_runner

Libellé ; la valeur par défaut est None

Étiquette de l'exécuteur Android Lint, le cas échéant.
bootclasspath

Liste des libellés ; la valeur par défaut est []

Entrées Java bootclasspath cibles. Correspond à l'indicateur -bootclasspath de javac.
compatible_javacopts

null; default is {}

API interne, ne pas utiliser
deps_checker

Libellé ; la valeur par défaut est None

Étiquette du fichier JAR de déploiement ImportDepsChecker.
forcibly_disable_header_compilation

Booléen ; la valeur par défaut est False

Ignore --java_header_compilation pour désactiver la compilation d'en-têtes sur les plates-formes non compatibles, par exemple JDK 7 Bazel.
genclass

Libellé ; la valeur par défaut est None

Étiquette du fichier JAR de déploiement de GenClass.
header_compiler

Libellé ; la valeur par défaut est None

Étiquette du compilateur d'en-tête. Obligatoire si l'option --java_header_compilation est activée.
header_compiler_builtin_processors

Liste de chaînes ; la valeur par défaut est []

API interne, ne pas utiliser
header_compiler_direct

Libellé ; la valeur par défaut est None

Étiquette facultative du compilateur d'en-tête à utiliser pour les actions de classpath directes qui n'incluent aucun processeur d'annotations générant des API.

Cet outil ne prend pas en charge le traitement des annotations.

ijar

Libellé ; la valeur par défaut est None

Étiquette de l'exécutable ijar.
jacocorunner

Libellé ; la valeur par défaut est None

Étiquette du fichier JAR de déploiement JacocoCoverageRunner.
java_runtime

Libellé ; la valeur par défaut est None

java_runtime à utiliser avec cette chaîne d'outils. La valeur par défaut est java_runtime dans la configuration d'exécution.
javabuilder

Libellé ; la valeur par défaut est None

Étiquette du fichier JAR de déploiement de JavaBuilder.
javabuilder_data

Liste des libellés ; la valeur par défaut est []

Étiquettes de données disponibles pour l'extension de libellés dans javabuilder_jvm_opts.
javabuilder_jvm_opts

Liste de chaînes ; la valeur par défaut est []

Liste des arguments de la JVM lors de l'appel de JavaBuilder.
javac_supports_multiplex_workers

Booléen ; la valeur par défaut est True

"True" si JavaBuilder prend en charge l'exécution en tant que worker persistant multiplex, false dans le cas contraire.
javac_supports_worker_cancellation

Booléen ; la valeur par défaut est True

"True" si JavaBuilder prend en charge l'annulation des nœuds de calcul persistants, "false" dans le cas contraire.
javac_supports_worker_multiplex_sandboxing

Booléen ; la valeur par défaut est False

"True" si JavaBuilder prend en charge l'exécution en tant que nœud de calcul persistant multiplex avec bac à sable, "false" dans le cas contraire.
javac_supports_workers

Booléen ; la valeur par défaut est True

"True" si JavaBuilder prend en charge l'exécution en tant que worker persistant, "false" dans le cas contraire.
javacopts

Liste de chaînes ; la valeur par défaut est []

Liste des arguments supplémentaires pour le compilateur Java. Veuillez consulter la documentation du compilateur Java pour obtenir la liste complète des indicateurs de compilation Java possibles.
jspecify_implicit_deps

Libellé ; la valeur par défaut est None

Expérimental, ne pas utiliser !
jspecify_javacopts

Liste de chaînes ; la valeur par défaut est []

Expérimental, ne pas utiliser !
jspecify_packages

Liste des libellés ; la valeur par défaut est []

Expérimental, ne pas utiliser !
jspecify_processor

Libellé ; la valeur par défaut est None

Expérimental, ne pas utiliser !
jspecify_processor_class

Chaîne ; la valeur par défaut est ""

Expérimental, ne pas utiliser !
jspecify_stubs

Liste des libellés ; la valeur par défaut est []

Expérimental, ne pas utiliser !
jvm_opts

Liste de chaînes ; la valeur par défaut est []

Liste des arguments de la JVM lors de l'appel du compilateur Java. Veuillez consulter la documentation sur les machines virtuelles Java pour obtenir la liste complète des indicateurs possibles pour cette option.
misc

Liste de chaînes ; la valeur par défaut est []

Obsolète: utiliser javacopts à la place
oneversion

Libellé ; la valeur par défaut est None

Étiquette du binaire d'application à une version.
oneversion_allowlist_for_tests

Libellé ; la valeur par défaut est None

Libellé de la liste d'autorisation d'une seule version pour les tests.
oneversion_whitelist

Libellé ; la valeur par défaut est None

Libellé de la liste d'autorisation d'une seule version.
package_configuration

Liste des libellés ; la valeur par défaut est []

Configuration à appliquer aux groupes de packages spécifiés.
proguard_allowlister

Libellé ; la valeur par défaut est "@bazel_tools//tools/jdk:proguard_whitelister"

Libellé de la liste d'autorisation ProGuard.
reduced_classpath_incompatible_processors

Liste de chaînes ; la valeur par défaut est []

API interne, ne pas utiliser
singlejar

Libellé ; la valeur par défaut est None

Étiquette du fichier JAR de déploiement SingleJar.
source_version

Chaîne ; la valeur par défaut est ""

La version source Java (par exemple, "6" ou "7"). Il spécifie les ensembles de structures de code autorisés dans le code source Java.
target_version

Chaîne ; la valeur par défaut est ""

Version cible Java (par exemple, "6" ou "7"). Il spécifie l'environnement d'exécution Java pour lequel la classe doit être compilée.
timezone_data

Libellé ; la valeur par défaut est None

Étiquette d'un fichier JAR de ressources contenant des données de fuseau horaire. Si ce champ est défini, les données de fuseau horaire sont ajoutées en tant que dépendance implicite d'exécution de toutes les règles java_binary.
tools

Liste des libellés ; la valeur par défaut est []

Étiquettes d'outils disponibles pour l'expansion de libellés dans jvm_opts.
turbine_data

Liste des libellés ; la valeur par défaut est []

Étiquettes de données disponibles pour l'expansion des libellés dans turbine_jvm_opts.
turbine_jvm_opts

Liste de chaînes ; la valeur par défaut est []

Liste des arguments de la JVM lors de l'appel de turbine.
xlint

Liste de chaînes ; la valeur par défaut est []

Liste d'avertissements à ajouter ou à supprimer dans la liste par défaut. Il fait précéder d'un tiret pour le supprimer. Pour plus d'informations, consultez la documentation Javac sur les options -Xlint.