Accueil > Java > Script Shell, ligne de commande et classpaths

Script Shell, ligne de commande et classpaths

Si vous découvrez la programmation Java sur Mac et que vous venez d’un environnement Windows, vous avez probablement remarqué que les choses sont un peu différentes sur Mac.

Il y a quelques semaines, nous avons découvert le packaging d’applications Java grace à MRJAppBuilder. Dernièrement, nous avons exploré une introduction à la programmation GUI en Java sur Mac.

Cette fois ci, nous allons regarder de plus près les aspects liés aux façons d’accéder aux classes (classpaths) et à l’exécution d’applications à partir de lignes de commandes ou de scripts Shell. Ce n’est pas le mode de distribution de vos applications que vous emploierez le plus fréquemment. Cependant, vous constaterez que les applications qui ciblent les développeurs exigent que vous les lanciez à partir d’une ligne de commande ou d’un script Shell. Sous Windows, vous pouvez double-cliquer sur un fichier.bat. Sous Mac OS X, vous aurez besoin de les re-packager en employant les techniques de base que nous allons découvrir.

Java et XML sur Mac

A la conférence JavaOne de cette année, SUN a annoncé la prochaine disponibilité d’une suite d’API Java pour XML appelée Package JAX. La plupart des techniques actuelles peuvent se contenter des mises à jour de J2SE, mais alors que ce dernier n’est maintenant mis à jour que deux fois tous les trois ans, le Package JAX est mis à jour lui tous les trimestres. Si vous avez déjà taté la béta de J2SE 1.4, vous devez savoir qu’elle inclut JAXP (les API Java pour XML dotées de fonctions d’analyse syntaxique). Les développeurs Mac OS X ne disposent pas encore de la version béta de la 1.4, mais cela ne doit pas nous empêcher de goûter aux joies qu’elle procure. Incidamment, une alternative open-source à JAXP est apparue : JDOM. Cet article portera aussi un regard furtif sur Xeena, l’éditeur XML d’alphaWorks.

Dans l’article de cette semaine, vous téléchargerez, installerez et essaierez JAXP pour en évaluer les possibilités. Cela implique l’utilisation de scripts Shell de création ou de modification de votre fichier .tcshrc ou .login. Vous devez être avertis que je ne connais rien à UNIX, système que je n’ai pas découvert en bidouillant Mac OS X. S’il existe des manières plus agréables pour accomplir ces tâches n’hésitez pas à me le faire savoir (NDT : Vous pouvez m’envoyez vos commentaires si vous le désirez). Cet article est destiné à aider ceux d’entre nous qui ont pris l’habitude de régler les “classpaths” sous Windows de manière à ce qu’il percoivent mieux la pensée des têtes pensantes d’Unix.

La prochaine fois, nous reviendrons à la programmation Java et nous commencerons à développer une application utilisant XML et certaines des particularités propres au Mac.

Installer JAXP

En avant vers le site de SUN. Suivez le lien JAXP et téléchargez l’implémentation de référence de JAXP dans la liste située à droite sur la page. Vous devrez vous connecter en tant que membre JDC (si vous n’êtes pas déjà membre, vous pouvez le devenir gratuitement). Vous pouvez naviguer un peu plus que nécessaire ou aller directement à http://java.sun.com/xml/download.html et télécharger la version finale de JAXP 1.1. Décompressez le fichier zip dans le répertoire Applications de votre répertoire domestique. Dans mon cas, ce sera dans /Users/dhs/Applications. Vous devez remplacer dhs par votre nom d’utilisateur. Enfin, changez le nom du répertoire jaxp1-1 en jaxp de manière à ce que ces instructions restent valables pour de futures mises à jour.

La seule chose qui reste vraiment à faire est de vérifier que votre classpath est correctement réglé de façon à trouver trois fichiers .jar : jaxp.jar, crimson.jar et xalan.jar. La façon la plus facile de faire cela sur une plate-forme Windows est de copier les trois fichiers dans le répertoire /lib/ext (ou comme ils disent, votre répertoire libext) là où votre distribution Java réside. Vous trouverez cela sur votre Mac dans /System/Library/Frameworks/JavaVM.framework/Home. Maintenant, essayez de glisser vos fichiers .jar du dossier jaxp vers le répertoire ext. Vous serez alors informé que ce n’est pas possible car “ext ne peut être modifié”. Soupir…

