Maven Community news - 3ème trimestre 2008
Bonjour à tous,
Après quelques vacances, voici de retour les nouvelles sur Apache Maven et sa communauté. Comme vous allez le voir ci-dessous la période estivale 2008 aura été productive. De nombreuses livraisons (... comparativement à d'habitude), et surtout un gros effort pour répondre aux besoins des utilisateurs et pour offrir de jour en jour des livrables de meilleur qualité.
En gras les releases "majeures" (non alpha, beta, RC et autres versions pas encore considérées comme abouties).
En italique les annonces "périmées" par une annonce plus récente.
Allo, le support des plugins ? y a-t-il quelqu'un ??
Cela n'est pas une critique nouvelle mais il est toujours aussi désagréable d'entendre dire par les détracteurs de Maven que son équipe n'est pas à l'écoute des besoins de ses utilisateurs.
Sur la dynamique des livraisons il faut reconnaître qu'ils n'ont pas tout à fait tord ... tout du moins en apparence. Il est déjà arrivé de devoir attendre des mois, voir plus d'un an, pour obtenir la publication d'une nouvelle version d'un plugin.
Le problème est cependant plus la conséquence d'un manque de ressources et/ou de rigueur dans le processus de développement que d'un problème d'écoute. Tous ceux qui participent à ce projet en sont aussi les premiers utilisateurs. Nous faisons notre possible en fonction de nos moyens. Peu d'entre nous ont la possibilité de consacrer du temps professionnel en conséquence pour contribuer au projet dans son ensemble. Il faut donc avouer que, comme dans beaucoup d'autres projets en open-source, les bénévoles privilégient souvent leurs propres besoins (ou ceux de leurs clients) au détriment de ceux de la communauté. Cela n'est pas un manque d'écoute mais bel et bien un manque de temps.
Pour mieux répondre aux besoins des utilisateurs, nous les avons donc solicités à travers un vote pour nous aider à classer la priorité de publication des plugins. Suite à ce vote, les plugins les plus demandés ont été publiés. Aujourd'hui les plugins SCM, WAR, Enforcer sont disponibles.
Nous avons aussi automatisé en utilisant Swizzle le reporting sur les votes des issues qui se trouvent dans Jira. Nous sommes désormais capables de suivre le nombre de votes sur les issues ouvertes sur le noyau et sur les plugins. Pour nous aider à sélectionner les plugins pour lesquels une publication serait nécessaire nous avons aussi un rapport qui nous comptabilise les votes sur les issues fermées des plugins non publiés. Nous faisons donc notre possible pour produire le maximum de valeur pour les utilisateurs. N'hésitez pas à voter pour vos issues, cela sera pris en compte lors de nos choix.
Pour pallier au manque de ressources actives, nous avons peu de leviers. Il y a beaucoup de facteurs personnels ou professionnels qui influent sur la participation des développeurs. Pour les plugins hébergés chez Apache, il est difficile d'étendre l'équipe. Les règles d'admission sont assez strictes (un bien pour un mal) et demandent un investissement conséquent. Pour limiter ce problème nous limitons le nombre de plugins à maintenir chez Apache et nous laissons une marge de manoeuvre beaucoup plus forte au projet mojo.codehaus.org. Si une personne est volontaire pour participer au développement d'un plugin, nous la faisons rentrer dans cette communauté et nous l'aidons à y faire ces premiers pas. Est-ce risqué en terme de qualité des plugins délivrés par mojo.codehaus.org ? En fait non, car nous avons un espace d'incubation pour juger de la viabilité des nouveaux plugins. Concernant les développeurs, nous n'avons jamais eu à nous plaindre de la qualité livrée. Elle est peut-être perfectible mais souvent les participants essaient de livrer le meilleur d'eux-mêmes (chose qu'ils ne peuvent pas toujours faire dans leur quotidien du fait des délais exercés sur les projets).
Qualité
Afin d'assurer la qualité des livrables que nous produisons, nous avons remis à jour toute notre infrastructure d'intégration continue (désormais sur Hudson et Nexus) en exploitant les ressources offertes par la société Sonatype (dirigée par Jason Van Zyl, leader du projet Maven).
En effet depuis plusieurs mois nous souffrions de l'instabilité du serveur nous hébergeant chez Apache (problème lié au serveur physique et non pas à continuum). De ce fait, notre intégration continue était régulièrement indisponible et ne nous offrait plus les services escomptés. En parallèle, nous avons complètement revu nos propres builds internes pour les standardiser encore plus (nommage des profils, etc) et séparer les tests d'intégration des tests unitaires dans les plugins (histoire qu'une fois de plus les cordonniers ne restent pas les plus mal chaussés).
Le repository central
Ces dernières semaines nous avons eu plusieurs fois des surcharges sur le repository central à cause de personnes qui essayaient de télécharger tout le contenu du repository en HTTP. NE FAITES PAS CELA. Tout le monde le paie très cher avec des temps d'accès très mauvais et même des accès refusés. Nous suivons en temps réel ces accès et nous nous réservons le droit de blacklister (temporairement du moins) ceux qui dérogent à cette règle. Les recopies du repository central sont faites par nos soins sur les mirrors via rsync pour diminuer le nombre de connexions et la bande passante utilisée.
Si vous êtes un projet dans une entreprise, privilégiez la mise en place d'un gestionnaire de repository qui vous offrira des services pour gérer un cache des artefacts externes et le stockage de vos propres livrables internes. Archiva en mode standalone ou Nexus se déploient en quelques minutes. Pas besoin de faire de la surconception. Par défaut, mettez en place deux repositories : un pour gérer le cache des releases externes, l'autre pour les snapshots. Ensuite quand le besoin vous vient de partager vos librairies entre plusieurs projets de l'entreprise, rajoutez un repository pour stocker vos releases internes et un autre pour vos snapshots. Configurez vos descripteurs de projets pour publier dessus. Enfin, vous mettrez souvent en place un cinquième repository pour les librairies tierces d'éditeurs propriétaires (drivers de base de données, librairies SUN protégées, ...). Pour éviter de demander à vos équipes de modifier leurs paramétrages à chaque modification de votre architecture sur ce serveur, utilisez la notion de groupe pour n'exposer qu'un repository virtuel pour les releases et un autre pour les snapshots (en plus cela améliorera grandement le temps de vos builds puisque maven ne cherchera à télécharger ces artefacts qu'à un seul endroit).
Maven 2.x/3.x, grand coup de ménage sur la roadmap
- 19 Septembre - Maven 2.1.0-M1 (Release Note)
Au niveau du noyau Maven il y a eu beaucoup de suspense et de rebondissements. Petit résumé sur le feuilleton de l'été : "La valse des versions".
Pour revenir un peu en arrière sur maven 2.0.x, il faut remarquer que les différentes versions publiées à ce jour avaient des niveaux de qualité très variables (mais en nette amélioration depuis la 2.0.8). La fréquence des publications était aussi très irrégulière et certaines améliorations dépassaient largement le cadre d'une maintenance corrective :
- Ajout de la gestion du scope import dans le dependencyManagement (maven 2.0.9)
- Ajout de nouvelles syntaxes pour gérer les mirrors (maven 2.0.5 et 2.0.9)
- Et il doit y en avoir d'autres ...
Au début de l'été, toute l'équipe partait donc sur la publication d'une version 2.0.10. Le focus était une fois de plus sur la correction des régressions avec en particulier les problèmes de résolution de variables dans des cas assez complexes (fork de lifecycle par exemple). Nous avons repris le principe de la 2.0.9 en publiant des Releases Candidates pour validation par l'équipe et les utilisateurs. Nous avons référencé plusieurs builds complexes afin de les tester systématiquement avec les nouvelles RCs.
Il s'est avéré que la tâche fut plus compliquée qu'il n'y paraissait. Les corrections de bugs impactaient les performances, l'amélioration des performances créait des bugs. Les RCs s'enchainèrent pour trouver la stabilité requise à une nouvelle version. Parallèlement à cela, le besoin est revenu de publier une version 2.1 de Maven (le fameux saint graal depuis des années) afin qu'elle puisse être utilisée par les outils qui utilisent l'API Embedded de Maven (Le plugin m2eclipse par exemple). Après de longs débats, il fut admis que les evolutions prévues jusqu'alors pour la 2.1 étaient dantesques. Il était donc nécessaire de lisser ces évolutions dans des versions 2.X pour celles qui n'entraîneraient pas d'incompatibilités et dans des versions 3.X pour celles qui étaient plus importantes. L'équipe a donc planché sur l'écriture de Release Plans pour les versions 2.1.0 et 2.2.0. Les modifications entreprises sur la version 2.0.10 furent donc relayés dans une première milestone de la version 2.1. La 2.0.10 devrait voir le jour mais avec un nombre de correctifs plus restreint. La correction de la résolution des variables est trop importante pour un maintenance corrective.
Vous êtes perdus ? En résumé :
- La version 2.1, le trunk qui est le saint graal depuis des années devient la 3.0.
- La branche des RCs pour la 2.0.10 devient une branche pour les evolutions 2.X. Les RCs de la 2.0.10 ont permis de publier une version 2.1.0-M1 en attendant la 2.1 et la 2.2.
- La version 2.0.10 va être recrée depuis la 2.0.9 en appliquant les corrections mineures de la branche 2.1.
Plugins Maven 2.x @maven.apache.org
- 29 Septembre - Invoker plugin 1.3 (Release Note)
- 28 Septembre - Reactor plugin 1.0 (Release Note) - Et hop un nouveau plugin qui présage de ce que Maven 2.X saura faire dans un avenir proche. Vous remarquerez en passant que ce dernier a oublié les phases alpha/beta qui rendent tout le monde malade (communauté et developpeurs). Ce dernier permet de lancer (un peu à la make) un build restreint dans un multi-modules en fonction de différents critères :
- construire tous les modules qui dépendent d'un module
- construire tous les modules qui permettent de construire un module
- construire tous les modules impactés par vos modifications locales sur le code de votre projet (necéssite bien sur un gestionnaire de versions)
- 26 Septembre - Archetype plugin 2.0-alpha-4 (Release Note)
- 18 Septembre - Enforcer plugin 1.0-alpha-4 (Release Note) - Enfin !! Depuis le temps qu'elle était attendue. Elle corrige de gros bugs qui sur la version alpha précédente imposaient à maven de télécharger toutes les dépendances du build. Cette nouvelle version apporte aussi quelques nouvelles règles de contrôle.
- 04 Septembre - Help plugin 2.1 (Release Note) - Le résultat est beaucoup plus lisible, plus complet et moins buggé ;-)
- 27 Août - SCM plugin 1.1 (Release Note) - De nombreuses corections et deux nouveaux gestionnaires de sources supportés : AccuRev, une suite propriétaire et Git très utilisé dans la communauté Linux.
- 27 Août - Javadoc plugin 2.5 (Release Note) -
- 21 Août - Plugin plugin & Plugin tools 2.4.3 (Release Note)
- 14 Août - War plugin 2.1-alpha-2 (Release Note)
- 10 Août - Invoker plugin 1.2.1 (Release Note)
- 08 Août - IDEA plugin 2.2 (Release Note)
- 07 Août - Deploy plugin 2.4 (Release Note)
- 01 Août - DOAP plugin 1.0 (Release Note)
- 28 Juillet - Project Info Reports Plugin 2.1 (Release Note) - Beaucoup plus d'informations remontées notament sur les dépendances (et le dependencyManagement) mais attention à l'allongement du temps d'exécution
- 26 Juillet - AntRun plugin 1.2 (Release Note) - Il sert à quoi ?? :-)
- 23 Juillet - Plugin Testing Tools 1.2 (Release Note)
- 03 Juillet - Site plugin 2.0-beta-7 (Release Note)
Plugins Maven 2.x @mojo.codehaus.org
- 13 Septembre - WAS6 plugin 1.0 (Release Note)
- 05 Septembre - Versions plugin 1.0-alpha-1 (Release Note) - Un nouveau plugin très pratique. Il permet d'interroger les repositories pour détecter des mises à jour de plugins ou de dépendances.
- 23 Août - RSpec plugin 1.0-beta-3
- 17 Août - Build Helper plugin 1.2 (Release Note)
- 09 Août - OS X Application Bundle Plugin 1.0-alpha-2
- 29 Juillet - Dashboard plugin 1.0.0-beta-1
- 26 Juillet - Solaris plugin 1.0-alpha-2
- 21 Juillet - Clirr plugin 2.2.2 (Release Note) - Un seul bug de corrigé mais il m'énervait.
- 18 Juillet - JDepend plugin 2.0-beta-2
Librairies Maven 2.x @maven.apache.org
- 02 Septembre - Maven Dependency Tree 1.2 (Release Note)
- 27 Août - Maven Invoker 2.0.10 (Release Note)
- 27 Août - Maven SCM 1.1 (Release Note)
- 06 Août - Maven Filtering 1.0-beta-1 (Release Note)
- 06 Août - Maven Invoker 2.0.9 (Release Note)
- 31 Juillet - Wagon 1.0-beta-4 (Release Note)
Et sinon ...
- 25 Septembre - Sonar 1.4.2 (Release Note) - Sonar est de plus en plus robuste au fur et à mesure des versions. Aujourd'hui on peut lui reprocher son manque d'ouverture mais cela sera bientot réglé avec la version 1.5 (courant Octobre ?) qui apportera un mécanisme de plugins pour enrichir le produit. A noter, un article très complet sur Sonar par Romain Linsolas (Valtech).
- 22 Septembre - Apache Continuum 1.2 (Release Note) - Des gains de stabilité. Toujours aussi avancé sur la notion de partage de définition de builds (tout de même très important pour maintenir une ferme en état). Par contre l'IHM ... :-(
- 16 Septembre - Archiva 1.1.2 (Release Note) - D'une stabilité remarquable je l'utilise dans des grands comptes avec plusieurs dizaines de développeurs sans soucis.
- 08 Septembre - m2eclipse 0.9.6 (Release Note) - Meilleur de release en release. Il manque cependant encore de stabilité sur la partie WTP.
- 26 Août - Nexus Maven Repository Manager 1.0 (Release Note)
- 23 Août - Sonar 1.4.1 (Release Note)
- 23 Août - IZPack Plugin 1.0-alpha-3
- 22 Août - Felix SCR plugin 1.0.7 (Release Note) - Si vous faites de l'OSGi c'est chez Felix que ça se passe.
- 17 Août - IZPack Plugin 1.0-alpha-2
- 03 Août - IZPack Plugin 1.0-alpha-1
- 14 Août - GMaven 1.0-rc-3 (Release Note)
- 12 Août - Nexus Maven Repository Manager 1.0-beta-5 (Release Note)
- 11 Août - Archiva 1.1.1 (Release Note)
- 09 Août - Felix Bundle plugin 1.4.3 (Release Note)
- 08 Août - Felix Bundle plugin 1.4.2 (Release Note)
- 08 Août - Sonar 1.4 (Release Note)
- 29 Juillet - Overview plugin 1.2
- 23 Juillet - Sonar 1.4 RC2
- 20 Juillet - Archiva 1.1 (Release Note)
- 20 Juillet - asadmin plugin 0.2
- 19 Juillet - m2eclipse 0.9.5 (Release Note)
- 06 Juillet - Felix SCR plugin 1.0.6 (Release Note)
- 04 Juillet - Cargo 1.0-alpha-5
- 04 Juillet - Sonar 1.4 RC1