I. Le contexte▲
Mon EDI de choix est Netbeans, que j'utilise en version 5.0 et 5.5, donc ma revue sera axée sur les différences entre les deux outils. Je ne connais vraiment pas assez Eclipse pour pouvoir extrapoler sur la présence de telle ou telle fonctionnalité. Par ailleurs, je me limiterais aux parties de Java que j'utilise au jour le jour, c'est-à-dire du POJO et du JSP/Servlet.
Mon environnement de travail est Windows XP SP2, avec un processeur Pentium D 2.80GHz et 2 Go de RAM.
II. Site web▲
Le site web de IntelliJ IDEA (http://www.jetbrains.com/idea/) est clair est aéré. On accède facilement aux pages téléchargement, fonctionnalités, documentation (qui me semble étrangement vide), une page « Démarrez… » (qui au contraire semble bien remplie, avec de nombreuses démo Flash)… J'ai dit que la page documentation semblait bien vide, mais il existe deux sites externes officiels: un wiki sur http://www.intellij.org/ et des outils tels qu'un forum, un bugzilla, un accès aux builds internes sur http://www.intellij.net/
Sur le site web, j'apprends également que IDEA dispose d'une architecture pour développer des plugins, avec un kit à télécharger séparément (30 Mo supplémentaires).
III. Téléchargement / licence▲
IDEA n'est ni open source ni gratuit. Le prix unitaire proposé est de 499$ par utilisateur, et 299 pour une mise à jour. Le prix reste donc raisonnable, et j'ai souvent lu les commentaires de personnes pour qui les gains de productivité engendrés par IDEA couvraient largement et rapidement le coût de la licence. Avec cela, Jetbrains fournit une assistance technique gratuite par email, l'accès gratuit aux révisions mineures et bugfix, ainsi que 40% de remise sur les prochaines révisions majeures. Il est également possible d'utiliser IDEA, avec toutes ses fonctionnalités, en version d'essai pendant 30 jours.
Le fichier d'installation à télécharger pèse 63.4 Mo, à comparer avec les 44.06 Mo de Netbeans 5.5RC2 (nous reviendrons plus tard sur les fonctionnalités embarquées).
IV. Installation / mises à jour▲
L'installation se passe sans aucun problème, avec les options habituelles. IDEA embarque sa propre JVM (Sun HotSpot 1.5.0_08-b03) et l'utilise pour fonctionner, mais requiert bien sûr un JDK externe pour travailler sur les projets. Entre mon installation initiale d'IDEA et le début de cette revue, j'ai été notifié d'une mise à jour vers la version 6.0.01. Il n'y a apparemment pas de mécanisme de patches ou hotfixes, car j'ai du télécharger à nouveau l'intégralité de l'installateur.
V. Démarrage et premier projet.▲
Un démarrage d'IDEA dure 13 secondes (pour 11 secondes avec Netbeans plus son profiler et le pack UML, mais avec le JDK 1.6 b103). L'impression visuelle générale est très professionnelle, parfaitement intégrée dans Windows. Le redimensionnement et le déplacement de la fenêtre à l'écran se font sans heurts, mis à part le classique bug du rectangle gris qui est corrigé dans Mustang (certes j'ai une grosse configuration). La page d'accueil me propose les options classiques de début de session, avec création, ouverture, réouverture de projets, plus la possibilité de checkout. On trouve également sur cette page des liens vers de la documentation et un panneau listant les plugins installés.
Je jette rapidement un œil à l'option Checkout. Un clic me donne le choix entre CVS et SVN. Quelques manipulations m'apprennent que les clients SVN et CVS sont tous les deux intégrés. Nous y reviendrons, spécifiquement sur CVS.
Je me lance avec la création d'un premier projet, en fait je souhaite configurer la librairie sur laquelle je travaille actuellement. Un impératif pour moi : ne pas déplacer ni toucher la structure de mon projet paramétré avec Netbeans. Je crée donc ce projet dans un emplacement spécifique IDEA. L'assistant le demande où je souhaite créer ce projet, l'emplacement des futurs fichiers compilés, le JDK que je compte utiliser. Me voici devant un projet vide. Je constate rapidement que des options qui sont profondément cachées dans les options de Netbeans (voir dans les paramètres de démarrage) telles que l'abréviation des noms de package, l'affichage de l'arborescence en arbre ou en package sont disponibles en directement.
Après avoir tâtonné un peu pour trouver les propriétés de ce projet, je parviens facilement à rajouter au projet mon répertoire source. Tout semble marcher convenablement… Je vais ouvrir la classe sur laquelle je travaillais précédemment… et là, la bande d'erreur passe en rouge. Mais bien sûr, j'avais oublié d'importer mes nombreux jars ! Je retourne dans les propriétés du projet, et dans l'onglet Dependencies je rajoute mes jars. Cette fois-ci je peux compiler, mais ma barre d'erreur est passée au jaune…
VI. Nombreuses suggestions, options intéressantes.▲
En effet, IDEA a repéré dans mon code de nombreuses imperfections, et les mets en valeur de cette manière. En vrac, j'avais des imports inutiles, des variables inutilisées (c'est assez standard), mais aussi des erreurs plus subtiles comme l'initialisation à null inutile d'une variable, ou bien une collection remplie, mais dont je ne faisais jamais appel au contenu. Pas mal… On peut corriger l'erreur manuellement, en cliquant sur la traditionnelle ampoule, ou bien avec le raccourci ALT+ENTER. Au passage, je constate comme l'analyse du code est rapide. En commentant la collection inutile, immédiatement la bande d'erreur me signale qu'un import est désormais superflu…
Intrigué par les possibilités offertes, je me plonge dans les options. Première impression, il y a beaucoup de catégories. Il y a deux sections: les options relatives au projet courant en haut, et celles globales en bas. Un peu au hasard, je flâne dans les options de l'éditeur (très nombreuses). J'en profite pour rajouter les numéros de ligne dans la marge. (Hé ! Un endroit ou Netbeans est plus pratique, un clic droit dans la marge suffit !) La liste des erreurs et avertissements qui peuvent être détectés est impressionnante. Et encore, il n'y en a qu'un quart d'actives par défaut.
Pas mal non plus, les intentions: ce ne sont pas des erreurs, mais des suggestions de refactoring léger de votre code. Par exemple, vous commencez le constructeur d'une classe
public
class
Pilot{
public
Pilot
(
String fooBar) {
}
}
Un appel à ALT+ENTER, le choix de l'intention « Create field for parameters », la saisie du nom du champ que vous souhaitez rajouter, transforme votre code en
public
class
Pilot{
String myFooBar;
public
Pilot
(
String fooBar) {
this
.myFooBar =
fooBar;
}
}
Autre possibilité très intéressante de ce panneau d'option, le champ search : saisir un texte dans ce champ met en évidence les catégories contenant votre texte. Par exemple, je cherche « number », et IDEA met en valeur les catégories qui correspondent. Mieux, en cliquant sur ces catégories, les options concernées sont également mises en valeur.
VII. En passant par CVS▲
Pour me lancer, je commence par un petit checkout CVS. La commande Browse CVS repository me permet en un clin d'œil de parcourir l'ensemble de mes projets suivis, d'une manière très simple je récupère un projet que je souhaite. Par contre, en retournant sur mon projet principal, pas moyen de trouver les commandes CVS. En fait, à la différence de NB qui reconnaît les répertoires versionnés (en tout cas pour CVS), dans IDEA il est nécessaire de spécifier dans les propriétés du projet, avec quel système est versionné chaque projet. Le menu propose CVS, SVN, Perforce, SourceSafe et StarTeam. CVS et SVN fonctionnent tels quels, les autres demandent un jar supplémentaire ou alors de pointer vers un exécutable.
Une fois CVS déclaré, le menu Version Control me propose de nouvelles actions. « File view » m'affiche une vue de l'arborescence de mon projet, avec un code couleur m'indiquant les fichiers modifiés, inconnus, etc. Il est cependant dommage de ne pas indiquer les répertoires dont un sous-élément n'est pas à jour: pas moyen de savoir si le contenu d'un répertoire fermé a été modifié. Autre vue accessible, « change view » liste les fichiers qui ne sont pas up-to-date. On trouve également des commandes globales sur le projet, et les commandes classiques relatives à un fichier ou un répertoire. Dans l'ensemble, ça ressemble beaucoup à ce que je connais dans Netbeans, mais l'intégration est un peu moins aboutie: outre les petits points évoqués plus haut, j'ai peiné par exemple pour trouver comment rajouter un fichier dans le repository, la commande Add était grisée… En fait il fallait d'abord rajouter le package. Netbeans intègre tout cela en un clic.
VIII. Retour à l'éditeur.▲
VIII-A. Des éléments à améliorer…▲
Retournons maintenant à l'endroit où on passe le plus de temps: l'éditeur. C'était, d'après tout ce que j'avais entendu et lu, le point fort d'IDEA. Et bien j'ai été assez déçu. Par exemple, les templates par défaut des nouveaux fichiers sont pauvres. Pas de template de classe exécutable avec main() intégré, pas de constructeur précréé dans les nouveaux fichiers. Bien entendu, tout cela est paramétrable, mais c'est dommage. Le débogueur est fonctionnel, mais il manque un bouton « apply code change » (pour réinjecter une correction de code en cours de débug sans redémarrer l'application) que j'utilise énormément dans Netbeans. Autres petite irritations, parmi la kyrielle de raccourcis clavier pour naviguer dans les fichiers, ALT+TAB ne fonctionne pas, il faut utiliser ALT+Droite/Gauche; appuyer sur la touche « ; » ne place pas ledit « ; » en fin de ligne…
Par ailleurs, IDEA a tranché de manière originale en ce qui concerne la polémique « Où placer le bouton pour fermer un onglet ? » (cf. le changement du design entre les onglets de Firefox 1 et Firefox 2) : plutôt que d'hésiter entre placer le bouton dans chaque onglet ou le placer tout à droite, ici il n'y a carrément pas de bouton du tout… le clic droit est obligatoire. Peut-être une manière de forcer les utilisateurs à abandonner la souris pour le clavier ?
Plus gênant, j'ai vraiment eu du mal avec le code completion: déjà, il a fallu trouver l'option pour afficher la javadoc en même temps que le code completion. Ensuite, lorsque je souhaite saisir les arguments d'une méthode, pas moyen d'afficher la javadoc ou même la signature de cette méthode ! Par exemple, dans Netbeans, si je souhaite créer un nouveau PreparedStatement, la javadoc me propose la liste des différents arguments possibles :
alors que IDEA me propose une sélection d'objets dans la portée de mon code :
Certes le code completion est rapide, mais il n'affiche pas ce que je souhaite !
VIII-B. … mais des fonctionnalités vraiment pratiques▲
Malgré tout, certaines idées sont excellentes et bien pratiques. Par exemple, l'indentation automatique lors du collage d'un bout de code n'a l'air de rien, mais permet d'économiser le CTRL-SHIFT-F qui est devenu un réflexe pour moi dans Netbeans. Une autre fonctionnalité intéressante, mais que je n'ai pas eu le réflexe d'utiliser: l'option Local History qui permet de suivre l'évolution locale d'un fichier, sans passer par CVS ou SVN. Si on reste dans l'intégration CVS, la fenêtre Diff est très bien faite.
Dans la catégorie « IDEA automatise les tâches que je faisais à la main », l'assistant 'commit' intelligemment d'exécuter avant le commit des actions comme l'optimisation des imports, un reformatage du code, une analyse du code… Sachant que dans Netbeans je réalisais moi même ces actions (avec PMD pour l'analyse du code) je ne peux qu'applaudir.
Une autre délicate attention de IDEA envers ses utilisateurs est l'affichage à l'écran, lors des actions longues (commit, lancement Tomcat, scan du classpath) d'un écran de trucs et astuces qui permet de se familiariser avec les possibilités de l'outil.
IX. Développement web▲
J'ai également testé le module de développement web. Comme pour un projet IDEA, mon but était de travailler avec une base existante (un projet Netbeans) sans modifier la structure des fichiers, mais ici j'ai rencontré un problème qui m'a bloqué dans ma revue : je n'ai pas réussi à modifier l'emplacement du répertoire où sont placées les ressources web, ou du moins je n'ai pas réussi à indiquer un emplacement en dehors du projet IDEA.
Malgré cela j'ai pu vérifier que le support pour le développement web est bien présent: les différents serveurs applicatifs du marché sont bien présents, y compris glassfish, ce qui suppose le support de Java EE 5. Le support des frameworks Struts et JSF est proposé lors de la création de projets.
Je me suis contenté pour mon évaluation de faire quelques manipulations dans un projet Tomcat, pour lequel je n'ai eu aucun problème particulier. Le code completion pour les JSP fonctionne sans problème, y compris avec un support pour du JavaScript intégré (c'est-à-dire directement dans la JSP, pas dans un fichier à part).
Il n'y a pas de Tomcat intégré, mais la procédure pour se rattacher à un Tomcat existant est tout à fait explicite et fonctionnelle. Le débogueur fonctionne également sans problème, et permet de déboguer le JSP comme les beans et servlets utilisés. Par contre, lors d'un essai, la modification à chaud dans l'éditeur d'une JSP nécessitait le redéploiement du projet pour être prise en compte.
X. En conclusion▲
Avec la sortie de Netbeans 5.5 et d'IDEA, la mode est aux comparatifs entre les différents EDI, mais à la différence des participants de l'expérience « Essayez l'autre EDI pendant 30 jours » (dont je n'avais pas connaissance au début de ma propre expérience), je n'ai pas consacré autant de temps à ma revue. J'avoue être repassé sous Netbeans lorsque je n'arrivais pas à trouver quelque chose rapidement.
Je suis certain que certains des problèmes que j'ai évoqués dans cette revue peuvent être résolus pas les aficionados de IDEA, de la même manière que j'ai tiqué parfois en lisant les commentaires des deux utilisateurs Eclipse qui testaient Netbeans. J'ai voulu faire une revue et en particulier sur la partie de IDEA qui est censée être loin devant Netbeans : l'éditeur. Et la surprise a été que je n'ai pas été spécialement impressionné. Certes, au niveau des détections d'erreurs, des inspections de code, IDEA conserve de l'avance, mais pas tant que cela, mais j'avais parfois l'impression de n'y voir que du saupoudrage de sucre…. Il faut croire que le si décrié éditeur de Netbeans ait quand même fait bien des progrès depuis l'antique Netbeans 3.5.1.
Finalement, IDEA est un EDI de grande qualité: interface claire est nette, fonctionnalités embarquées assez similaires au Netbeans de base (J2SE, J2EE, web, support de Struts et JSF, éditeur de GUI - que je n'ai pas testé), éditeur java et JSP de grande qualité. Je vais pour ma part continuer à travailler avec Netbeans - j'y ai mes aises -, mais pour celui qui sait bien l'utiliser, IDEA présente à mes yeux une alternative tout à fait crédible.
Comme souvent dans ce genre d'exercice, le choix d'un EDI reste quelque chose de personnel, une affaire de goût.