Afin de compléter un article en cours d'écriture, j'aurais voulu savoir quels sont les outils de builds que vous utilisez pour construire vos projets Java.
N'hésitez absolument pas (c'est même recommandé) à lister les avantages et inconvénients de l'outil que vous utilisez...
Personnellement j'utilise Ant depuis longtemps et depuis peu, je commence à le remplacer par Maven 2 dans mes projets.
Maven 2 permet de faire plus de chose de base qu'Ant sans avoir besoin de configurer de long script. De plus, les possibilités sont plus nombreuses (couverture de code, release, génération de rapports, site, ...).
+lisibilité (étant habitué à manipuler de l'XML)
+ simplicité pour des tâches usuelles comme la compilation, l'exécution du projet ou encore générer la javadoc
+Eclipse peut le générer (parfois il ne vaut mieux pas! )
-construction parfois complexe pour des tâches importantes
-propriétés pas toujours claires
De mon côté, j'utilise essentiellement Maven2, mais je commence à jeter un oeil sur Gradle (à mon avis, c'est plus pour le fun que pour vraiment l'utiliser, mais on ne sait jamais).
Concernant Maven 2 :
Les bons points :
Si on respecte les conventions de Maven 2, l'écriture d'un pom.xml est très simple et peu verbeux.
La gestion des dépendances, qui, sans être parfaite, a beaucoup simplifié les choses.
L'héritage et les projets multi-modules.
Les plugins de rapports.Le développement de nouveaux plugins est relativement simple.
Pour des projets simples, avec un pom.xml, on peut faire plein de choses facilement (compilation, tests, création de sites, rapports, etc.).
Bien supporté dans la plupart des outils d'Intégration Continue.
Le principe de décrire son projet plutôt que de décrire les tâches que l'on souhaite réaliser (mais c'est un aussi un point négatif, dès que l'on veut faire quelque chose qui sorte de l'ordinaire).
Les mauvais points :
Dès que l'on veut sortir un peu du système Maven2, que l'on veut faire des choses un peu en dehors du cadre de l'outil, ça devient vite complexe.
Trop verbeux sur les dépendances. Pourquoi n'avoir pas dès le début permis une syntaxe à la Ivy (<dependency groupId="xxx" artifactId="xxx" version="xxx"/>) ?
On utilise trop de plugins, parfois pour des tâches simples. Par exemple, si on a 2 répertoires de sources Java, le pom.xml est
Documentation mal fichue sur le site (mais on a le droit à des livres gratuits en anglais et en français, ça compense).
Les métadonnées XML sont très obscures je trouve (celles qui se trouvent dans le repository).
XML parfois redondant, même en utilisant l'héritage.
Mauvais support sur les IDE, en particulier sur les projets multi-modules, bien que ça s'améliore...
Même si c'est de plus en plus rare avec un nombre croissant de plugins, c'est dommage d'avoir recours à Ant dans Maven2 pour faire certaines tâches qui sortent un peu de l'ordinaire (ou alors il faut développer son propre plugin).
Développement et support des plugins "officiels" inégaux.
Bon, la liste n'est sans doute pas tout à fait complète, mais ça devrait refléter mon avis.
Pour conclure, je dirais que si je dois aller sur un nouveau projet, je choisirais clairement Maven2, malgré ses défauts.
Etant donné ma connaissance de l'outil, j'arrive généralement à m'en sortir sans trop de dégâts, dès qu'il y a des choses un peu exotiques à réaliser...
Mauvais support sur les IDE, en particulier sur les projets multi-modules, bien que ça s'améliore...
Juste pour ce point, je ne suis pas vraiment d'accord. Je ne connais pas le support Maven 2 de tous les IDE, mais pour ce qui est de IntelliJ Idea, il est vraiment excellent et réalise tout ce que ce que je veux, également pour les projets multi-modules.
Pour ma part, j'utilise Maven 2 depuis près de 6 mois, et le temps qu'il m'a fait gagner est considérable.
Les points faibles que je trouves sont certes anectotiques mais bon ...
- Customisation brouillon du site web généré
- Temps de build variant
- Tout est plugin, mais du coup le nombre de plugin est conséquent sur un projet