Passée cette frustration initiale, vous pouvez vous rendre compte que c’est probablement une bonne chose pour le moment. Vous ne devez pas vous inquiéter des mises à jour automatiques du système qui annulent vos personnalisations. Gardez juste vos fichiers jar là où ils sont pour le moment et ajouter cet emplacement dans votre classpath. Vous avez trois choix possibles : (1) taper toutes les commandes sur la ligne de commande, (2) créer un fichier .tcshrc ou .login qui sera ouvert puis lu à chaque ouverture de fenêtres Terminal, ou (3) créer un script Shell qui inclut cette information au moment où vous lancerez une application particulière.

Je traiterai de la troisième option dans la partie relative au lancement de l’application Xeena. Je ferai quelques commentaires rapides sur la deuxième option et, incluerai un lien vers un autre article de MacDevCenter, à la fin de la page suivante. Mais commençons par regarder comment installer votre classpath à partir de la ligne de commande. Si vous vous êtes déjà servi de ProjectBuilder, voici les commandes rouges qui s’affichent quand vous voulez construire et lancer votre projet.

A partir de la ligne de commande

Ouvrez une fenêtre Terminal et allez au répertoire jaxp. C’est là que vos trois fichiers .jar sont placés, donc créez une variable d’environnement appelée “JAXP” qui pointera vers ce répertoire comme suit.

setenv JAXP/Users/dhs/Applications/jaxp

Encore une fois, vous emploierez votre propre nom d’utilisateur à la place de “dhs”. Ensuite, vous créerez une variable d’environnement dont le but sera de conserver l’information complémentaire de classpath, en employant la commande suivante :

setenv CP $JAXP/jaxp.jar:$JAXP/crimson.jar:$JAXP/xalan.jar:.

Le $JAXP est remplacé par la valeur de la variable JAXP que vous avez tapée précédemment . Si vous venez d’un environnement Windows, notez que vous devez employer des “:” - et pas des points-virgules - pour séparer les paramètres. Enfin, vous incluez “.” pour que le répertoire courant soit aussi dans le classpath. Naviguez maintenant jusqu’au répertoire jaxp/examples/SAXTagCount et compilez l’exemple SAXTagCount.java comme suit :

javac-classpath $CP SAXTagCount.java

Le compilateur va mouliner et retourner un prompt. Maintenant vous êtes prêts à lancer le programme donné en exemple. Vous devez lui passer un DTD XML à partir duquelle il comptera les diverses balises. Dans le répertoire jaxp/examples/samples il y a une version XML de Richard III de Shakespeare appelé rich_iii.xml et la Définition de Type de Document (DTD) qui l’accompagne, play.dtd. Vous pouvez faire en sorte que SAXTAGCOUNT compte les balises de Richard III avec la commande suivante.

java -cp $CP SAXTagCount "../samples/rich_iii.xml"

Votre fenêtre Terminal doit ressembler à quelque chose dans ce genre là :

Copie d'écran.

Vous pouvez employer l’option (2) pour stocker les valeurs des variables d’environnement dans un fichier.tcshrc ou .login. Allez voir l’article de James sur la découverte de sa $JAVA_HOME pour en savoir plus.

Note pour les débutants : vous ne verrez pas le fichier .login si vous employez le Finder. Si vous ouvrez une fenêtre Terminal et tapez ls vous ne verrez toujours pas ces fichiers cachés. Vous devez taper ls -a pour les voir. Il y a deux stratégies pour leur création et leur maintien. Vous pouvez les créer avec TextEdit et employer ensuite la commande cp login.txt .login pour copier le fichier login.txt en .login.

L’avantage consiste ici à faire en sorte que le fichier login.txt ne soit pas caché, puisse de nouveau être ouvert et modifié avec TextEdit, et copié de nouveau en .login. Bien sûr, vous pouvez aussi employer emacs et vi pour éditer ces fichiers cachés. Ma solution préférée, cependant, est BBEDIT. BBEdit a une option dans le menu Fichier qui permet d’ouvrir des fichiers cachés. Quand vous choisissez cette option, vous pouvez voir les fichiers cachés, ouvrir n’importe lequel d’entre eux, l’éditer et le sauvegarder.

Editeurs XML

