<html> <head> <title>Outils de d&eacute;veloppement Java sous Linux</title> <meta name="keywords" content="motsclef"> </head> <body bgcolor="#FFFFFF" link="#990000" vlink="#0000CC"> <table border="0" cellpadding="5" cellspacing="0" width="100%"> <tr> <td width="135" align="center" valign="top" bgcolor="#000000" rowspan="3"><br>    <img src="../images/fleche-droite.gif" alt="> "><a href="../liste.html"><font color="#FFFFFF"><b>Liste des titres</b></font></a> <br>    <br> <center> <font color="#FFFFFF"><b>Catalogue Th&eacute;matique</b></font> <br> <img src="../images/fleche-bas.gif" border="0" alt="V"></center> <br>    <center> <a href="../perl.html"><font size="-1" color="#FFFFFF">Perl</font></a> <br> <br> <a href="../java.html"><font size="-1" color="#FFFFFF">Java</font></a> <br> <br> <a href="../programmation.html"><font size="-1" color="#FFFFFF">Programmation</font></a> <br> <br> <a href="../web.html"><font size="-1" color="#FFFFFF">Internet &amp; le Web</font></a> <br> <br> <a href="../admin.html"><font size="-1" color="#FFFFFF">Administration</font></a> <br> <br> <a href="../libre.html"><font size="-1" color="#FFFFFF">Logiciel Libre</font></a> <br> <br> <a href="../unix.html"><font size="-1" color="#FFFFFF">Unix</font></a> <br> <br> <a href="../mac.html"><font size="-1" color="#FFFFFF">Mac</font></a> <br> <br> <a href="../windows.html"><font size="-1" color="#FFFFFF">Windows</font></a> <br> <br> <a href="../p-et-c.html"><font size="-1" color="#FFFFFF">Pr&eacute;cis &amp; Concis</font></a> <br> <br> <a href="../divers.html"><font size="-1" color="#FFFFFF">Divers</font></a> <br> <br> </center>    <center> <a href="../index.html"><img src="../images/logo-eor.gif" border="0" alt="Accueil"></a> </center> <br>      <center> <a href="../club/index.html"><img src="../images/icone-club.gif" border="0" alt="Club"></a> </center> <br>    <center> <a href="../catalogue/tribune-libre.html"><img src="../images/icone-tribune-libre.gif" border="0" alt="Tribune Libre"></a> </center> <br>  </td><td valign="top"><font size="+0"> <center> <h1>Outils de d&eacute;veloppement Java sous Linux</h1>Michel Casabianca -&nbsp; 	 <a href="mailto:casa@sdv.fr">casa@sdv.fr</a> </center> <br> <hr> <i>   <p>Linux est r&eacute;put&eacute; pour ses outils de d&eacute;veloppement, mais qu'en    est-il au juste des outils Java ? Dans cet article, l'auteur se    propose de faire le tour des outils de d&eacute;veloppement Java    disponibles sous Linux et de r&eacute;pondre &agrave; cette question: "Linux terre    promise pour le d&eacute;veloppeur Java ?".</p>  </i> <hr> <table width="100%" border="1" cellpadding="10" cellspacing="0"> <tr> <td> <center> <font size="+2">Table des mati&egrave;res</font> </center> <br> <br> <a href="#Pourquoi Java sous Linux ?">Pourquoi Java sous Linux ?</a> <br> <a href="#Machines virtuelles">Machines virtuelles</a> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#JDK de Sun">JDK de Sun</a></font> <br> 	 &nbsp;&nbsp;&nbsp;&nbsp; 	 <font size="-2"><a href="#Particularit&eacute;s du portage Linux">Particularit&eacute;s du portage Linux</a></font> <br> 	 &nbsp;&nbsp;&nbsp;&nbsp; 	 <font size="-2"><a href="#Blackdown">Blackdown</a></font> <br> 	 &nbsp;&nbsp;&nbsp;&nbsp; 	 <font size="-2"><a href="#Sun">Sun</a></font> <br> 	 &nbsp;&nbsp;&nbsp;&nbsp; 	 <font size="-2"><a href="#IBM">IBM</a></font> <br> 	 &nbsp;&nbsp;&nbsp;&nbsp; 	 <font size="-2"><a href="#Linux sur Alpha, PPC, Sparc et ARM">Linux sur Alpha, PPC, Sparc et ARM</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Kaffe">Kaffe</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Japhar">Japhar</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Choix d'une machine virtuelle">Choix d'une machine virtuelle</a></font> <br> <a href="#Compilateurs Just in Time">Compilateurs Just in Time</a> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#JIT Borland">JIT Borland</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#TYA">TYA</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#shuJIT">shuJIT</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Cacao">Cacao</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Metrowerks">Metrowerks</a></font> <br> <a href="#Navigateurs compatibles Java">Navigateurs compatibles Java</a> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Netscape Navigator">Netscape Navigator</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Hot Java">Hot Java</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Navigateur ICE">Navigateur ICE</a></font> <br> <a href="#Compilateurs">Compilateurs</a> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Jikes">Jikes</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Pizza">Pizza</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Choix d'un compilateur">Choix d'un compilateur</a></font> <br> <a href="#Compilateurs natifs">Compilateurs natifs</a> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#TowerJ">TowerJ</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#GNU Compiler for Java">GNU Compiler for Java</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Toba">Toba</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Harissa">Harissa</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#La compilation native est-elle un bon choix ?">La compilation native est-elle un bon choix ?</a></font> <br> <a href="#Environnements de d&eacute;veloppement">Environnements de d&eacute;veloppement</a> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Emacs + JDE">Emacs + JDE</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#JBuilder 3.5 Foundation">JBuilder 3.5 Foundation</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Forte for Java">Forte for Java</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Visual Age for Java">Visual Age for Java</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Autres EDIs disponibles sous Linux">Autres EDIs disponibles sous Linux</a></font> <br> <a href="#Outils divers">Outils divers</a> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Argo UML">Argo UML</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#TogetherJ">TogetherJ</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Alma">Alma</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Optimize-it !">Optimize-it !</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#JAD">JAD</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#JAX">JAX</a></font> <br> 	 &nbsp;&nbsp; 	 <font size="-1"><a href="#Ant">Ant</a></font> <br> <a href="#Conclusion">Conclusion</a> <br> </td> </tr> </table>   <p>Les versions mises &agrave; jour de ce document sont disponibles  <a href="http://www.sdv.fr/pages/casa">http://www.sdv.fr/pages/casa</a>.    Les formats suivants sont disponibles :</p>        <p>     HTML     <a href="http://www.sdv.fr/pages/casa/html/java-linux.html">http://www.sdv.fr/pages/casa/html/java-linux.html</a>    </p>    <p>     PDF     <a href="http://www.sdv.fr/pages/casa/arc/java-linux.pdf">http://www.sdv.fr/pages/casa/arc/java-linux.pdf</a>    </p>    <p>     TXT     <a href="http://www.sdv.fr/pages/casa/arc/java-linux.txt">http://www.sdv.fr/pages/casa/arc/java-linux.txt</a>    </p>    <p>     PILOT     <a href="http://www.sdv.fr/pages/casa/arc/java-linux.prc">http://www.sdv.fr/pages/casa/arc/java-linux.prc</a>    </p>       <h2> <a name="Pourquoi Java sous Linux ?">Pourquoi Java sous Linux ?</a> </h2>     <p>Cet article se veut un panorama des outils de d&eacute;veloppement Java     sous Linux. Le nombre d'outils &eacute;tant important, je me suis cantonn&eacute;     &agrave; ceux qui me sont apparus incontournables, qu'ils soient libres ou     non. S'il vous semble que j'ai omis un outil indispensable, merci     de m'envoyer un email pour que je corrige mon oubli.</p>     <p>Cette pr&eacute;sentation int&eacute;ressera tout particuli&egrave;rement les d&eacute;veloppeurs     Java travaillant sous d'autres environnements (comme Windows) et qui     envisagent d'en changer. Linux est alors une plateforme de     d&eacute;veloppement int&eacute;ressante pour sa stabilit&eacute;, la richesse de son     environnement de d&eacute;veloppement (&eacute;diteurs, outils de gestion des     versions, make, etc) et son ouverture. Cette migration est d'autant     plus tentante que Java est multiplateforme, donc le programmeur ne     perd pas le b&eacute;n&eacute;fice de ses d&eacute;veloppements pass&eacute;s.</p>     <p>Des d&eacute;veloppeurs travaillant d&eacute;j&agrave; sous Linux peuvent aussi se     laisser tenter par ce langage plein de qualit&eacute;s. L'adaptation &agrave;     Java est facilit&eacute; pour les habitu&eacute;s du langage C (dont Java     s'inspire fortement en ce qui concerne la syntaxe) ou mieux C++     (orient&eacute; objet comme Java). Cependant, la migration n'est pas aussi     simple qu'elle pourrait sembler au premier abord : si la syntaxe est     tr&egrave;s proche, les habitudes de programmation sont assez diff&eacute;rentes     et l'&eacute;tendue de l'API demande un temps d'adaptation important.</p>        <h2> <a name="Machines virtuelles">Machines virtuelles</a> </h2>     <p>Une machine virtuelle est n&eacute;cessaire pour ex&eacute;cuter un programme     Java (applet ou application). Les navigateurs compatibles Java     incluent leur propre machine virtuelle et il n'est donc pas     n&eacute;cessaire d'en installer une pour visualiser des applets.</p>     <p>Cette partie traite essentiellement des portages pour Linux sur     plateforme Intel (d&eacute;sol&eacute; pour les autres, mais ne disposant que     d'une telle architecture, je ne peux parler d'exp&eacute;rience des     autres portages). J'ai n&eacute;anmoins inclus un tableau r&eacute;capitulatif     o&ugrave; sont r&eacute;f&eacute;renc&eacute;es les VM disponibles pour Linux sur Alpha, PPC,      Sparc et ARM.</p>     <h3> <a name="JDK de Sun">JDK de Sun</a> </h3>      <p>Tous les portages Linux pr&eacute;sent&eacute;s ci-dessous sont issus de la      version Solaris du JDK de Sun. Cette version pr&eacute;sente certaines      particularit&eacute;s par rapport &agrave; la version Windows, que nous allons      maintenant d&eacute;tailler :</p>      <h4> <a name="Particularit&eacute;s du portage Linux">Particularit&eacute;s du portage Linux</a> </h4>       <p>Les portages du JDK sous Linux &eacute;tant issus de la version Solaris,       ils en sont tr&egrave;s proches et l'on consultera la documentation       des outils pour Solaris (et non Windows). D'autre part, par rapport       &agrave; la version Windows, une VM Unix pr&eacute;sente les particularit&eacute;s       suivantes :</p>       <p>Lorsqu'on t&eacute;l&eacute;charge la machine virtuelle, les sites FTP       proposent parfois deux versions (r&eacute;pertoires), suivant la biblioth&egrave;que       C install&eacute;e sur sa machine:</p>       <ol>       <li> <i>libc5:</i> pour les anciennes distributions (ant&eacute;rieures        &agrave; avril 98 environ).</li>       <li> <i>glibc:</i> si vous disposez d'une distribution        r&eacute;cente. Dans ce cas, il est aussi possible d'utiliser la version        bas&eacute;e sur libc5.</li>      </ol>       <p>Le JDK existe aussi parfois en deux versions relatives &agrave; la gestion        des threads:</p>       <ol>       <li> <i>Native:</i> &Agrave; chaque thread correspond un processus du        syst&egrave;me.</li>       <li> <i>Green:</i> La machine virtuelle tourne dans un processus,        quelque soit le nombre de threads.</li>      </ol>       <p>Le choix du type de threads implant&eacute;s dans la VM est particuli&egrave;rement       important pour les machines SMP (Symetric Multi Processing). Une       VM implantant des green threads n'utilisera qu'un seul processeur       (elle tourne dans un seul processus, quelque soit le nombre de       threads tournant dans la VM) alors que la version utilisant des        threads natifs peut utiliser plusieurs processeurs (chaque thread Java        engendre un processus diff&eacute;rent, ou plus exactement, des pthreads c'est        &agrave; dire des processus partageant le m&ecirc;me espace m&eacute;moire). On notera        cependant qu'il existe une limite sur le nombre threads natifs pouvant        tourner dans une VM. Elle est li&eacute;e &agrave; la limite sur le nombre de processus       par utilisateur du noyau Linux, mais il est possible de recompiler       son noyau pour l'augmenter      [<b>Note: </b><i>Cette limite est de 2048 processus        par utilisateur. On peut modifier cette limite en &eacute;ditant le fichier        include/linux/tasks.h de l'arborescence des sources du noyau.        La constante NR_TASKS indique le nombre maximum de processus        dans le noyau et MAX_TASKS_PER_USER le nombre de processus par        utilisateur, sa valeur par d&eacute;faut est NR_TASKS/2. En modifiant        les valeurs de ces constantes, on peut choisir la limite        d&eacute;sir&eacute;e.</i>     ]   .</p>       <p>Le JDK comporte trois variations de la machine virtuelle, suivant       le mode de liaison avec Motif :</p>       <ol>        <li>Une version <i>sans AWT</i>. Elle permet de lancer plus        rapidement des applications non graphiques. Pour lancer la VM avec        cette option, il faut affecter &agrave; la variable d'environnement        <tt>NS_JAVA</tt> une cha&icirc;ne de longueur non nulle (par exemple        <tt>export NS_JAVA="true"</tt>).</li>        <li>Une version <i>li&eacute;e dynamiquement</i> &agrave; Motif. Pour la        lancer, affecter &agrave; la variable d'environnement <tt>DYN_JAVA</tt>        une cha&icirc;ne de longueur non nulle (par exemple <tt>export 	DYN_JAVA="true"</tt>).</li>        <li>Une derni&egrave;re version <i>li&eacute;e statiquement</i> aux        biblioth&egrave;ques Motif. Pour la lancer, il suffit qu'aucune des deux        variables d'environnement <tt>NS_JAVA</tt> et <tt>DYN_JAVA</tt>        ne soit d&eacute;finie (on pourra s'en assurer avec <tt>unset NS_JAVA</tt>        et <tt>unset DYN_JAVA</tt>).</li>       </ol>       <p>A chaque mode de liaison &agrave; Motif correspond un ex&eacute;cutable dans un       sous r&eacute;pertoire du r&eacute;pertoire <tt>bin</tt> de votre r&eacute;pertoire       d'installation du JDK ou du JRE. Ils sont appel&eacute;s par les scripts du       r&eacute;pertoire <tt>bin</tt> qui testent les variables d'environnement       avant de choisir l'ex&eacute;cutable &agrave; lancer.</p>       <p>Ces machines virtuelles demandent toutes (&agrave; l'exception des versions       1.0 et 1.1 de Blackdown) une distribution r&eacute;cente. En effet, elles        requi&egrave;rent :</p>       <ol>       <li>Un noyau 2.2</li>       <li>Une glibc en version 2.1</li>      </ol>            <p>Nous allons maintenant voir dans le d&eacute;tail l'offre en mati&egrave;re de      machines virtuelles. Pour Linux, on compte pas moins de trois       distributeurs de machines virtuelles :</p>      <h4> <a name="Blackdown">Blackdown</a> </h4>       <ul>       <li> <a href="http://www.blackdown.org/java-linux/ports.html">http://www.blackdown.org/java-linux/ports.html</a> </li>       <li> <a href="http://khendricks.ivey.uwo.ca/linuxppc/jdk">http://khendricks.ivey.uwo.ca/linuxppc/jdk</a> </li>       <li>        <a href="http://java.sun.com/products/jdk/1.2/LICENSE">http://java.sun.com/products/jdk/1.2/LICENSE</a> </li>      </ul>       <p>Blackdown est une organisation visant &agrave; porter le JDK sous Linux,       et a &eacute;t&eacute; longtemps la seule &agrave; s'int&eacute;resser &agrave; cette plateforme (avant       la prise en compte du march&eacute; Linux par Sun et IBM).</p>       <p>Blackdown propose sur son site des versions du JDK de la version 1.0.2       &agrave; la 1.2.2 (en version RC4 pour le moment). Ces VMs sont de       qualit&eacute; tr&egrave;s in&eacute;gale qui croit g&eacute;n&eacute;ralement avec le num&eacute;ro de        version.</p>       <p> <b>JDK 1.0.2</b> </p> <p>La version 1.0.2 (dont le portage        a &eacute;t&eacute; r&eacute;alis&eacute; par Randy Chapman) a le m&eacute;rite d'exister, mais est        tr&egrave;s peu fiable. &Agrave; &eacute;viter donc, d'autant plus qu'il y a peu        d'int&eacute;r&ecirc;t &agrave; utiliser encore un JDK 1.0 (les navigateurs eux-m&ecirc;mes        sont tous munis de machines virtuelles 1.1).</p>       <p> <b>JDK 1.1</b> </p> <p>Les versions 1.1 (de la 1.1.6 &agrave; la        1.1.8) sont de bonne qualit&eacute;, mais sont livr&eacute;es sans JIT. On        pourra leur adjoindre un JIT Open Source comme TYA ou ShuJIT, mais        leur vitesse reste inf&eacute;rieure d'un facteur quatre environ &agrave; de        bonnes VM 1.1, comme celle d'IBM par exemple (dont le JIT est        excellent). Un JRE (Java Runtime Environment) est aussi disponible       au t&eacute;l&eacute;chargement      [<b>Note: </b><i>Le JRE est le minimum n&eacute;cessaire pour faire       tourner une application Java : il ne comporte qu'une VM et tous les        outils de d&eacute;veloppement en ont &eacute;t&eacute; &eacute;limin&eacute;s pour l'all&eacute;ger au        maximum. Compter tout de m&ecirc;me une dizaine de Mo.</i>     ]   .</p>       <p> <b>JDK 1.2.2</b> </p> <p>La version 1.2.2 est de tr&egrave;s        bonne qualit&eacute; (actuellement en version RC 4) et livr&eacute;e avec un        JIT de Sun (libsunwjit) de bonne facture. Il est possible        de la faire tourner avec des green threads ou des threads        natifs. Par d&eacute;faut, elle utilise des threads natifs, mais        on peut utiliser des green threads en passant l'argument        <tt>-green</tt> &agrave; la VM. Blackdown propose aussi un JRE,       un Java PlugIn             [<b>Note: </b><i>Le Java PlugIn permet d'ajouter une machine virtuelle Sun        &agrave; Netscape. Cela est tr&egrave;s utile vu la qualit&eacute; tr&egrave;s m&eacute;diocre de        la VM livr&eacute;e avec les versions 4 du Navigator. Il faut cependant        changer les tags &lt;applet&gt; en &lt;embed&gt;. Sun propose un outil        pour r&eacute;aliser automatiquement cette conversion.</i>     ]    et       une version de d&eacute;buggage pour d&eacute;bugger des librairies JNI ou envoyer        un rapport de bug &agrave; Blackdown. Pour finir, son JDK int&egrave;gre le JPDA            [<b>Note: </b><i>JPDA (pour Java Platform Debugger Architecture) est un        support de d&eacute;buggage pour la plateforme Java 2. Il d&eacute;finit        des APIs utilis&eacute;es par les d&eacute;buggeurs modernes pour acc&eacute;der        aux informations de d&eacute;buggage.</i>     ]   , alors qu'il faut le       t&eacute;l&eacute;charger s&eacute;par&eacute;ment pour les versions Windows et Solaris.</p>       <p>Blackdown a aussi r&eacute;alis&eacute; le portage de Java3D pour Linux en       version 1.1.3. Pour l'utiliser, il faut avoir install&eacute; une       implantation de OpenGL (comme Mesa 3.1 &agrave; l'adresse       <a href="http://www.mesa3d.org">http://www.mesa3d.org</a>).</p>            <h4> <a name="Sun">Sun</a> </h4>       <ul>       <li> <a href="http://java.sun.com/products/jdk/1.2">http://java.sun.com/products/jdk/1.2</a> </li>       <li>        <a href="http://java.sun.com/products/jdk/1.2/LICENSE">http://java.sun.com/products/jdk/1.2/LICENSE</a> </li>      </ul>       <p>Sun propose maintenant un portage Linux de son JDK 1.2.2.        Cette version est de tr&egrave;s bonne qualit&eacute; (maintenant en version        <i>Production release</i>). Il est tr&egrave;s proche de la version        de Blackdown (dont il est issu), les diff&eacute;rences notables &eacute;tant :</p>       <ul>       <li>Il ne comporte pas de JIT. Sun recommande d'utiliser le        <a href="http://www.inprise.com/jbuilder/linux/download/">http://www.inprise.com/jbuilder/linux/download/</a> (et pas le leur int&eacute;gr&eacute; dans le JDK Blackdown         ?).</li>       <li>Il utilise les green threads (les threads natifs ne        sont pas support&eacute;s dans cette version).</li>      </ul>            <h4> <a name="IBM">IBM</a> </h4>       <ul>       <li> <a href="http://www.ibm.com/java/jdk/118/linux">http://www.ibm.com/java/jdk/118/linux</a> </li>       <li> <a href="http://alphaworks.ibm.com/tech/linuxjdk">http://alphaworks.ibm.com/tech/linuxjdk</a> </li>       <li>International License Agreement for Evaluation of Programs</li>      </ul>       <p>IBM a &eacute;t&eacute; (en son temps) pionnier pour le d&eacute;veloppement de       machines virtuelles pour Linux. La sortie de sa version 1.1.6 a fait       sensation dans la communaut&eacute; des d&eacute;veloppeurs Java sous Linux.</p>       <p>IBM propose deux machines virtuelles pour Linux :</p>       <ul>       <li>Une 1.1.8 de bonne facture (en version finale).</li>       <li>Une 1.3 encore en version b&ecirc;ta (mais cette version        du JDK est encore en b&ecirc;ta pour les versions Windows et Solaris).</li>      </ul>       <p>Ces VMs sont remarquables par la qualit&eacute; de leur JIT. Mes tests        me font penser qu'il est plus lent au lancement, mais que les        optimisations de code sont plus pouss&eacute;es ce qui donne de meilleures        performances pour des applications ayant une dur&eacute;e de vie d&eacute;passant        les quelques secondes      [<b>Note: </b><i>Pour des applications ne durant que        quelques secondes, on aura int&eacute;r&ecirc;t &agrave; d&eacute;sactiver le JIT en donnant         &agrave; la variable d'environnement JAVA_COMPILER une valeur quelconque.       </i>     ]   .</p>       <p>Les VM d'IBM utilisent les threads natifs. D'apr&egrave;s       l'exp&eacute;rience de certain utilisateurs, les applications comportant       de nombreux threads auraient cependant tendance &agrave; bloquer X en       s'accaparant toutes les ressources CPU. Il semblerait que cela soit       d&ucirc; &agrave; la priorit&eacute; accord&eacute;e aux processus associ&eacute;s aux threads.</p>       <p>IBM met aussi &agrave; disposition une implantation de l'API JavaComm       permettant d'acc&eacute;der aux ports s&eacute;rie et parall&egrave;le de l'ordinateur.</p>            <h4> <a name="Linux sur Alpha, PPC, Sparc et ARM">Linux sur Alpha, PPC, Sparc et ARM</a> </h4>       <p>Voici un tableau r&eacute;capitulatif des ports pour Linux sur ces        diff&eacute;rentes architectures :</p>                            <p> 	Java 	Intel 	Alpha 	PPC 	Sparc 	ARM        </p>        <p> 	1.0 	oui 	non 	non 	non 	non        </p>        <p> 	1.1 	oui 	oui 	oui 	oui 	oui        </p>        <p> 	1.2 	oui 	non 	oui 	oui 	non        </p>        <p> 	1.3 	oui 	non 	non 	non 	non        </p>                         <p>Ces ports ont &eacute;t&eacute; r&eacute;alis&eacute;s pour l'essentiel par       <a href="http://www.blackdown.org/java-linux/ports.html">http://www.blackdown.org/java-linux/ports.html</a>       (sauf la version 1.1.8 et 1.2 pour PPC qui a &eacute;t&eacute; port&eacute;e par      <a href="http://khendricks.ivey.uwo.ca/linuxppc/jdk/">http://khendricks.ivey.uwo.ca/linuxppc/jdk/</a> qui s'est associ&eacute; avec Blackdown pour ses futurs       travaux et la version 1.1.6 pour Sparc qui a &eacute;t&eacute; r&eacute;alis&eacute;e par      Johan Vos). La VM pour Linux sur Alpha existe en version 1.1.7 (et       il faut un peu chercher sur le site de Blackdown pour en trouver la       trace).</p>      <p>La liste des portages du JDK (toutes plateformes confondues) se       trouve &agrave; l'url <a href="http://java.sun.com/cgi-bin/java-ports.cgi">http://java.sun.com/cgi-bin/java-ports.cgi</a>.      On peut trouver une documentation sur l'installation d'une VM sous      Linux (et bien d'autres documentations sur Linux) sur le site      <a href="http://www.linux-france.org/article/devl/java-linux.html">http://www.linux-france.org/article/devl/java-linux.html</a>.     </p>          <h3> <a name="Kaffe">Kaffe</a> </h3>      <ul>      <li> <a href="http://www.kaffe.org">http://www.kaffe.org</a> </li>      <li>Licence <a href="http://www.gnu.org/copyleft/gpl.html">http://www.gnu.org/copyleft/gpl.html</a>      </li>     </ul>      <p>Kaffe est une impl&eacute;mentation libre de machine virtuelle Java.       Elle est livr&eacute;e notamment avec la distribution RedHat (dans ses      versions 5.x et 6.x). Elle a &eacute;t&eacute; port&eacute;e sur de <i>tr&egrave;s</i>       nombreuses plateformes (pas moins de 43, dont 33 avec JIT !). La       liste des plateformes support&eacute;es est disponible &agrave; l'adresse      <a href="http://www.transvirtual.com/products/platforms.html">http://www.transvirtual.com/products/platforms.html</a>.     </p>      <p>Les performances ne sont malheureusement pas au rendez-vous      malgr&eacute; la pr&eacute;sence d'un JIT. Elles se situeraient au niveau de la      machine virtuelle de Sun <i>sans</i> JIT d'apr&egrave;s les tests des      auteurs. Malgr&eacute; des progr&egrave;s certains ces derniers mois, la       fiabilit&eacute; n'est pas encore son point fort et de nombreuses       fonctionnalit&eacute;s n'ont pas encore &eacute;t&eacute; impl&eacute;ment&eacute;es (voir la liste &agrave;      <a href="http://www.kaffe.org/develop.html">http://www.kaffe.org/develop.html</a>). Manquent notamment       &agrave; l'appel le mod&egrave;le de s&eacute;curit&eacute; (aucune forme de s&eacute;curit&eacute; n'est       pr&eacute;sente dans la machine virtuelle) et RMI.</p>      <p>D'autre part, bien que sous licence GPL, Transvirtual a implant&eacute;      les extensions propri&eacute;taires de Microsoft en collaboration       avec ce dernier. Ces "fonctionnalit&eacute;s" laissent perplexe et ne sont      pas pour am&eacute;liorer l'image de Transvirtual aupr&egrave;s des d&eacute;veloppeurs      Java pour lesquels la portabilit&eacute; est une qualit&eacute;       essentielle du langage. Pour plus de d&eacute;tails sur cette affaire,      on pourra consulter l'article       <a href="http://www.zdnet.com/zdnn/stories/news/0,4586,2275724,00.html">http://www.zdnet.com/zdnn/stories/news/0,4586,2275724,00.html</a>.</p>      <p>On comprendra que cette machine virtuelle (bien qu'&eacute;lue meilleure      machine virtuelle de l'ann&eacute;e 1998 par       <a href="http://www.javaworld.com">http://www.javaworld.com</a>) n'est pas encore &agrave;      la hauteur malgr&eacute; son exceptionnelle portabilit&eacute;. Si le num&eacute;ro de      version 1.0 semble usurp&eacute;, on peut cependant esp&eacute;rer des      am&eacute;liorations sensibles qui en feront une alternative int&eacute;ressante &agrave;      l'offre des autres fournisseurs.</p>          <h3> <a name="Japhar">Japhar</a> </h3>      <ul>      <li> <a href="http://www.japhar.org">http://www.japhar.org</a> </li>      <li>Licence <a href="http://www.gnu.org/copyleft/lgpl.html">http://www.gnu.org/copyleft/lgpl.html</a>      </li>     </ul>      <p>Une autre machine virtuelle sous licence LGPL disponible sur de      nombreuses plateformes (voir       <a href="http://www.japhar.org/supported.html">http://www.japhar.org/supported.html</a>). Malgr&eacute; des       <a href="http://sourceware.cygnus.com/mauve">http://sourceware.cygnus.com/mauve</a> favorables, la compatibilit&eacute; Java semble tr&egrave;s      approximative. Sa jeunesse (la version test&eacute;e est num&eacute;rot&eacute;e 0.08)      peut expliquer sa faible fiabilit&eacute;. De plus, il manque de toute      &eacute;vidence des param&egrave;tres aussi indispensables que la taille maximale      de la m&eacute;moire allou&eacute;e (option <tt>-mx</tt> sur la ligne de      commande).</p>      <p>N&eacute;cessite les classes du JDK de Sun (fichier <tt>classes.zip</tt>       du r&eacute;pertoire <tt>/lib</tt>). Japhar pourra cependant profiter des       classes libres du projet       <a href="http://www.classpath.org">http://www.classpath.org</a>. Cette machine      virtuelle impl&eacute;mente l'interface OJI      [<b>Note: </b><i>OJI pour Open Java       Interface.</i>     ]   , il est donc possible de l'inclure dans       <a href="http://www.mozilla.org">http://www.mozilla.org</a>.</p>      <p>La derni&egrave;re version datant de mars 1999, on est amen&eacute; &agrave; se      poser des questions sur le suivi du projet.</p>          <h3> <a name="Choix d'une machine virtuelle">Choix d'une machine virtuelle</a> </h3>      <p>Au vu de la faible qualit&eacute; des machines virtuelles libres, on      doit se tourner vers les portages de celle de Sun. Pour une machine      virtuelle 1.1 ou 1.3, on choisira les versions d'IBM. Pour une      version 1.2, on a le choix entre les portages de Blackdown ou de      Sun qui me semblent &ecirc;tre &eacute;quivalents.</p>             <h2> <a name="Compilateurs Just in Time">Compilateurs Just in Time</a> </h2>     <p>Un compilateur Just In Time compile &agrave; la vol&eacute;e (pendant que le     programme tourne) les classes Java en code natif. Elle acc&eacute;l&egrave;rent     l'ex&eacute;cution des programmes d'un facteur que l'on peut estimer de     l'ordre de 10. Cependant, la compilation prend un temps qui ralentit     le lancement de l'application. On aura donc int&eacute;r&ecirc;t &agrave; d&eacute;sactiver le     JIT pour lancer des programmes &agrave; dur&eacute;e de vie tr&egrave;s courte (comme     un compilateur).</p>     <p>Je ne pr&eacute;sente ci-dessous que les JITs qui ne sont pas int&eacute;gr&eacute;s     &agrave; des VMs cit&eacute;es ci-dessus.</p>     <h3> <a name="JIT Borland">JIT Borland</a> </h3>      <ul>      <li> <a href="http://www.inprise.com/jbuilder/linux/download/">http://www.inprise.com/jbuilder/linux/download/</a> </li>      <li>Inprise Corporation EXPERIMENTAL TEST SOFTWARE License</li>     </ul>        <p>Le JIT de Borland est encore en version b&ecirc;ta, mais il semble      d&eacute;j&agrave; suffisamment stable pour une utilisation intensive (c'est       le JIT recommand&eacute; par Sun pour son JDK 1.2.2). Il semblerait      que ses performances le placent au niveau des JITs que l'on trouve      sur les autres plateformes de d&eacute;veloppement Java.</p>          <h3> <a name="TYA">TYA</a> </h3>      <ul>      <li> <a href="ftp://gonzalez.cyberus.ca/pub/Linux/java">ftp://gonzalez.cyberus.ca/pub/Linux/java</a> </li>      <li>Licence <a href="http://www.gnu.org/copyleft/gpl.html">http://www.gnu.org/copyleft/gpl.html</a>      </li>     </ul>      <p>TYA est un compilateur Just in Time libre pour les portages du       JDK de Blackdown pour architecture Intel. Fonctionne aussi sous BSD.       Une machine virtuelle est n&eacute;cessaire &agrave; son fonctionnement.</p>      <p>Sa fiabilit&eacute; est devenue excellente: l'auteur l'a longtemps      utilis&eacute; et l'a rarement vu planter. Son fonctionnement est       particuli&egrave;rement simple : il compile une m&eacute;thode enti&egrave;re en       associant &agrave; chaque instruction du bytecode une s&eacute;quence       d'instruction en langage machine. <i>Aucune optimisation</i>       n'est r&eacute;alis&eacute;e. Malgr&eacute; ce fonctionnement simple, les performances       sont grandement am&eacute;lior&eacute;es (d'un facteur estim&eacute; entre 3 et 10 suivant       les sources).</p>      <p>Bien que l'acc&eacute;l&eacute;ration des applications soit sensible, ses      performances restent tr&egrave;s en dessous de celles des JIT de Borland,      Sun ou IBM. Son int&eacute;r&ecirc;t a donc beaucoup p&acirc;ti des r&eacute;cents portages      des VMs des principaux acteurs du march&eacute; Java.</p>          <h3> <a name="shuJIT">shuJIT</a> </h3>      <ul>      <li> <a href="http://www.shudo.net/jit">http://www.shudo.net/jit</a> </li>      <li>Licence <a href="http://www.gnu.org/copyleft/gpl.html">http://www.gnu.org/copyleft/gpl.html</a>      </li>     </ul>      <p>ShuJIT est un compilateur &agrave; la vol&eacute;e comparable &agrave; TYA. Ses      performances s'en approchent et il est distribu&eacute; sous licence      GPL. Il fonctionne avec les portages du JDK 1.1 pour Linux et      FreeBSD sur x86.</p>      <p>L'auteur n'a pas eu l'occasion de le tester longuement, mais le      version 0.2.10 semble fonctionner correctement avec les programmes      test&eacute;s. L'auteur du programme propose des tests comparatifs sur sa      page. Ils tendent &agrave; prouver que shuJIT est comparable, en termes de      performances, &agrave; TYA.</p>              <h3> <a name="Cacao">Cacao</a> </h3>      <ul>      <li> <a href="http://www.complang.tuwien.ac.at/java/cacao">http://www.complang.tuwien.ac.at/java/cacao</a> </li>      <li>Licence <a href="http://www.gnu.org/copyleft/gpl.html">http://www.gnu.org/copyleft/gpl.html</a>      </li>     </ul>      <p>Cacao est un compilateur JIT libre pour Alpha (Linux et Digital      UNIX). Non test&eacute; (l'auteur n'a pas la chance de disposer d'une      station Alpha).</p>          <h3> <a name="Metrowerks">Metrowerks</a> </h3>      <ul>      <li> <a href="http://khendricks.ivey.uwo.ca/linuxppc/">http://khendricks.ivey.uwo.ca/linuxppc/</a> </li>      <li>gratuit</li>     </ul>      <p>Metrowerks propose un JIT pour mklinux (Power PC) en compl&eacute;ment      du JDK 1.1.7. Non test&eacute;.</p>             <h2> <a name="Navigateurs compatibles Java">Navigateurs compatibles Java</a> </h2>     <p>Disposer d'un navigateur compatible Java est indispensable      pour d&eacute;velopper des applets dans de bonnes conditions car      l'applet viewer de Sun n'affiche pas la page HTML dans laquelle     tourne l'applet (il n'affiche que les applets du fichier HTML     pass&eacute; en argument).</p>     <h3> <a name="Netscape Navigator">Netscape Navigator</a> </h3>     <ul>      <li> <a href="http://www.netscape.com">http://www.netscape.com</a> </li>      <li>gratuit</li>     </ul>      <p>On ne pr&eacute;sente plus Netscape et son c&eacute;l&egrave;bre navigateur. La      version disponible pour Linux souffre cependant d'une stabilit&eacute;      incertaine et d'une machine virtuelle tr&egrave;s lente. Sa tr&egrave;s large      diffusion en fait cependant un outil de test indispensable.</p>      <p>Il est maintenant possible d'installer une bien meilleure      machine virtuelle depuis la disponibilit&eacute; du Java Plugin.      Cependant, dans la mesure o&ugrave; ce Plugin doit &ecirc;tre install&eacute;      pour visualiser les applets et le tag utilis&eacute; n'&eacute;tant pas le      classique tag &lt;applet&gt;, il n'est int&eacute;ressant que pour les      environnements o&ugrave; l'on contr&ocirc;le le client (comme en intranet      par exemple). on peut alors distribuer des applets utilisant      Swing par exemple ou des nouvelles fonctionnalit&eacute;s de la      version 1.2 de Java. Un outil permet de traduire les tags      &lt;applet&gt; pour une utilisation avec le plugin.</p>          <h3> <a name="Hot Java">Hot Java</a> </h3>      <ul>      <li> <a href="http://java.sun.com/products/hotjava">http://java.sun.com/products/hotjava</a> </li>      <li>gratuit</li>     </ul>      <p>HotJava est un navigateur de Sun &eacute;crit en Java. Il fonctionne      donc sur toute plateforme disposant d'une machine virtuelle (la      version actuelle, la 3.0, tourne sur des machines virtuelles 1.1      mais pas sur des VMs 1.2). On notera que Sun propose une version       Linux au t&eacute;l&eacute;chargement.</p>      <p>Ses performances d&eacute;pendent bien s&ucirc;r de celles de la machine      virtuelle sur laquelle il tourne. Il est cependant tr&egrave;s int&eacute;ressant      pour tester des applets en situation dans une page HTML avec des      performances acceptables.</p>      <p>Il existe aussi un composant HTML (JavaBean) permettant d'inclure      un navigateur dans ses applications.</p>          <h3> <a name="Navigateur ICE">Navigateur ICE</a> </h3>      <ul>      <li> <a href="http://193.214.249.162">http://193.214.249.162</a> </li>      <li>commercial, une version de d&eacute;monstration est disponible.</li>     </ul>      <p>ICESoft propose un navigateur 100% pur Java, utile pour tester      ses applets. Un composant HTML est aussi disponible pour inclure un      navigateur dans ses applications.</p>             <h2> <a name="Compilateurs">Compilateurs</a> </h2>     <p>Je pr&eacute;sente ci-dessous les compilateurs Java autres que l'outil     javac pr&eacute;sent dans le JDK.</p>     <h3> <a name="Jikes">Jikes</a> </h3>      <ul>      <li> <a href="http://www10.software.ibm.com/developerworks/opensource/jikes/project/">http://www10.software.ibm.com/developerworks/opensource/jikes/project/</a> </li>      <li> <a href="http://www10.software.ibm.com/developerworks/opensource/license10.html">http://www10.software.ibm.com/developerworks/opensource/license10.html</a> </li>     </ul>      <p>Jikes est un compilateur Java &eacute;crit en C et donc extr&ecirc;mement      rapide. Il a &eacute;t&eacute; d&eacute;velopp&eacute; par IBM qui l'a pourvu d'une licence de      type logiciel libre.</p>      <p>Jikes est tr&egrave;s utile pour compiler rapidement de gros projets,      mais ses messages d'erreurs sont assez diff&eacute;rents de ceux du JDK et      donc parfois d&eacute;routants. Cependant, il g&egrave;re mieux les d&eacute;pendances que      javac. Le byte code produit semblerait moins optimis&eacute; que celui      produit par javac. Une option en ligne de commande (+E) lui permet       de formater ses messages d'erreurs de mani&egrave;re &agrave; &ecirc;tre compris par       Emacs.</p>      <p>Jikes est quasiment incontournable pour compiler rapidement de      gros projets.</p>          <h3> <a name="Pizza">Pizza</a> </h3>      <ul>      <li> <a href="http://www.cis.unisa.edu.au/~pizza">http://www.cis.unisa.edu.au/~pizza</a> </li>      <li>Gratuit</li>     </ul>      <p>Pizza est un compilateur Java gratuit. Les sources sont      disponibles pour un usage non commercial. Il est &eacute;crit en Java, il      faut donc une machine virtuelle pour utiliser ce compilateur.</p>      <p>Il pr&eacute;sente la particularit&eacute; d'&eacute;tendre le langage avec les      fonctionnalit&eacute;s suivantes:</p>      <ol>      <li>Polymorphisme param&eacute;trique: permet de param&eacute;trer un type       (semblable aux templates du C++).</li>      <li>Fonctions de premi&egrave;re classe: peuvent &ecirc;tre pass&eacute;es comme       param&egrave;tre, stock&eacute;es dans des variables et renvoy&eacute;es par des       m&eacute;thodes.</li>      <li>Transtypages permis entre types de base (int, boolean) et       objets wrapers (Integer, Boolean).</li>     </ol>      <p>Ces fonctionnalit&eacute;s sont int&eacute;ressantes (peut &ecirc;tre moins depuis       que Java int&egrave;gre l'introspection), mais le code n'est pas      tr&egrave;s lisible, et toutes ces fonctionnalit&eacute;s peuvent &ecirc;tre implant&eacute;es      de fa&ccedil;on classique (mais plus laborieuse). De plus, un programme      utilisant ces fonctionnalit&eacute;s (dans des fichiers source dont       l'extension est .pizza) ne peut, bien s&ucirc;r, &ecirc;tre compil&eacute; que par       Pizza.</p>      <p>D'apr&egrave;s les tests des auteurs, il compilerait deux fois plus vite      que Javac sur des sources volumineux. Pizza inclut aussi un syst&egrave;me      de documentation semblable &agrave; javadoc.</p>          <h3> <a name="Choix d'un compilateur">Choix d'un compilateur</a> </h3>      <p>Pour ma part, j'utilise Jikes pour compiler les projets en cours      de d&eacute;veloppement et recompile avec javac pour les tests et la      version distribu&eacute;e.</p>             <h2> <a name="Compilateurs natifs">Compilateurs natifs</a> </h2>     <p>Un compilateur natif compile un programme Java (ou des classes     Java) en code machine natif. On pourrait s'attendre &agrave; un gain     de performances substantiel, mais l'exp&eacute;rience montre que     l'acc&eacute;l&eacute;ration reste marginale (au plus quelques pourcents) du     fait de la grande qualit&eacute; des JITs actuels. De plus, cette     compilation native rend les binaires non portables entre     plateformes (bien que le source le reste).</p>     <h3> <a name="TowerJ">TowerJ</a> </h3>      <ul>      <li> <a href="http://www.towerj.com">http://www.towerj.com</a> </li>      <li>commercial (5000$, 495$ pour un usage non commercial)</li>     </ul>      <p>TowerJ est un compilateur natif commercial disponible pour de      nombreuses plateformes dont Linux. Il permet d'atteindre      d'excellentes performances, mais se destine surtout au c&ocirc;t&eacute;      serveur (il n'int&egrave;gre pas AWT et les libs &agrave; distribuer avec      l'appli sont assez volumineuses).</p>      <p>Il se classe r&eacute;guli&egrave;rement aux premi&egrave;res places dans les tests de      machines virtuelles (en particulier au       <a href="http://www.volano.com/benchmarks.html">http://www.volano.com/benchmarks.html</a>       qui teste les performances c&ocirc;t&eacute; serveur), cependant, ses performances      ne surpassent celles des meilleurs JITs que de quelques pourcents,      ce qui ne me semble pas justifier le prix exorbitant de ce       compilateur.</p>          <h3> <a name="GNU Compiler for Java">GNU Compiler for Java</a> </h3>          <ul>      <li> <a href="http://sourceware.cygnus.com/java">http://sourceware.cygnus.com/java</a> </li>      <li>Licence <a href="http://www.gnu.org/copyleft/gpl.html">http://www.gnu.org/copyleft/gpl.html</a> </li>     </ul>      <p>Cygnus est responsable de l'&eacute;volution du compilateur EGCS qui a      pris la suite de GCC. Un compilateur natif pour Java est en cours de      d&eacute;veloppement. Des versions b&ecirc;ta sont disponibles sur le site.</p>      <p>La gestion de AWT (graphisme) n'est pas encore implant&eacute;e, mais      cela sera fait dans un avenir proche. Les performances sont encore      en dessous de celles des meilleurs JITs, mais cette voie est      peut &ecirc;tre int&eacute;ressante sur le long terme dans la mesure o&ugrave; l'on      peut esp&eacute;rer que les performances surpassent celles de tous les      JITs, notamment en ce qui concerne la vitesse de lancement des      applications.</p>      <p>Le s&eacute;rieux de Cygnus nous laisse entrevoir de bonnes choses pour      ce compilateur natif int&eacute;gr&eacute; &agrave; EGCS (rebaptis&eacute; GCC-2.95 depuis que      Cygnus est charg&eacute; de l'&eacute;volution de GCC).</p>          <h3> <a name="Toba">Toba</a> </h3>      <ul>      <li> <a href="http://www.cs.arizona.edu/sumatra/toba">http://www.cs.arizona.edu/sumatra/toba</a> </li>      <li>gratuit</li>     </ul>      <p>Toba est un compilateur qui transforme des fichiers de classes      Java en code source C, permettant ainsi la construction      d'ex&eacute;cutables. On &eacute;vite ainsi la phase de compilation native des      compilateurs JIT.</p>      <p>La mauvaise nouvelle concernant Toba est que le projet a &eacute;t&eacute;      arr&ecirc;t&eacute;, on ne peut donc s'attendre &agrave; beaucoup de suivi.</p>          <h3> <a name="Harissa">Harissa</a> </h3>      <ul>      <li> <a href="http://www.irisa.fr/compose/harissa">http://www.irisa.fr/compose/harissa</a> </li>      <li>Licence <a href="http://www.gnu.org/copyleft/gpl.html">http://www.gnu.org/copyleft/gpl.html</a>      </li>     </ul>      <p>Harissa convertit le code Java en C et produit un makefile pour      compiler le programme. Il comporte aussi un interpr&eacute;teur. Cependant,      il ne supporte que la version 1.0.2 du langage (dont il faut se      procurer les classes, soit le fichier <tt>classes.zip</tt>).</p>      <p>On peut se poser des questions sur le suivi du projet      dans la mesure o&ugrave; les derni&egrave;res modifications sur le site remontent      &agrave; janvier 1999.</p>              <h3> <a name="La compilation native est-elle un bon choix ?">La compilation native est-elle un bon choix ?</a> </h3>      <p>Les compilateurs natifs peuvent pr&eacute;tendre &agrave; de meilleures      performances que celles des JITs, mais les implantations actuelles      sont soit beaucoup trop ch&egrave;res (TowerJ), soit inefficaces et      peu suivies (projets Toba et Harissa).</p>      <p>Cependant, c'est peut &ecirc;tre une voie &agrave; suivre, seul l'avenir       nous le dira.</p>             <h2> <a name="Environnements de d&eacute;veloppement">Environnements de d&eacute;veloppement</a> </h2>     <h3> <a name="Emacs + JDE">Emacs + JDE</a> </h3>      <ul>      <li> <a href="http://www.gnu.org/software/emacs/emacs.html">http://www.gnu.org/software/emacs/emacs.html</a>       et <a href="http://sunsite.auc.dk/jde">http://sunsite.auc.dk/jde</a>      </li>      <li>Licence <a href="http://www.gnu.org/copyleft/gpl.html">http://www.gnu.org/copyleft/gpl.html</a> </li>     </ul>      <p>Emacs est l'&eacute;diteur de texte de GNU qui peut &ecirc;tre &eacute;tendu par des      fonctions Lisp. On trouve ainsi des extensions pour lire son email,      programmer en C, v&eacute;rifier l'orthographe, etc. Si son aspect est      rebutant au premier abord, sa richesse en fait un outil      indispensable, et notamment pour la programmation Java.</p>      <p>JDE est un ensemble de fonctions Lisp permettant de tirer le      meilleur parti d'Emacs pour la programmation Java. Il utilise les      outils (compilateur javac, appletviewer, jdb) du JDK.</p>      <p>Il permet:</p>      <ol>      <li>Par menu de compiler, lancer, d&eacute;bugger, construire une        application</li>      <li>De naviguer dans les classes (Speedbar)</li>      <li>D'afficher la documentation des classes</li>      <li>La coloration syntaxique et l'autoindentation</li>      <li>D'afficher les lignes de code comportant des erreurs</li>      <li>De d&eacute;bugger en affichant le code (avec jdb ou JDebug)</li>      <li>De g&eacute;n&eacute;rer automatiquement du code</li>      <li>De param&eacute;trer visuellement les outils</li>      <li>Int&egrave;gre l'interpr&eacute;teur de code Beanshell</li>     </ol>        <p>Ce programme rend Emacs aussi productif pour la programmation      Java qu'un environnement commercial (bien que son aspect soit plus      sobre). Ses fonctions se r&eacute;sument &agrave; l'essentiel, mais cela me semble      largement suffisant. Le tout est extr&ecirc;mement stable et s'int&egrave;gre       parfaitement &agrave; Emacs.</p>          <p>Il existe des extensions bien pratiques &agrave; JDE. On notera en      particulier:</p>      <ul>      <li> <a href="http://sunsite.auc.dk/jde/contrib/jdok.el">http://sunsite.auc.dk/jde/contrib/jdok.el</a> :       permet de g&eacute;n&eacute;rer automatiquement le squelette de commentaires       JavaDoc, avec param&egrave;tres et valeur de retour. Vite indispensable       pour commenter ses sources.</li>      <li> <a href="http://sunsite.auc.dk/jde/contrib/javahelp.el">http://sunsite.auc.dk/jde/contrib/javahelp.el</a> : affiche la documentation de Sun par recherche        du mot se trouvant sous le point.</li>      <li> <a href="http://sunsite.auc.dk/jde/contrib/jsee.el">http://sunsite.auc.dk/jde/contrib/jsee.el</a> :       construit la documentation javadoc de la classe du buffer et        l'affiche dans le navigateur par d&eacute;faut de Emacs.</li>     </ul>      <p>Une version b&ecirc;ta (la 2.1.6) int&egrave;gre un nouveau d&eacute;buggeur visuel      (JDebug) utilisant l'API JPDA.</p>      <p>La grande qualit&eacute; de JDE est la stabilit&eacute; et le fait d'&ecirc;tre      int&eacute;gr&eacute; &agrave; Emacs (ce qui rend l'utilisation plus simple pour les      aficionados de cet &eacute;diteur).</p>      <p>On peut lui reprocher l'absence de d&eacute;buggeur puissant (l'usage      de JDB est tout de m&ecirc;me assez p&eacute;nible) et d'un constructeur      visuel d'interface. De plus, la configuration peut s'av&eacute;rer       d&eacute;licate pour un d&eacute;butant : les options de configurations sont      tr&egrave;s nombreuses et on a vite fait de se perdre dans les menus.</p>          <h3> <a name="JBuilder 3.5 Foundation">JBuilder 3.5 Foundation</a> </h3>      <ul>      <li> <a href="http://www.borland.fr/Download/jbuilderfondation/index.asp">http://www.borland.fr/Download/jbuilderfondation/index.asp</a> </li>      <li>Gratuit en version Foundation</li>     </ul>      <p>L'investissement de Borland dans Linux s'est concr&eacute;tis&eacute; ces      derniers mois avec la diffusion d'un JIT et de leur EDI Java      JBuilder.</p>      <p>La version Foundation est la nouvelle g&eacute;n&eacute;ration de leur EDI      &eacute;crite 100% en Java, ce qui du coup la rend disponible pour       toutes les plateformes b&eacute;n&eacute;ficiant d'une machine virtuelle       performante (versions Windows, Solaris et Linux). Cette       application est int&eacute;ressante &agrave; plus d'un titre :</p>      <ul>      <li>Elle montre qu'une application de grande diffusion peut       &ecirc;tre r&eacute;alis&eacute;e en Java (avec les JFC)</li>      <li>Elle d&eacute;montre la portabilit&eacute; de Java dont certains doutaient       (<i>write once, test everywhere</i>), surtout du fait des       probl&egrave;mes suppos&eacute;s de portabilit&eacute; des applications AWT.</li>     </ul>      <p>Non seulement cette application est novatrice, mais elle est      tr&egrave;s agr&eacute;able &agrave; utiliser. On remarquera en particulier sa      stabilit&eacute; qui n'est pas sans rappeler celle des produits de la      meilleure &eacute;poque de Borland (comme Turbo Pascal      ou Borland C++). On y trouve tout ce que l'on peut attendre d'un      EDI de qualit&eacute; : un &eacute;diteur de bonne facture, un excellent d&eacute;buggeur      et quelques petits plus qui facilitent la vie du d&eacute;veloppeur, comme      le rappel des arguments d'une m&eacute;thode ou la v&eacute;rification syntaxique      en temps r&eacute;el. Le constructeur visuel d'interface est agr&eacute;able &agrave;      utiliser et produit un code de qualit&eacute;, mais que l'on peut cependant      optimiser &agrave; la main.</p>      <p>Cette version Foundation est modulaire et peut accueillir des      extensions. Borland fournit une API appel&eacute;e OpenTools, pour       le d&eacute;veloppement de telles extensions. Pour plus de renseignements sur       cet aspect de JBuilder, on pourra visiter la page de Blake Stone,       l'architecte de JBuilder, qui d&eacute;taille cette architecture et propose       des tutoriels &agrave; l'adresse       <a href="http://homepages.borland.com/bstone">http://homepages.borland.com/bstone</a>.</p>      <p>JBuilder 3.5 existe en version Foundation (sans limitations de      dur&eacute;e mais ne disposant pas de tous les outils des autres versions),      d'une version professionnelle int&eacute;grant la gestion des bases de      donn&eacute;es et la version entreprise g&eacute;rant les EJB      [<b>Note: </b><i>Entreprise       Java Beans, des composants m&eacute;tier &agrave; int&eacute;grer &agrave; des serveurs        d'applications.</i>     ]   </p>      <p>On pourra reprocher &agrave; JBuilder l'absence de gestionnaire de version       et des limitations parfois s&eacute;v&egrave;res dans la version Foundation (il est      ainsi impossible de g&eacute;n&eacute;rer une interface, il faut g&eacute;n&eacute;rer une classe      puis modifier le source <i>&agrave; la main</i> pour en faire une       interface). De plus, il faut disposer de beaucoup de RAM pour &ecirc;tre      &agrave; l'aise (compter 128 Mo).</p>      <p>L'outil de conception visuelle d'interface se veut bidirectionnel      (on devrait pouvoir &eacute;diter le code produit par le logiciel), mais      mon exp&eacute;rience montre que c'est &agrave; &eacute;viter : il peut arriver que      l'on perde du code que l'on a &eacute;dit&eacute; si l'on retourne au module de      conception visuelle.</p>      <p>Malgr&eacute; ces petits d&eacute;fauts, JBuilder reste un excellent outil qui      a permis &agrave; Borland de gagner une place de leader dans le march&eacute; des      outils de d&eacute;veloppement Java.</p>          <h3> <a name="Forte for Java">Forte for Java</a> </h3>      <ul>      <li> <a href="http://www.sun.com/forte/ffj/">http://www.sun.com/forte/ffj/</a> </li>      <li>Gratuit en version Community</li>     </ul>      <p>Sun a r&eacute;cemment fait l'acquisition de NetBeans et de Forte,      deux fournisseurs d'environnements de d&eacute;veloppement Java pour      remplacer ses outils Java Workshop et Java Studio. Forte for Java      est disponible aussi en version Internet (qui int&egrave;gre les outils       de la plateforme entreprise de Java, donc les EJB, RMI, Corba et      JNDI) et Entreprise (qui permet le travail en &eacute;quipe et facilite      le d&eacute;ploiement des applications).</p>      <p>NetBeans a &eacute;t&eacute; le premier outil de d&eacute;veloppement Java d'envergure      cod&eacute; en Java et disposant de possibilit&eacute;s d'extension. Il sera      par exemple possible d'y int&eacute;grer Together/J (outil de mod&eacute;lisation      UML et de g&eacute;n&eacute;ration de code) dans une prochaine version.</p>      <p>Forte for Java int&egrave;gre un module visuel de conception d'interface      graphique, un d&eacute;buggeur un syst&egrave;me de compl&eacute;tion de code et facilite      le d&eacute;veloppement des JSP      [<b>Note: </b><i>Java Server Pages, ce sont des pages       HTML comportant du code Java et compil&eacute;es automatiquement sous forme        de servlets par le serveur lui m&ecirc;me.</i>     ]   . De plus, il comporte      un syst&egrave;me de mise &agrave; jour automatique par l'internet (il se connecte      r&eacute;guli&egrave;rement au site de Sun et propose de t&eacute;l&eacute;charger de nouvelles      extensions ou des mises &agrave; jour lorsqu'elles sont disponibles).</p>      <p>On reprochera &agrave; Forte for Java son app&eacute;tit de m&eacute;moire et de      cycles CPU qui le rend inutilisable sur de petites configurations      (128 Mo de RAM est un minimum).</p>          <h3> <a name="Visual Age for Java">Visual Age for Java</a> </h3>      <ul>      <li> <a href="http://www-4.ibm.com/software/ad/vajava/">http://www-4.ibm.com/software/ad/vajava/</a> </li>      <li>Gratuit en version Entry</li>     </ul>      <p>Visual Age for Java est l'environnement de d&eacute;veloppement Java       d'IBM. Vu l'investissement de ce dernier dans la technologie Java,       on pouvait s'attendre &agrave; un bon outil, et on est pas d&eacute;&ccedil;u !</p>      <p>IBM propose une version "Entry" gratuite et sans limitation, si       ce n'est le nombre de classes limit&eacute; &agrave; 750 dans le repository.      IBM propose aussi une version standard sans limitations et une      version Entreprise permettant le travail en &eacute;quipe (gestion      commune du repository).</p>      <p>VAJ est un outil tr&eacute;s performant mais difficile &agrave; prendre en main       car d&eacute;routant : le code est inaccessible dans sa globalit&eacute; et on ne      peut y acc&eacute;der que par m&eacute;thodes. Il est cependant possible d'exporter      le code sous forme de sources ou de classe Java. Le code est       entrepos&eacute; dans un repository (comparable &agrave; celui de CVS) et       enti&egrave;rement g&eacute;r&eacute; par le syst&egrave;me. Lorsqu'on enregistre une m&eacute;thode,      un paquet ou un projet, Visual Age r&eacute;alise une compilation       incr&eacute;mentale et signale les erreurs &eacute;ventuelles. Toutes les versions      d'une m&eacute;thode sont accessibles et l'on peut <i>geler</i> une      version (en lui donnant un nom) pour un projet, un paquet ou une      m&eacute;thode. Cette version sera ensuite toujours accessible.</p>      <p>Hormis ces particularit&eacute;s, Visual Age propose tout ce que l'on      peut attendre d'un EDI de qualit&eacute; : d&eacute;buggeur, construction      visuelle de l'interface (et de la gestion des &eacute;v&eacute;nements).</p>      <p>On aura compris que Visual Age for Java est un outil tr&egrave;s      novateur, mais dont la prise en main est difficile (mais la      documentation fournie est compl&egrave;te, compter tout de m&ecirc;me une      semaine pour faire le tour des fonctionnalit&eacute;s de l'outil). Ces      qualit&eacute;s le rendent cependant tr&egrave;s d&eacute;pendant des outils d'IBM et      il n'est pas possible de changer de machine virtuelle. La      version actuelle (la 3.0 int&eacute;grant une machine virtuelle 1.1.6)       commence &agrave; accuser son &acirc;ge. En particulier, il est impossible      de travailler dans de bonnes conditions avec la version 1.1.1 des      JFC, version compatible avec les versions post&eacute;rieures du JDK.      La sortie d'une machine virtuelle 1.3 pour Linux laisse cependant      supposer qu'une nouvelle version de Visual Age est imminente.</p>          <h3> <a name="Autres EDIs disponibles sous Linux">Autres EDIs disponibles sous Linux</a> </h3>      <p>Il existe nombre d'autres EDIs disponibles sous Linux. En      particulier :</p>      <ul>      <li> <a href="http://www.omnicore.com/">http://www.omnicore.com/</a> :       C'est un IDE tr&egrave;s classique mais de bonne qualit&eacute;. Il a &eacute;t&eacute;       programm&eacute; enti&egrave;rement en Java mais est relativement peu       gourmand en ressources. Il comporte un bon d&eacute;buggeur et un       &eacute;diteur permettant la compl&eacute;tion du code. Cela peut &ecirc;tre une       alternative int&eacute;ressante pour des machines peu puissantes, mais       son prix est dissuasif lorsqu'on compare ses fonctionnalit&eacute;s       avec la version gratuite d'IDEs comme JBuilder ou Forte.</li>      <li> <a href="http://www.elixir.com.sg">http://www.elixir.com.sg</a> :       Elixir est aussi un environnement de d&eacute;veloppement commercial       &eacute;crit en Java, mais il fait un usage raisonn&eacute; de Swing, ce qui le       rend rapide m&ecirc;me sur des configurations modestes. Il reste simple       mais tr&egrave;s fonctionnel. Il permet de g&eacute;rer le syst&egrave;me de contr&ocirc;le        de version RCS et int&egrave;gre un syst&egrave;me de scripts Scheme permettant        d'impl&eacute;menter ses propres fonctions.</li>      <li> <a href="http://www.freebuilder.org">http://www.freebuilder.org</a> :       Projet d'EDI libre, FreeBuilder est une v&eacute;ritable l&eacute;gende urbaine,       dont tout le monde parle, mais que personne n'a jamais utilis&eacute;       (ni m&ecirc;me r&eacute;ussi &agrave; compiler). Le projet a longtemps &eacute;t&eacute; arr&ecirc;t&eacute;,       mais il semble avoir &eacute;t&eacute; relanc&eacute; depuis peu sous le nom &eacute;vocateur       de FenIX. On ne peut que souhaiter qu'il reparte du bon pied et       concurrence sur leur propre terrain les EDIs commerciaux.</li>     </ul>             <h2> <a name="Outils divers">Outils divers</a> </h2>     <h3> <a name="Argo UML">Argo UML</a> </h3>      <ul>      <li> <a href="http://www.ArgoUML.org/">http://www.ArgoUML.org/</a> </li>      <li>Licence Open Source</li>     </ul>      <p>Argo UML est un outil de mod&eacute;lisation UML Open Source. Il permet      de produire des diagrammes UML et le code Java correspondant. Bien      que non termin&eacute;, il est suffisamment avanc&eacute; pour &ecirc;tre utilisable.      On notera qu'il ne permet pas (encore ?) l'analyse inverse (donc      production de diagrammes &agrave; partir de code). C'est certainement une      alternative viable face aux outils de mod&eacute;lisation UML commerciaux      souvent tr&egrave;s chers.</p>          <h3> <a name="TogetherJ">TogetherJ</a> </h3>     <ul>      <li> <a href="http://www.oisoft.com">http://www.oisoft.com</a> </li>      <li>commercial</li>     </ul>      <p>TogetherJ est un outil commercial de mod&eacute;lisation UML capable de      tracer les graphes &agrave; partir de code Java ou de g&eacute;n&eacute;rer le code &agrave;      partir des graphes. Une version d'&eacute;valuation assez limit&eacute;e (elle      ne permet que de produire des diagrammes de classes et l'on ne peut      exporter le r&eacute;sultat) est disponible gratuitement.</p>      <p>C'est un tr&egrave;s bon outil, mais son prix &eacute;lev&eacute; peut en dissuader plus      d'un.</p>          <h3> <a name="Alma">Alma</a> </h3>      <ul>      <li> <a href="http://www.memoire.com/guillaume-desnoix/alma">http://www.memoire.com/guillaume-desnoix/alma</a> </li>      <li>Licence <a href="http://www.gnu.org/copyleft/gpl.html">http://www.gnu.org/copyleft/gpl.html</a>      </li>     </ul>      <p>Alma est un logiciel disposant des fonctionnalit&eacute;s suivantes:</p>      <ol>      <li>Lecture et analyse de code-source &eacute;crits dans divers       langages.</li>      <li>Manipulation de la structure et du code</li>      <li>G&eacute;n&eacute;ration de code-source dans divers langages.</li>     </ol>      <p>Il se destine &agrave; la mod&eacute;lisation orient&eacute;e objet (d&eacute;finition de      classes et relations) ainsi qu'&agrave; la migration (aide &agrave; la conversion)      de code &eacute;crit dans des langages plus vieux. Il correspond &agrave; deux      besoins : disposer d'un AGL simplifi&eacute; et utilisable sur de petits      projets et faciliter la r&eacute;&eacute;criture, le portage ou l'encapsulation de      code non-objet.</p>      <p>Ce logiciel servira principalement au d&eacute;veloppeur qui r&eacute;cup&egrave;re un      code et souhaite l'int&eacute;grer dans un autre projet, &agrave; porter un code      standard sur la machine virtuelle Java, ainsi qu'au concepteur qui y      trouvera (&agrave; terme) la possibilit&eacute; de d&eacute;clarer et manipuler des      classes.</p>      <p>Ce programme est tr&egrave;s bien r&eacute;alis&eacute; (il y a m&ecirc;me un assistant !),      et tourne tr&egrave;s correctement, m&ecirc;me sur une configuration modeste.</p>          <h3> <a name="Optimize-it !">Optimize-it !</a> </h3>     <ul>      <li> <a href="http://www.optimizeit.com">http://www.optimizeit.com</a> </li>      <li>commercial</li>     </ul>      <p>Optimize it! est un optimisateur de code Java. Il permet de      visualiser, pendant qu'une application Java s'ex&eacute;cute, l'occupation      m&eacute;moire pour chaque classe ou le temps d'ex&eacute;cution pour chaque      m&eacute;thode. Sa version 3.0 est maintenant disponible pour Linux (ainsi      que pour Windows et Solaris).</p>      <p>C'est un bon outil pour optimiser ses applications Java en      travaillant les goulots d'&eacute;tranglement du code.</p>          <h3> <a name="JAD">JAD</a> </h3>      <ul>      <li> <a href="http://www.geocities.com/SiliconValley/Bridge/8617/jad.html">http://www.geocities.com/SiliconValley/Bridge/8617/jad.html</a>      </li>      <li> <a href="http://www.gnu.org/copyleft/gpl.html">http://www.gnu.org/copyleft/gpl.html</a>      </li>     </ul>      <p>C'est un d&eacute;sassembleur, donc un outil capable de g&eacute;n&eacute;rer un      source &agrave; partir d'un fichier .class. C'est utile lorsque l'on      a perdu le source de ses propres classes...</p>          <h3> <a name="JAX">JAX</a> </h3>     <ul>      <li> <a href="http://www.alphaworks.ibm.com/formula/Jax">http://www.alphaworks.ibm.com/formula/Jax</a> </li>      <li>gratuit</li>     </ul>      <p>Jax est un outil d'optimisation du bytecode Java. Il permet ainsi      d'optimiser les performances des programmes, mais surtout de r&eacute;duire      leur taille. On peut aussi l'utiliser pour camoufler le code source      (c'est donc un antidote aux d&eacute;sassembleurs).</p>          <h3> <a name="Ant">Ant</a> </h3>      <ul>      <li> <a href="http://jakarta.apache.org/ant">http://jakarta.apache.org/ant</a> </li>      <li>Licence Apache</li>     </ul>      <p>Ant est l'&eacute;quivalent d'un make pour les programmes Java. En effet,      make appelle des programmes du syst&egrave;me h&ocirc;te qui ne sont pas pr&eacute;sents       sur toutes les plateformes, les makefiles ne sont donc pas portables.      Pour que les projets Java soient recompilables sur toute plateforme,      il faut donc disposer d'un outil (Java) de compilation des projets.</p>      <p>Un buildfile Ant est un fichier XML (format de fichiers textes      structur&eacute;s et portables) indiquant &agrave; Ant les &eacute;tapes de la construction      du programme.</p>  <pre> &lt;project name="foo" default="dist" basedir="."&gt;    &lt;target name="init"&gt;     &lt;tstamp/&gt;     &lt;property name="build" value="build" /&gt;     &lt;property name="dist"  value="dist" /&gt;     &lt;filter token="version" value="1.0.3" /&gt;     &lt;filter token="year" value="2000" /&gt;   &lt;/target&gt;    &lt;target name="prepare" depends="init"&gt;    &lt;mkdir dir="${build}" /&gt;   &lt;/target&gt;    &lt;target name="compile" depends="prepare"&gt;     &lt;javac srcdir="${src}" destdir="${build}" filtering="on"/&gt;   &lt;/target&gt;    &lt;target name="dist" depends="compile"&gt;     &lt;mkdir dir="${dist}/lib" /&gt;     &lt;jar jarfile="${dist}/lib/foo${DSTAMP}.jar"     basedir="${build}" items="com"/&gt;   &lt;/target&gt;    &lt;target name="clean" depends="init"&gt;     &lt;deltree dir="${build}" /&gt;     &lt;deltree dir="${dist}" /&gt;   &lt;/target&gt; &lt;/project&gt; </pre>      <p>Ant est un projet de l'organisation jakarta.apache.org ayant      pour mission de fournir des outils Java c&ocirc;t&eacute; serveur de qualit&eacute;.      Il est utilis&eacute; pour construire des outils comme Tomcat ou      Watchdog.</p>             <h2> <a name="Conclusion">Conclusion</a> </h2>     <p>La situation de Java sur plateforme Linux a radicalement     chang&eacute; ces derniers mois. De plateforme de d&eacute;veloppement Java     de second ordre, Linux est pass&eacute; dans le peloton de t&ecirc;te     gr&acirc;ce &agrave; l'implication des acteurs du march&eacute;. On dispose     maintenant de machines virtuelles r&eacute;centes et de qualit&eacute; et     les environnements de d&eacute;veloppement majeurs ont tous &eacute;t&eacute;     port&eacute;s (sauf un dont le d&eacute;veloppement a par ailleurs &eacute;t&eacute;     arr&ecirc;t&eacute;... mais dont on arrive &agrave; se passer).</p>     <p>Le d&eacute;veloppeur Java n'a maintenant plus rien &agrave; envier &agrave;     ses homologues travaillant sur d'autres plateformes.</p>       </font><hr size="1" noshade=""> <font size="-2"> <center>  <a href="http://www.oreilly.fr"><b>&Eacute;ditions O'Reilly</b></a><b>&nbsp;|&nbsp;</b>  <a href="../club/index.html"><b>Club O'Reilly</b></a><b>&nbsp;|&nbsp;</b>  <a href="../divers/commander.html"><b>Comment Commander</b></a><b>&nbsp;|&nbsp;</b>  <a href="mailto:france@oreilly.com"><b>Contacter O'Reilly</b></a> <br>  <a href="http://www.oreilly.com/international/"><b>O'Reilly International</b></a><b>&nbsp;|&nbsp;</b>  <a href="http://www.oreilly.com/"><b>O'Reilly aux &Eacute;tats-Unis</b></a><b>&nbsp;|&nbsp;</b>  <a href="../divers/apropos.html"><b>&Agrave; propos de O'Reilly</b></a> <br>  <p> <em>&copy; 1999-2001, &Eacute;ditions O'Reilly &amp; <a href="mailto:casa@sweetohm.net">Michel Casabianca</a>.</em> </p> </center> </font> </td> </tr> </table> </body> </html> 
