Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide
Consultez :
  • Les documents de reference sur le projet original
  • Les sources de la traduction fr sur GitHub
  • maven


    11.4.5. Annotations de Mojo

    Dans le plugin first-maven-plugin, vous n'avez pas écrit de descripteur de plugin, Maven s'est chargé d'en générer un pour vous. Pour cela, Maven utilise les informations du POM du projet et une liste d'annotations présentes dans votre classe EchoMojo. La classe EchoMojo contient une seule annotation : @goal. Voici la liste complète des annotations utilisables dans un Mojo.

    @goal <goalName>

    C'est la seule annotation obligatoire, elle donne un nom unique au goal que vous êtes en train d'écrire.

    @requiresDependencyResolution <requireScope>

    Marque le mojo comme un mojo qui nécessite la résolution des dépendances d'un certain scope (explicite ou implicite). Les valeurs autorisées sont : compile, runtime ou test. Par exemple, si la valeur de cette annotation est passée à test, Maven ne peut exécuter ce Mojo qu'une fois que les dépendances du scope test sont résolues.

    @requiresProject (true|false)

    Marque ce goal comme goal devant être exécuté à l'intérieur d'un projet. La valeur par défaut est true. À l'opposé, certains plugins comme le plugin Archetype ne le sont pas : ils n'ont pas besoin d'un POM pour s'exécuter.

    @requiresReports (true|false)

    Si vous voulez créer un plugin qui repose sur la présence de rapports, affectez cette annotation à true. La valeur par défaut de ce flag est false.

    @aggregator (true|false)

    Un goal possédant cette propriété affectée à true est supposé ne s'exécuter qu'une seule fois lors d'une exécution de Maven. Cette propriété a été créée pour donner aux développeurs la possibilité d'agréger la sortie d'une série de builds. Par exemple, si vous voulez créer un plugin qui effectue un rapport consolidant la sortie des projets d'un build. Un goal avec aggregator affecté à true ne devrait s'exécuter qu'à partir du projet de plus haut-niveau d'un build Maven. Sa valeur par défaut est false.

    @requiresOnline (true|false)

    Spécifie si un goal donné peut s'exécuter en mode hors connexion. Si un goal nécessite l'utilisation de ressources réseau et que ce flag est activé, Maven affichera une erreur si le goal est exécuté en mode hors connexion. La valeur par défaut pour cette propriété est false.

    @requiresDirectInvocation

    Si vous affectez cette propriété à true, le goal pourra seulement s'exécuter via un appel direct en ligne de commande par un utilisateur. Si quelqu'un essaye de rattacher ce goal à une phase du cycle de vie dans un POM, Maven affichera un message d'erreur. La valeur par défaut pour est propriété est false.

    @phase <phaseName>

    Cette annotation spécifie la phase par défaut d'un goal. Si vous n'avez pas spécifié de phase pour exécuter ce goal, Maven rattachera celui-ci à la phase définie par cette annotation.

    @execute [goal=goalName|phase=phaseName [lifecycle=lifecycleId]]

    Cette annotation peut être utilisée de différentes manières. Si une phase est fournie, Maven exécutera un cycle de vie parallèle en fin d'une phase spécifique. Le résultat de cette exécution parallèle est rendu disponible dans la propriété Maven ${executedProperty}.

    La seconde manière d'utiliser cette annotation est de spécifier explicitement un goal en utilisant la notation prefix:goal. Lorsque vous spécifiez un goal, Maven exécute celui-ci dans un environnement parallèle, qui n'affecte pas le build Maven courant.

    La troisième manière d'utiliser cette annotation est de spécifier une phase dans un cycle de vie alternatif en utilisant un identifiant de cycle de vie.

    @execute phase="package" lifecycle="zip"
    @execute phase="compile"
    @execute goal="zip:zip"

    Si vous regardez le code source du EchoMojo, vous noterez que Maven n'utilise pas des annotations standards au format Java 5. À la place, il utilise les Commons Attributes. Commons Attributes fournissait un moyen d'utiliser des annotations avant qu'elles ne fassent partie intégrante des spécifications Java. Pourquoi ne pas utiliser les annotations Java 5 ? Maven ne les utilise pas car il a été conçu pour des JVMs pré-Java 5. Comme Maven désire rester compatible avec les versions antérieures de Java, il ne peut pas utiliser les fonctionnalités disponibles dans Java 5.