Intégrez vos développements d'applications grails avec maven
Grails est un socle OpenSource qui propose un cadre standardisé et simplifié pour le développement d'applications compatibles JEE. Reposant sur des frameworks reconnus comme Hibernate, Spring, Groovy, Grails améliore sans commune mesure la productivité des développements sans demander un investissement lourd d'adaptation. Grails est à lui seul un environnement intégré qui permet de construire et déployer très rapidement une application.
Cependant, convaincus chez OCTO Technology par la valeur de Maven pour industrialiser les développements d'applications et pour faciliter le travail collaboratif en particulier dans les entreprises, nous avons rapidement trouvé des manques dans Grails dès que l'application grossissait au fur et à mesure des itérations. Par exemple, la possibilité d'utiliser facilement les librairies fournies par d'autres équipes projets. Là où Maven permet de le faire à l'aide d'une simple description en gérant les dépendances transitives, avec Grails nous retournons des années en arrière avec la gestion manuelle des librairies dans un repertoire lib du projet sauvegardé dans le gestionnaire de versions (avec tous les problèmes de maintenance que cela peut engendrer à long terme).
Comme nous n'étions pas les seuls à faire ce constat, nous avons relevé nos manches pour faire le nécessaire afin de permettre de construire des applications Grails avec Maven 2...
A cette fin nous avons créé un plugin maven 2 pour le développement d'application Grails. Ce plugin est aujourd'hui compatible avec maven 2.0.5+ et fonctionne pour Grails 0.5.6 et 0.6.
Que vous apporte le plugin ?
Aujourd'hui avec le plugin Grails pour maven 2 vous serez capables d'utiliser les dépendances présentes dans un repository et vous n'aurez plus à les gérer dans le répertoire lib de votre projet. Les dépendances transitives avec les POMs pour grails vous permettront de résoudre les versions que votre application, Grails et les différentes librairies inhérentes utilisent. Vous pourrez intégrer facilement vos développements en cours en utilisant le mécanisme de SNAPSHOTs de maven et votre application pourra être encapsulée dans un EAR à l'aide uniquement d'une dépendance.
Les pré-requis
- Maven 2 est installé et
$MAVEN_HOME/bin
ajouté dans lePATH
(Dans le cas de maven, la variableMAVEN_HOME
n'est pas obligatoire. Il suffit que le chemin vers le répertoirebin
soit dans lePATH
). Si nécessaire vous avez configuré un proxy pour que maven 2 puisse télécharger les librairies nécessaires. - Grails est installé, la variable
$GRAILS_HOME
est déclarée et$GRAILS_HOME/bin
ajouté dans lePATH
.
Comment le mettre en place ?
Dans vos settings maven 2 (fichier $HOME/.m2/settings.xml
par défaut) vous devez ajouter ces 3 lignes puisque notre plugin n'est pas un groupe reconnu par défaut par maven comme hébergeant des plugins :
... com.octo.mtg ...
Si votre application Grails n'est pas commencée vous pouvez instancier un nouveau projet avec grails create-app
Avant de mavenizer votre projet Grails, il est recommandé d'éditer le fichier application.properties
de Grails afin de vérifier si il y est déclaré une propriété app.version
. Si ça n'est pas le cas, vous pouvez la rajouter en lui donnant comme valeur 1.0-SNAPSHOT
par exemple. Si elle existe déjà, il est conseillé de la mettre la version en SNAPSHOT afin de suivre les préconisations maven.
Ensuite vous lancez la commande magique : mvn grails:create-pom -DgroupId=
Ceci vous créera un POM maven pour votre projet Grails.
Dès lors, vous pourrez appeler différentes phases des cycles de vie maven.
mvn validate
: vérifie la cohérence entre le POM de votre application grails et son descripteurapplication.properties
. Cette phase s'occupe aussi de copier vos dépendances dans le répertoire lib du projet grails.mvn test
: lance les tests unitaires et les tests d'intégration (en appelantgrails test-app
).mvn package
: crée le war de l'application (en appelantgrails war
).mvn integration-test
: lance les tests web cannoo (en appelantgrails run-webtest
).mvn install
: installe le war dans le repository local.mvn deploy
: deploie le war dans le repository distant.mvn clean
: nettoie le projet en appelantgrails clean
, et en supprimant les librairies présentes dans le répertoire lib du projet.
Et pour la suite ?
Nous avons encore plein d'idées pour apporter encore plus de valeur ajoutée aux projets Grails avec l'intégration maven.
- Ajouter la possibilité de générer le site web maven associé au projet en y intégrant les rapports de tests et les outils compatibles avec groovy (Cobertura pour la couverture de tests par exemples),
- Permettre d'utiliser les fonctionnalités de release de maven, de génération de la config des IDEs (eclipse/WTP, & co), de lancement de l'application dans jetty, ...
- Améliorer l'intégration grails/maven en évitant de lancer différentes JVM afin d'améliorer les performances du build,
- Et pourquoi pas un jour, ... pouvoir utiliser une organisation des répertoires à la maven
Si vous en avez d'autres et que vous souhaitez participer à ce projet n'hésitez pas à nous contacter sur la liste de diffusion et n'hésitez pas à venir nous voir lors du Grails eXchange qui aura lieu à Londres du 17 au 19 octobre.