La bataille du build ? Maven l’a gagnée !

C’est vrai, quoi, en ces temps de guéguerre stratégique qui nous passe, en fait, bien au-dessus de la tête (je ne vois par exemple pas en quoi la guetre Oracle/Apache a la moindre chance de se répercuter d’une façon concrète, ou visible, si vous préférez, sur mon environnement de travail), il ne faut pas oublier une autre guerre, qui court depuis des années dans le monde Java, celle du build.
En effet, pendant longtemps, l’outil de build « standard » s’appelait Ant. C’est d’ailleurs avec lui que j’ai fait mes armes Java avant l’an 2000, je crois (hélas, à cause de mon utilisation un peu tordue des frames et du Javascript, l’internet Wayback machine a perdu mon explciation de 2001 sur l’intérêt d’Ant. En même temps, il était oubliable). Donc, pendant longtemps, Ant a régné comme seul maître (ce qui lui a permis de s’intégrer aux IDE d’une manière « raisonnable » – j’ai des souvenirs assez terrifiants de la mauvaise intégration à JBuilder, par exemple). Et puis maven est apparu. Maven a, malgré tout ce qu’on lui repproche, apporté une tonne de choses au build java :
  • Un côté convention over configuration : même si c’est assez loin de la légèreté proposée par Ruby on Rails, on a quand même le même objectif : faire en sorte qu’un projet qui suive la maven way soit très simple à définir, et ne compliquer les choses que dans les cas « exotiques ».
  • Une organisation standard des projets : parce qu’avant, c’était quand même un peu fait n’importe comment, alors qu’après, on a pu commencer à imaginer que chaque projet range ses sources dans src/main/java, ses tests dans src/test/java, et ainsi de suite
  • Un cycle de vie standard : combien de fois, avec Ant, ne me suis-je pas posé la question du comment faire pour que ce truc ait lieu avant ou après tel autre (oui, je sais, merci, la réponse est théoriquement assez simple avec les depends, mais quand même, au bout d’un moment, c’est assez pénible). Avec maven, c’est conceptuellement plus facile : on identifie la phase du cycle de vie pendant laquelle on veut faire un truc, et « pouf » (je mets pouf alors que jee sais que c’est bien plus compliquée que ça. cela dit, ce qui m’intéresse ici, ce n’est pas l’implémentation, mais l’idée), on le fait là.
  • Une gestion des dépendances idéale : et là, je ne rigole pas (notez bien que pour les points précédents, je ne rigolais pas non plus, mais là, on est vraiment dans le secret de maven). Avant, la seule façon de gérer ses dépendances, c’était de mettre un paquet de jar dans un dossier libs, et de mettre ce dossier libs dans le gestionnaire de source. Pas idéal, parce qu’évidement, ce ne sont pas des sources, mais des jars. Pas idéal non plus, parce que si par exemple je veux utiliser du code XPath avec JDOM, je dois penser à télécharger la bonne version de Jaxen. Alors que théoriquement, avec maven, il l’aurait téléchargé tout de suite à la bonne version (je dis théoriquement, parce qu’à mon avis, jaxen doit être une dépendance optionnelle de JDOM). Bref, avec maven, on remplace les ajrs salement flanqués dans le gestionnaire de source par des dépendances déclaratives dans un fichier de configuration qui, lui, est dans le gestionnaire de source. Et, cerise sur le gateau, maven télécharge les dépendances tout seul, éventuellement en passant par un proxy, à la demande.
Bon, évidement, maven n’est pas parfait. Pour moi, son plus gros défaut est d’être apparu pendant la mode du XML, ce qui fait que son POM apparaît maintenant comme daté. C’est d’ailleurs ça qui a précipité l’apparition de nouveaux outils qui reprennent peu ou prou tous les éléments de maven en supprimant le côté XML (comme par exemple Gradle). Mais personnellement, j’ai l’impression qu’en faisant ça, les créateurs de ces outils ont jeté le bébé avec l’eau du bain. En effet, dans les reproches tradionnellement faits à maven, il y a évidement la lourdeur du XML. Or, avec maven 3 et des initiatives comme Polyglot Maven, ce XML va se trouver remplacé par … du Groovy, du Scala, du Clojure, du Java, …. Et à mon avis, d’ici quelques années, maven va reprendre la place des outils qui essayent de s’appuyer sur ses réussites, sans vraiment remplacer tous ses plugins qui lui donnent sa puissance.
Publicités

