Revue JetBrain IntelliJ Idea 6.0
Date de publication : 14/11/2006 , Date de mise à jour : 17/11/2006
Par
Valère Déjardin (Creabeans)
Au début du mois d'octobre, Jetbrains a publié la dernière version de son EDI phare,
IntelliJ IDEA.
J'ai profité de l'occasion pour enfin tester cet outil,
dont je n'entendais que du bien sur la blogosphère.
I. Le contexte
II. Site Web
III. Téléchargement / licence
IV. Installation / mises à jour
V. Démarrage et premier projet.
VI. Nombreuses suggestions, options intéressantes.
VII. En passant par CVS
VIII. Retour à l'éditeur.
VIII-A. Des éléments à améliorer...
VIII-B. ... mais des fonctionnalités vraiment pratiques
IX. Développement Web
X. En conclusion
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

La page d'accueil de IntelliJ IDEA
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 sur 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 fait 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.

Premier coup d'œil
Je jette rapidement un œil à l'option Checkout. Un click me
donne le choix entre CVS et SVN. Quelques manipulation
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éé
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) tels que
l'abréviation des noms de package, l'affichage de
l'arborescence en arbre ou en package sont disponibles
en directement.

La vue des projets
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...

La configuration d'un projet
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ées est impressionnante. Et encore, il
n'y en a qu'un quart d'actives par défaut.

Le très impressionnant panneau d'options
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 valeurs les catégories qui
correspondent. Mieux, en cliquant sur ces catégories,
les options concernées sont également mises en valeur.

Recherche d'une option spécifique

La même mise en valeur, dans un sous menu d'options
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 click.
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 debugger
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.

La fenêtre Local History
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.

L'assistant CVS Commit
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.

Des trucs et astuces nous font patienter
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.

Le choix des serveurs supportés
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).

Très bon support pour HTML, JSP et même Javascript
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ébugger fonctionne également
sans problème, et permet de débugger 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é
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.
Au final, 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.


Copyright © 2006 Valere Dejardin. Aucune reproduction, même partielle, ne peut être faite
de ce site et de l'ensemble de son contenu : textes, documents, images, etc
sans l'autorisation expresse de l'auteur.
Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E
de dommages et intérêts.
Cette page est déposée à la
SACD.