Les outils du développeur web en Java
Imaginons un développeur Java qui démarre un nouveau projet web et qui inaugure un poste de développement flambant neuf. Seul l’OS est installé, Windows, Mac OS X ou Linux, peu importe : les outils présentés dans cet article sont tous disponibles sous votre OS favori.
Pour la gestion des dépendances
Avant même de choisir un IDE, l’utilisation d’un outil de gestion de dépendances s’impose. Il s’occupera de télécharger les fichiers jar des librairies, et rend l’application déployable sur de multiples environnements (développement, production, qualification…) à partir d’une poignée de commandes standards.
Partons sur la solution la plus courante, Maven. Allons faire un tour sur mvnrepository.com pour trouver les dépendances à ajouter dans le pom.xml :
- Junit est le choix standard pour écrire les tests unitaires. Il y a aussi TestNG,
- Pour tester les classes en isolation, Mockito et EasyMock sont de bons candidats mais la syntaxe du premier est plus naturelle et moins verbeuse,
- FestAssert est une alternative moderne aux méthodes d’assertion de Junit, avec une syntaxe plus claire et une gestion des listes d’objets,
- Cobertura pour publier des rapports sur la couverture de tests,
- Le trio PMD/Findbugs/Checkstyle pour vérifier la qualité du code et publier les rapports obtenus,
- Selon certains, les classes Apache Commons devraient faire partie de l’API standard de Java. Un client HTTP dans commons-http, des librairies utilitaires pour les types standards dans commons-lang…
- CXF pour générer le client et l’implémentation des services web Soap à partir du fichier WSDL,
- Le framework Spring, en particulier pour améliorer la testabilité grâce à l’injection de dépendances.
La multitude d’archetypes disponibles pour Maven permet d’initialiser un squelette d’application en quelques secondes.
Choisir un framework web
Pour une application web, on peut lorgner sur GWT. La possibilité de développer les vues en pur Java est alléchante pour un spécialiste du langage, et ça facilitera les tests unitaires. Pour qui ne connaît pas le javascript, c’est GWT qui s’occupe de générer le code client et la partie Ajax.
GWT est très répandu, bien documenté, supporté par Google, mais il y a peu de composants graphiques en standard.
Heureusement, plusieurs dérivés de GWT proposent une bibliothèque de widgets plus aboutie :
- SmartGWT propose des composants surprenants, notamment un tableau avec du chargement à la demande et des fonctionnalités de tri « à la Excel », mais c’est surtout une boite noire qui encapsule du Javascript par du Java,
- Les widgets de Vaadin sont visuellement élégants mais moins sophistiqués, et sa démarche de construction des vues côté serveur l’éloigne du GWT standard,
- Le meilleur choix est probablement GXT : grande bibliothèque de widgets, mode de développement proche de GWT, et le code du framework est plus transparent. GXT est « mavenisé » : quelques lignes dans le fichier de configuration Maven suffisent pour profiter des nouveaux widgets.
Spring MVC constitue un autre choix intéressant, avec l’avantage de s’intégrer très facilement avec le framework Spring (le contraire serait étonnant). Les contrôleurs de Spring MVC facilitent l’implémentation de services REST, mais le choix de cette solution nécessite l’intégration d’une couche supplémentaire pour développer une interface graphique attractive, par exemple JQuery.
Sur mojo.codehaus.org, vous trouverez un archetype GWT pour Maven. Sur appfuse.org il y a un archetype d’application basée sur Spring MVC.
L’environnement de développement
Afin de commencer à coder sans payer de licence, Eclipse est le choix standard, agrémenté de quelques plugins :
- m2e pour bénéficier de Maven directement dans l’IDE,
- MoreUnit pour faciliter les tests unitaires Junit,
- EclEmma pour aller encore plus loin dans les tests, voir la couverture directement au niveau du code et favoriser le TDD,
- Google Plugin for Eclipse, pour (entre autres) debugger une application GWT en pas-à-pas avec un clic droit et un « debug as web application », au lieu de passer par les cibles maven.
Pour le développeur fortuné, Intellij IDEA est l’IDE du moment : plus performant qu’Eclipse, son ergonomie est aussi plus pragmatique, et le niveau de fonctionnalité est équivalent : intégration Maven, intégration GWT, affichage de la couverture des tests unitaires…
Si l’application doit dépendre d’un web service externe, SoapUI est une application desktop qui permet de “mocker” le service en renvoyant des réponses prédéfinies, et le package ainsi obtenu peut être déployé par Maven. Très utile pour conserver la maîtrise des dépendances dans un environnement de développement.
Les applications web pour le développement
Quand la phase de réalisation est engagée, le travail en équipe est facilité par l’utilisation d’applications web :
- Github pour partager le code source,
- Jenkins ou Teamcity pour lancer les builds Maven sur un serveur d’intégration continue. Possibilité de lancement à heure régulière ou bien en surveillant des évènements,
- JIRA pour gérer les demandes d’évolution et les anomalies,
- Gerrit pour faciliter les revues de code,
- Pivotal Tracker pour l’organisation d’une équipe de développement agile.
Pour aller plus loin
Tous ces outils constituent un socle solide, quelle que soit la plate-forme choisie, grâce à la portabilité du Java et des applications web. Bien sûr, ce socle laisse la place à tout un écosystème d’outils propre à votre OS favori…