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 :
- D'étendre les goals standards avec les tag
<preGoal>
ou<postGoal>
- 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 :
- http://maven.apache.org/reference/maven-jelly-tags/tags.html
- 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 :
- <preGoal> définit les règles à exécuter avant le goal spécifié
- <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 >> |