Apache Maven par Michel VONGVILAY

V. Goals et plugin

Les goals de Maven sont extensibles et réutilisables. Mais avant de se lancer corps et ames sur l'écriture de ses propres goals, le mieux serait de vérifier les plugins existants sur le site de Maven ou ${MAVEN_HOME}/plugins ou http://maven-plugins.sourceforge.net/.

Si aucun de ces plugins ne correspond à vos besoins, Maven vous donne deux possibilités :

  1. D'étendre les goals standards avec les tag <preGoal> ou <postGoal>
  2. D'écrire vos propres goals

Dans les deux cas, le fichier spécial « maven.xml  » est utilisé. Il se situe dans le répertoire racine du projet.
Le language utilisé est le Jelly et le Ant task :

  1. http://maven.apache.org/reference/maven-jelly-tags/tags.html
  2. http://ant.apache.org/manual/tasksoverview.html

V.1 Ecrire des goals

V.1.1 Structure du fichier 'maven.xml' et création d'un goal

Voici la structure que doit avoir le fichier maven.xml :


         <project
          default="nightly-build"
          xmlns:j="jelly:core"
          xmlns:u="jelly:util">

          <goal name="nightly-build">
            <!-- Any ant task, or jelly tags can go here thanks to jeez -->
            <j:set var="goals" value="compile,test" />
            <mkdir dir="${maven.build.dir}" />
            <u:tokenize var="goals" delim=",">${goals}</u:tokenize>
            <j:forEach items="${goals}" var="goal" indexVar="goalNumber">
              Now attaining goal number ${goalNumber}, which is ${goal}
              <attainGoal name="${goal}" />
            </j:forEach>
          </goal>

        </project>
      

default="nightly-build"
Cet attribut définit le goal par défaut à exécuter si maven n'a pas d'argument
xmlns:j="jelly:core"
Un namespace. Tous les tags préfixés par j seront rapportés à jelly:core
<mkdir dir="${maven.build.dir}"/>
exécute le Ant task mkdir

La définition d'un goal peut surcharger d'autre goals de meme nom. Si un projet contient des sous-projets, alors ils hériteront de ces goals.

V.1.2 Extension des goals

Maven met à disposition deux tags spéciaux :

  1. <preGoal> définit les règles à exécuter avant le goal spécifié
  2. <postGoal> définit les règles à exécuter après le goal spécifié

Exemple de <preGoal> :


        <preGoal name="java:compile">
          <attainGoal name="xdoclet:ejbdoclet"/>
        </preGoal>
      

V.1.3 Utilisation d'une task Ant avec Maven

Il suffit d'utiliser goal au lieu de target et attainGoal au lieu de antcall dans le fichier maven.xml. Ici attainGoal exécute directement le goal spécifié. Ensuite on peut appeler une tâche directement avec maven xxx (xxx etant le nom de la tâche).


        <goal name="copy:ressources">
          <copy todir="./target/classes">
            <fileset dir="./src">
              <exclude name="**/*.java"/>
            </fileset>
          </copy>
        </goal>
        <goal name="generate:all">
          <attainGoal name="copy:ressources"/>
          <attainGoal name="site:generate"/>
        </goal>
      


        maven copy:ressources
        maven generate:all
      


<< page précédente page suivante >>

Valid XHTML 1.0!