Écrivez vos descripteurs Maven avec Gant
Gant est un outil de construction au dessus de Ant avec la syntaxe du langage dynamique Groovy. Il permet en autre, d’écrire des scripts Ant en langage Groovy. Un des avantages est la flexibilité d’écriture du processus de construction, contrairement au XML de ANT qui peut devenir très vite illisible et non maintenable.
Maven, outil de construction très populaire et très utilisé, a le bénéfice des conventions en proposant une structure de répertoire commune et un cycle de vie composé d’une séquence de phases où chaque phase exécute un ensemble de plugins encapsulant la logique de construction.
La plupart des plugins Maven sont écrits en Java.
Il est possible d’écrire ces plugins Maven en langage Groovy avec le plugin “groovy-maven-plugin” :
-
<plugin>
-
<groupId>org.codehaus.mojo.groovy</groupId>
-
<artifactId>groovy-maven-plugin</artifactId>
-
<version>1.0-beta-3</version>
-
<extensions>true</extensions>
-
<executions>
-
<execution>
-
<goals>
-
<goal>generateStubs</goal>
-
<goal>compile</goal>
-
<goal>generateTestStubs</goal>
-
<goal>testCompile</goal>
-
</goals>
-
</execution>
-
</executions>
-
</plugin>
Néanmoins, Maven manque de flexibilité dans l’écriture de la logique de construction à travers ces descripteurs (pom.xml) écrit en XML. Et malgré les conventions, les descripteurs Maven deviennent en pratique très vite complexes et difficilement lisibles.
Gant peut apporter une solution élégante. Voici le descripteur d’un projet Maven écrit avec Gant :
-
projectVersion = ‘1.0′
-
includeTargets ** gant.targets.Maven * [
-
groupId : ‘com.zenika.formatio n’ ,
-
artifactId : ‘resanet-tools’ ,
-
version : projectVersion ,
-
packaging : ‘jar’,
-
javaCompileProperties : [ source : ‘1.5’ , target : ‘1.5’ , debug : ‘true’ ] ,
-
compileDependencies : [
-
[ groupId : ‘log4j’ , artifactId : ‘log4j’ , version : ‘1.2.14’]
-
] ,
-
testDependencies : [
-
[ groupId : ‘junit’ , artifactId : ‘junit’ , version : ‘3.8.1’ ]
-
] ,
-
deployURL : ‘http://zenikaserver:8090/archiva/internal’ ,
-
deploySnapshotURL : ‘http://zenikaserver:8090/archiva/snapshots’
-
]
-
setDefaultTarget ( install )
On peut apprécier la facilité de mise en œuvre des dépendances.
Aujourd’hui de nombreuses target ne sont pas supporté comme celle du cycle de vie “site”. De même, la plupart des types de projets Maven ne sont pas pris en compte. Néanmoins, cette intégration entre Gant et Maven est prometteuse.
A noter aussi, deux autres projets connexes à surveiller :