I. Contexte▲
Ancien utilisateur d'Eclipse, j'ai découvert l'IDE de JetBrains, IntelliJ IDEA 5.5, lors de mon stage de fin d'étude.
Après une courte période d'adaptation, j'ai très vite adopté ce dernier. Pour moi, il se démarquait d'Eclipse ou autre IDE dans le sens où il ne proposait aucun assistant.
Conséquence de cela, il faut absolument comprendre les outils et les technologies que l'on utilise pour travailler.
Mais en contre-partie, IntelliJ IDEA propose un éditeur de fichier très pratique, possédant de nombreux raccourcis clavier ou souris pour travailler efficacement et rapidement.
Les outils d'analyse de code et de refactoring sont nombreux : simplification des expressions de conditions, détection des champs/méthodes/classes non utilisés, détection de conditions toujours vraies…
Je suis ensuite passé sur la version 6.0 lors de sa sortie, celle-ci apportant de nouveaux supports tels qu'un éditeur JavaScript (complétion, refactoring…) ou encore JPA.
Malgré ces apports, je dois avouer qu'il existe tout de même des lacunes dans l'IDE. Le support de Spring par exemple nécessitait un plugin payant, là ou d'autres IDE possédaient des extensions gratuites.
De plus, le plugin pour la version 5.5 d'IDEA n'était pas compatible IDEA 6.
L'autre grosse lacune à mon sens était le support d'Hibernate. IDEA 6 proposait bien JPA, mais pas Hibernate, alors que le nombre d'applications basées sur Hibernate devait être plus important.
Encore une fois, un plugin payant existait.
Lors de l'annonce de la milestone 1 de la version 7, j'ai été ravi d'apprendre que le support de Spring était ajouté. Mais après quelques tests, j'avoue avoir été légèrement déçu.
La cause : les performances étaient assez catastrophiques sur ma petite configuration personnelle.
Fort heureusement, ces problèmes ont été résolus dans la milestone 2 ! Et pour ne rien gâcher, un support d'Hibernate et des projets Maven ont été ajoutés dans cette version.
Et maintenant que la version 7 est sortie, j'ai l'occasion de la tester, et c'est par le biais de cet article que je vous livre mes impressions.
II. Présentation▲
II-A. IntelliJ IDEA▲
IntelliJ IDEA est un produit de la société JetBrains. C'est un IDE Java dont la renommée n'est plus à faire.
Il a déjà été récompensé par l'award du meilleur IDE à plusieurs reprises.
Il permet de travailler aussi bien sur des projets Java, des projets Java Web (basés sur Struts, JSF ou Google Web Toolkit), des projets « Entreprise » grâce aux EJB ou encore des projets J2ME.
Il possède divers atouts :
- de nombreux outils de refactoring, afin de remanier le code Java, XML, JSP ;
- des fonctions de navigation et de recherche dans le projet très performantes tout en restant faciles d'utilisation ;
- des outils d'analyse du code afin d'optimiser celui-ci.
II-B. Nouveautés▲
La version 7 apporte son lot de nouveautés, et pas des moindres :
- support de Spring et d'Hibernate ;
- support de JRuby, Rails, Groovy et Grails ;
- support de Flex ;
- support de Maven ;
- support des Services Web (JAX-WS, Axis, XFire) ;
- un nouvel outil de gestion de dépendances.
III. Présentation des nouveautés▲
III-A. Changements dans l'interface▲
La première nouveauté de la version 7 qui sera visible par les habitués est la modification de l'interface de création d'un nouveau projet.
Exit le choix entre un module Java, un module J2ME, un module Entreprise ou Web !
Le choix est maintenant restreint à Java ou J2ME. Les modules Web, Entreprises étant gérés par des facets.
Un facet est un « module » pouvant être ajouté/supprimé à tout moment sur un projet. Les facets disponibles sous IDEA sont les suivants :
- Web (Struts, GWT, JSF) ;
- Entreprise, EJB ;
- Spring ;
- Hibernate, JPA ;
- Flex ;
- Web service, Web service Client ;
- Groovy / Grails (avec un plugin) ;
- JRuby (avec un plugin).
Chaque facet possédant son option de configuration propre. Un facet Web proposera ainsi de configurer le répertoire des ressources Web, de spécifier quelles bibliothèques devront être incluses dans le War…
Une option intéressante aussi lors de l'utilisation de Facet, c'est qu'IDEA proposera de télécharger les bibliothèques nécessaires à son fonctionnement.
L'utilisation d'un Facet Spring proposera de télécharger le jar Spring et les dépendances nécessaires.
III-B. Support de Spring▲
Le support de Spring était pour moi primordial, et c'est donc avec impatience que j'attendais qu'IDEA le propose afin de combler son retard sur les autres IDE.
Comme je l'ai dit précédemment, le support de Spring passe par l'ajout d'un Facet Spring, soit lors de la création du projet, soit par la suite dans les propriétés du projet :
Une fois celui-ci ajouté, il est possible d'ajouter un fichier de configuration Spring par les propriétés du Facet.
Lors de cette étape, IDEA propose de choisir le type de fichier de configuration que l'on désire utiliser : DTD Spring 1.2, DTD Spring 2.0 ou XSD Spring 2.0.
L'éditeur de fichier de configuration Spring est un éditeur XML que l'on pourrait croire simple, mais qui possède plus de fonctionnalités qu'une simple complétion des éléments.
La complétion des classes (dans l'attribut class de l'élément bean), des noms des propriétés (attribut name dans l'élément property), ainsi que la proposition des éléments valides selon la DTD/Schéma sont bien sûr disponibles.
Mais lors de la configuration d'une propriété, IDEA va proposer une liste des valeurs possibles pour celle-ci. C'est-à-dire que si une propriété est de type « MonInterface », IDEA va proposer des références vers des beans implémentant celle-ci.
Mais IDEA fournit d'autres possibilités, si par exemple vous ajoutez un Bean dont la classe n'existe pas encore, un simple raccourci clavier, et voici la classe créée. Pareil pour une propriété inexistante.
De plus, IDEA fidèle à lui-même permet, encore une fois via un simple raccourci, de proposer une liste de propriétés disponibles pour un Bean afin de les ajouter dans le fichier de configuration.
Toujours via ce raccourci, IDEA propose divers « modèles de configuration » allant de la configuration d'une source de données (DataSource), à la configuration d'un planificateur Quartz en passant par la configuration d'un EJB.
Dans la même optique, IDEA fournit un moyen de créer un ensemble de Beans, dépendants entre eux, pour la réalisation d'une fonctionnalité complexe. Par exemple, la création d'une tâche planifiée demande la configuration de la tâche, de sa planification et du gestionnaire. IDEA permet la création de ses différents éléments via un mini-assistant.
Les assistants existent pour la configuration d'une tâche avec Quartz ou avec l'API Timer, d'une couche Hibernate, JDO, iBatis, TopLink ou JPA.
En plus des fonctionnalités d'édition, Spring fournit une visualisation graphique des Beans définis ainsi que de leurs dépendances.
III-C. Support d'Hibernate▲
La seconde nouveauté de la version 7 est le support d'Hibernate. Encore une fois, c'est via un Facet que le support de Hibernate est géré.
Il faut ensuite configurer une fabrique de session, soit via un fichier propre à Hibernate, soit via son intégration dans un contexte Spring.
Ensuite, il est possible d'utiliser un visualisateur graphique pour créer des entités ainsi que leurs relations :
IDEA propose aussi la génération d'un mapping à partir d'une source de données :
En plus des outils graphiques, l'éditeur XML comporte de la complétion pour faciliter l'édition manuelle. Dans l'éditeur Java, IDEA fournit une complétion lors de la création de requête HQL :
Bref, le support d'Hibernate est assez complet, mais demande un peu d'effort au début pour s'y retrouver.
III-D. Support de Maven▲
L'utilisation de Maven avec IDEA est maintenant intégrée directement, et non plus via un plugin.
L'ouverture d'un fichier pom.xml va créer automatiquement le projet IDEA basé sur ce fichier, configurant les répertoires de sources, des tests, des ressources Web dans le cas d'un projet War, et téléchargeant les dépendances spécifiées dans le projet Pom.
Il est bon à savoir qu'il n'est pas nécessaire d'avoir un Maven installé localement, IDEA en proposant une version intégrée directement dans l'installation.
Une autre manière d'utiliser Maven est de créer un nouveau projet et d'utiliser une source Maven. Cela permet d'avoir plus d'options, telles que la création d'un projet IDEA fixe, et qui nécessitera une synchronisation manuelle, ou bien la création d'un projet temporaire dont les dépendances seront rechargées à chaque ouverture du projet.
La différence se situe dans l'utilisation des Facets. Ceux-ci étant propres à IDEA, ils sont perdus à chaque synchronisation. L'utilisation d'un projet fixe permet de ne pas perdre ces configurations. En contre-partie, les modifications de dépendances ne sont pas répercutées directement.
Par ailleurs, IDEA propose un lanceur de goal Maven graphique :
Le module Maven d'IDEA est très bien pensé dans la gestion des dépendances entre modules. Si par exemple vous chargez deux projets Maven dont l'un possède une dépendance sur l'autre, IDEA ne va pas lier celui-ci sur le « jar » dans le dépôt local, mais va lier directement le module IDEA avec l'autre.
III-E. Support des Web Services▲
La version 7 finale apporte encore une autre nouveauté qui n'était pas encore présente dans la milestone 2 : le support des Web Services.
Et sur le papier, ce ne sont pas des moindres : JAX-WS, JAX-RCP, Axis, XFire.
En pratique, c'est moins flagrant. J'ai eu quelques soucis avec JAX-WS avec un JDK 6, la cause étant une incompatibilité entre l'implémentation de JAXB (version 2.1) alors que l'API du JDK est la version 2.0.
Une fois ce problème résolu, le développement de services Web JAX-WS est assez simple.
III-E-1. Serveur▲
Pour ce qui est de la création d'un service Web, IDEA propose deux moyens. Le premier étant d'utiliser l'assistant de création d'un service Web :
Après vous avoir demandé le nom du service, celui-ci va générer les différents éléments nécessaires au déploiement : une classe annotée (avec un exemple simple), le fichier de mapping des endpoints et modification du fichier web.xml afin de prendre en compte la servlet de JAX-WS.
L'autre méthode est de spécifier à IDEA une classe annotée qu'il doit exposer en tant que Web Service :
Encore une fois, IDEA va générer les fichiers nécessaires au déploiement du service Web.
III-E-2. Client▲
IDEA propose un assistant qui va générer les artefacts d'un client Web Service. Pour cela, il suffit de spécifier l'emplacement (local ou distant) d'un WSDL et IDEA s'occupe du reste.
III-E-3. Axis et XFIRE/CXF▲
Le support d'Axis et d'XFire par contre est moindre. En effet, même lorsqu'on sélectionne Axis à la place de JAX-WS, l'assistant de création de service Web ne va pas prendre en compte notre choix et utiliser JAX-WS.
Il est cependant possible de générer grâce aux différents outils, le code WSDL à partir d'un code Java, pour ensuite recréer les stubs Axis à partir de celui-ci.
Par contre, pour XFire/CXF, il faut configurer tout d'abord soi-même le chemin vers celui-ci. Et même après cela, je n'ai pas réussi à exposer un service Web, l'assistant générant des erreurs.
III-F. Autres nouveautés▲
À côté de ces fonctionnalités que j'ai pu tester correctement, IDEA 7 comprend diverses autres nouveautés, certaines ont pour but d'attirer plus de développeurs vers IDEA.
C'est le cas par exemple de l'amélioration du module d'interaction avec Eclipse. Jusqu'ici, il était possible d'importer un projet Eclipse dans IDEA. Mais depuis la version 7, il est possible d'exporter des projets IDEA vers le format Eclipse.
Cela permet ainsi à des utilisateurs IDEA de collaborer plus facilement avec des utilisateurs Eclipse.
Dans la même optique, l'importation de projet JBuilder à l'air d'être possible.
Toujours dans le but d'étendre le public visé, IDEA s'ouvre à d'autres langages. C'est le cas par exemple du support de Groovy (et Grails) ainsi que de Ruby.
N'ayant pas d'expérience dans ces langages, j'ai tout de même testé un peu Groovy.
III-F-1. Groovy▲
Avant tout, le support Groovy n'est pas directement intégré lors de l'installation, et nécessite l'installation du plugin JetGroovy.
Cela se fait sans peine avec le gestionnaire de plugin intégré.
Une fois le plugin installé, il est nécessaire de configurer celui-ci, afin de lui spécifier le répertoire d'installation de Groovy.
Il faut donc préalablement avoir téléchargé celui-ci : Groovy 1.5.
Il est ensuite possible d'ajouter le facet Groovy à un projet :
Cela fait, IDEA propose la création de classes et scripts Groovy :
Le plugin fournit en plus un lanceur pour les scripts et les classes groovy :
Au niveau des fonctionnalités, le plugin dispose de la puissance d'IntelliJ IDEA, et propose donc du refactoring, des quickfixes, l'autocomplétion et de l'introspection.
Bref, tout ce qu'il faut pour développer simplement en Groovy.
III-F-2. Grails▲
L'intégration de Grails est, elle aussi, très bonne. Tout comme Groovy, la première étape est de télécharger Grails 1.0 et de configurer le plugin JetGroovy pour lui fournir le chemin vers le répertoire d'installation.
Ensuite, la création d'un projet Grails se fait via l'assistant de nouveau projet :
Une fois le projet créé, le plugin JetGroovy fournit des assistants pour la création des contrôleurs, des objets de domaines, des bibliothèques de tags, de services ou de scripts.
Le plugin permet aussi le lancement de l'application Grails via le serveur Jetty intégré.
Bref, quasiment tout ce qui est nécessaire au développement Grails est présent. Le seul manque important est l'absence d'une console Grails.
En effet, Grails est au départ basé sur des commandes en console (à l'instar de Maven ou Ant), et même si l'IDE fournit une interface graphique pour certaines d'entre elles (création de contrôleurs, de services…), d'autres ne sont pas disponibles.
À l'heure actuelle, il faut donc ouvrir une console sur le côté pour effectuer ces commandes.
« IntelliJ IDEA is simply the best Groovy/Grails IDE on the planet », citation de Graeme Rocher, le créateur de Grails.
IV. Conclusion▲
La version 7 apporte beaucoup de nouveautés, fort demandées par les développeurs Java. Spring et Hibernate sont devenus des standards dans les projets récents, et jusqu'ici IDEA était à la traîne dans le support de ces deux technologies.
Pour moi, le support de Spring est excellent, même si certains points pourraient être améliorés (quelques bugs présents dans la gestion des namespaces, ajout de la définition d'un bean directement à partir de la classe).
En contre-partie, le support d'Hibernate est un peu moins bon, car moins simple d'utilisation. J'ai clairement eu plus de mal à prendre en main cette partie-là.
Mais cela reste tout de même très correct.
Le support de Maven est pour moi une bonne chose aussi. De plus en plus de projets en entreprise utilisent Maven, et le nombre de projets Open Source l'utilisant ne se comptent plus. C'est donc un grand plus.
Tout comme l'importation/exportation de projet Eclipse, ce qui permettra à des utilisateurs Eclipse de passer plus aisément vers IDEA, en leur laissant une porte de sortie si jamais ils étaient trop perdus.
Je ne saurai malheureusement pas faire de commentaire sur l'intégration Ruby, ni même GWT, car je n'ai jamais eu l'occasion de travailler avec ces technologies.
Sans avoir pu faire des tests réels sur Groovy et Grails, j'ai pu tout de même développer dans ces langages sans peine, et donc pour moi l'intégration est plutôt réussie.
Le support des services Web n'est pas encore très au point, IDEA génère encore pas mal d'erreurs avec certains frameworks, mais j'imagine que cela sera réglé dans les prochaines releases mineures.
IV-A. Remerciements▲
Je tiens à remercier caro95470 d'avoir pris le temps de corriger mon article, ainsi que l'équipe Java pour leurs conseils. De plus, je remercie particulièrement Developpez.com et JetBrains de m'avoir donné la possibilité de tester IntelliJ IDEA 7.0.
IV-B. Liens▲
- Site officiel de IntelliJ http://www.jetbrains.com/idea/ IDEA
- Blog officiel deIntelliJhttp://blogs.jetbrains.com/idea/IDEA
- Dépôt de plugin pourIntelliJhttp://plugins.intellij.net/IDEA
- Review deIntelliJhttps://dejardin.developpez.com/outils/jetbrain/intellij/idea/6/IDEA6 par Valère Déjardin
- Présentation deIntelliJhttps://baptiste-wicht.developpez.com/outils/jetbrains/intellij/idea/6/IDEA6 par Baptiste Wicht
V. Note et remerciement du gabarisateur▲
Cet article a été mis au gabarit de developpez.com.
Le gabarisateur remercie Fabien (f-leb) pour sa correction orthographique.