3 réflexions sur “La bataille du build ? Maven l’a gagnée !

  1. Ah oui, tiens, merci<div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div style="width: 600px; font-size: 12px; font-family: Arial,Helvetica,sans-serif; line-height: 18px;"> <div style="margin-top: 20px;">

    <p>

    Anne just commented on the post

    &quot;<a href="http://r.posterous.com/track/?redirect=http%3A%2F%2Friduidel.posterous.com%2Fla-bataille-du-build-maven-la-gagne&amp;data=eyJldmVudCI6ICJtcF9jbGlja2VkIiwgInByb3BlcnRpZXMiOiB7Im1wX3BsdWdpbl90eXBlIjogImVtYWlsIiwgInVybCI6ICJodHRwOi8vcmlkdWlkZWwucG9zdGVyb3VzLmNvbS9sYS1iYXRhaWxsZS1kdS1idWlsZC1tYXZlbi1sYS1nYWduZSIsICJ0b2tlbiI6ICI5YTMwMjUxMDMxMThkMGNmYjNmNzc4MzI4ZjE0MGNjYiIsICJkaXN0aW5jdF9pZCI6ICIyNzUzIiwgImJ1Y2tldCI6ICJFbWFpbDogY29tbWVudF9lbWFpbCJ9fQ%3D%3D&quot; style="color: rgb(188, 113, 52);" target="_blank">La bataille du build ? Maven l'a gagn?? !</a>&quot; on

    riduidel's posterous

    </p><p>

    </p><div style="font-size: 18px; line-height: 24px;">&quot;gagn??e&quot;, f??minin :-)</div>

    </div>
    <div style="margin-top: 40px; border-top: 1px solid rgb(204, 204, 204); padding-top: 10px;">

    <div><a href="http://r.posterous.com/track/?redirect=http%3A%2F%2Fposterous.com&amp;data=eyJldmVudCI6ICJtcF9jbGlja2VkIiwgInByb3BlcnRpZXMiOiB7Im1wX3BsdWdpbl90eXBlIjogImVtYWlsIiwgInVybCI6ICJodHRwOi8vcG9zdGVyb3VzLmNvbSIsICJ0b2tlbiI6ICI5YTMwMjUxMDMxMThkMGNmYjNmNzc4MzI4ZjE0MGNjYiIsICJkaXN0aW5jdF9pZCI6ICIyNzUzIiwgImJ1Y2tldCI6ICJFbWFpbDogY29tbWVudF9lbWFpbCJ9fQ%3D%3D&quot; style="color: rgb(188, 113, 52);" target="_blank">Posterous</a> is the place to post everything. Just email us.

    <div><a href="http://r.posterous.com/track/?redirect=http%3A%2F%2Fposterous.com%2Fmain%2Feditmailsettings%2FgFhnsImbbakmaneeCBaGAmGeofJCoy&amp;data=eyJldmVudCI6ICJtcF9jbGlja2VkIiwgInByb3BlcnRpZXMiOiB7Im1wX3BsdWdpbl90eXBlIjogImVtYWlsIiwgInVybCI6ICJodHRwOi8vcG9zdGVyb3VzLmNvbS9tYWluL2VkaXRtYWlsc2V0dGluZ3MvZ0ZobnNJbWJiYWttYW5lZUNCYUdBbUdlb2ZKQ295IiwgInRva2VuIjogIjlhMzAyNTEwMzExOGQwY2ZiM2Y3NzgzMjhmMTQwY2NiIiwgImRpc3RpbmN0X2lkIjogIjI3NTMiLCAiYnVja2V0IjogIkVtYWlsOiBjb21tZW50X2VtYWlsIn19&quot; style="font-size: 10px; color: rgb(136, 136, 136); text-decoration: none;" target="_blank">Change your email settings or unsubscribe????</a></div>

    </div>
    </div> </div><img src="" width="1" height="1"> </blockquote></div>

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s