Apache Maven est l’outil open-source qui apporte aux développeurs une gestion et une automatisation des principales tâches nécessaires à la mise en oeuvre et au déploiement d’un projet Java:
- Développement
- Documentation
- Test Unitaire
- Intégration Continue
- Rapports Statistiques
- Déploiement automatique
Contrairement à l’outil Ant qui permet d’automatiser des actions procédurales qu’il faut à adapter à la structure de chaque projet Java, Maven préconise un certain nombre de conventions à adopter plutôt qu’une configuration spécifique à chaque projet. De ce fait, Maven uniformise les projets et impose de facto un standard et une méthodologie approuvée et reconnue dans le monde Java.
Je suis actuellement en train d’explorer cet univers et je vous propose dans cet article une liste (non exhaustive) des quelques références que j’ai jugé utile sur le sujet…
Les références utiles sur Maven
Apache Maven aux éditions Pearson
Commençons par le livre le plus populaire du moment.
Ce livre propose un approche pragmatique qui permet aux utilisateurs de s’initier aux différents concepts de Maven mais pas seulement. Ce livre apporte surtout une vision d’ensemble très utile sur les différentes solutions pour mettre en place une usine logiciel (Software Factory). Il présente rapidement de nombreux outils qui gravitent ou peuvent graviter autour de Maven :
- JUnit pour les tests unitaires que vous connaisez déjà j’espère
- Jenkins (Anciennement Hudson) pour l’intégration continue
- Cobertura pour la couverture de Code
- Sonar pour l’analyse de code
- Nexus ou Archiva pour gérer son dépôt Maven
- Jira pour comme outil de gestion de tickets
- Wiki
- Pleins d’autres outils à découvrir
On y découvre que grâce à de nombreux plugins, Maven propose une intégration de ces différentes solutions. Dès lors, l’utilisation de ces outils ne repose plus sur des solutions plus ou moins bancales mise en place unitairement mais vient se placer dans une stratégie globale,unifié et entièrement automatisé au sein de l’outil Maven.
Très utile pour le lecteur qui souhaite découvrir ces concepts, ce livre n’apporte toutefois pas un aspect suffisamment technique pour vous aider une fois les mains dans le code.
J’ai par exemple été déçu de voir certains thèmes complètement absents ou peu développé:
- Bien que les EJB soient le standard proposé par Java pour le développement des applications Web, j’aurais apprécié un chapitre qui aborder aussi l’intégration avec Spring très utilisé par la communauté Java
- La modularisation d’un projet Maven pour séparer les différentes couches (Dao, Métier, Web, etc) n’est pas très développé (3 pages), j’espérais pourtant apprendre beaucoup de cette partie
- Le livre n’est pas très précis sur comment gérer la configuration (Base de donnée, Accès aux répertoires) des différents environnements (Développement, Test, Recette, Production). Un début de réponse semble être apporté dans le chapitre sur la gestion des profils, mais sans plus de précision.
- Le chapitre sur la Livraison m’a clairement déçu. En achetant ce livre, j’espérais avoir une vision claire sur comment réaliser automatiquement mes déploiements sur un serveur Web et d’avantage d’information sur la production continue, c’est raté. L’outil Cargo est vaguement énoncé comme permettant des déploiements sur des serveurs J2EE, mais le livre n’apporte pas de précision sur comment gérer notre déploiement sur différents environnements. Pour l’heure, je n’ai d’ailleurs trouvé aucun article détaillée pour mettre en place une production continue avec Maven. N’espérez donc pas obtenir rapidement une solution clé en main.
- L’absence d’explication sur l’intégration de Maven avec un gestionnaire de sources (SCM). Le plugin release présenté dans le chapitre Livraison évoque un accès au SCM pour effectuer des tags de version, mais on ne sait ni pourquoi ni comment.
Pour conclure, ce livre est très adapté au lecteur qui souhaite avoir une première approche de Maven, j’ai ainsi découvert de nombreux concepts et outils autre que Maven qui m’étaient complément inconnus. La partie sur les tests unitaires et d’intégration permet de bien comprendre l’intérêt de tels tests et la place importante de ceux-ci dans le cycle de vie Maven. Une fois lancé dans la mise en oeuvre de la « Mavenisation » d’un projet, le livre est de moins en moins utile car il n’apporte pas toute les réponses à mon besoin.
Je vous invite également à lire la critique très détaillée de Grégory Boissinot à propos ce livre Apache Maven.
Better Builds with Maven
« Better Builds with Maven » de MaestroDev est un PDF téléchargeable gratuitement dans un anglais facilement compréhensible qui apporte des solutions techniques détaillées sur la mise en place de maven. On y trouve de nombreuses configurations du POM adaptées à différents besoins.
Le chapitre 4 est particulièrement intéressant pour le développement d’applications web, on y découvre un exemple concret sur:
- La création d’un projet Maven d’une application Web modularisée par couche.
- La mise en place du plugin permettant l’utilisation du serveur d’application Jetty pour améliorer la productivité lors des développements. Jetty permet le rechargement du code à chaud contrairement à Tomcat qui nécessite un redémarrage ou un plugin particulier (Sysdeo) pour prendre en compte les modifications.
- Un aperçu d’un déploiement automatiquement avec Cargo sur JBoss et Tomcat
Les livres de Sonatype
Sonatype est une société très active de la communauté Maven. Elle développe entre autre le plugin Eclipse pour Maven : m2eclipse et l’outil de dépôt Maven Nexus. Elle met également à disposition des infrastructures réseaux et propose gratuitement des livres sur Maven.
Les livres Maven sont disponibles en anglais gratuitement sur le site de Sonatype:
- Maven By Example
- Repository Management with Nexus
- Maven : The Complete Reference
- Developing with Eclipse and Maven
Un livre Maven : The definitive Guide aux éditions O’Reilly a également été publié par Sonatype.
Des traductions françaises de Maven Complete Reference et Definitive Guide sont disponibles sur certains sites. Véritables références en la matière, ces livres sont assez complets et peuvent répondre à la plupart des questions sur des cas communs.
« Developing with Eclipse and Maven » est un début pour apprendre à utiliser le plugin m2eclipse.
En vous souhaitant une bonne lecture.
Je vous conseille également cette article pour démarrer rapidement un projet Maven pour un projet web.