Vous pouvez éditer un document XML avec un simple éditeur de texte. D’une manière, c’est justement le but du XML. D’un autre côté, les fichiers XML sont organisés de manière hiérarchique et il est agréable de pouvoir voir cette structure quand on crée un fichier. Par exemple, si vous regardez le fichier play.dtd il indique les divers composants d’un <PLAY> (scène). Vous pouvez voir ce que le <JEU> contient et dans quel ordre. Un <SPEECH> (discours) peut être contenu dans le <ACT> qui est à son tour est contenu dans le <PLAY>. Un <SPEECH> consiste en un <SPEAKER> suivi par un ou plusieurs éléments choisis <LINE>, <STAGEDIR> et <SOUS-TITRE>.

L’idée de cet article m’est en réalité venue quand j’ai commencé à jouer avec l’éditeur XML ElfData disponible en téléchargement sur le site Web d’Apple. Voici un extrait de Richard III utilisant cette application.

Copie d'écran.

D’une part, c’est une vue hiérarchique agréable de la pièce. Mais si je change Shakespeare pour y ajouter un <SPEECH> juste après celui montré sur l’illustration, alors je devrais être invité à ajouter un nouveau <SPEAKER> juste après la balise du nouveau <SPEECH> parce que chaque <SPEECH> doit commencer par un <SPEAKER>.

Alors que je cherchais d’autres éditeurs XML, je suis tombé sur une histoire familière. Pour la plupart, les applications n’étaient compatibles qu’avec Windows et aucune d’entre elles ne supportait Mac OS X comme plate-forme. Par la suite je me suis rappelé de Xeena. Elle est disponible gratuitement et est une application Java. Elle doit sûrement fonctionner sur Mac OS X - n’est ce pas ? Téléchargez sa distribution, décompressez la et sauvegardez-la dans le répertoire /Users/dhs/Applications (où de nouveau vous remplacez “dhs” par votre nom d’utilisateur).

Scripts Shell et exécution de Xeena

Maintenant que vous avez téléchargé Xeena, renommez le répertoire xeena. A l’intérieur de ce répertoire vous trouverez un répertoire lib qui contient tous les fichiers .jar nécessaires à cette application. Vous verrez des fichiers .bat et des fichiers.sh utilisés pour l’exécution de Xeena et des exemples divers pour Windows et pour les plates-formes Unix. Jetez un oeil au fichier xeena.sh. C’est vraiment trop compliqué. Un des avantages dans l’exécution d’une application Java sur le Mac OS X est que vous n’avez pas à vous demander quelle machine virtuelle est employée et où elle est. Vous pouvez simplifier radicalement le script Shell de manière à ce que xeena.sh ne consiste qu’aux lignes suivantes :

XEENA_HOME=/Users/dhs/Applications/xeena
 JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
 CP=$XEENA_HOME/lib/xmleditor.jar:$XEENA_HOME/lib/xerces.jar:
  $XEENA_HOME/lib/jgl3.1.0.jar:$XEENA_HOME/lib/xalan.jar:
  $JAVA_HOME/classes.zip
 java -cp $CP  com.ibm.hrl.xmleditor.Xeena $*

Note : La troisième ligne de l’illustration ci-dessus doit être tapée sur une ligne entière, sans espaces entre le “:” et le “$” suivant - la ligne a été cassée ici pour des besoins d’affichage.

Cela doit vous sembler familier depuis votre précédente expérience. Vous mettez l’emplacement du répertoire Xeena (oui, vous devez remplacer “dhs” de /Users/dhs/Applications/xeena par votre propre nom). JAVA_HOME indique le répertoire domestique de l’installation Java. Vous utilisez alors ces variables pour faire en sorte que le classpath pointent vers les quatre fichiers jar requis par l’application aussi bien que les classes Java. L’étape finale consiste à lancer l’application à partir du fichier jar xmleditor.jar. Vous pouvez maintenant lancer Xeena en lançant le script Shell. Vous pourriez taper cela.

sh xeena.sh

Vous n’en aurez pas plus pour votre argent. Vous devez passer comme information le nom du DTD, l’élément root et le fichier XML que vous voulez éditer. En guise d’illustration, lancez un des exemples fournis. Par exemple, tapez la ligne suivante :

sh sample_dtd.sh

Cela provoque l’affichage du carnet d’adresses suivant.

Copie d'écran.

L’application vous aide à insèrer les éléments corrects en fonction de la DTD indiquée. Ce qui est plus important, vous pouvez maintenant créer, éditer et lancer des scripts shell.

Textes originaux en anglais sur O’Reilly : Java Programming on the Mac par Daniel H.Steinberg

Thierry Java , ,

  1. Pas encore de commentaire
  1. Pas encore de trackbacks
Vous devez être identifié pour poster un commentaire