Accueil > Java > Utiliser AppleScript pour compiler et exécuter du code Java

Utiliser AppleScript pour compiler et exécuter du code Java

Par Daniel H. Steinberg, 01/03/2002

traduit par Thierry, 06/08/2002

AppleScript est de retour. La mise à jour de Décembre 2001 des outils d’Apple incluait le nouveau AppleScript Studio. (Devenez membre de l’ADC; même les membres qui ne cotisent pas ont accès à la plupart des mises à jour). Lors de la Macworld Expo, en plus du nouvel iMac et de iPhoto, Apple a publié AppleScript.

Jusqu’à présent, j’écrivais toutes mes lignes de code dans un éditeur de texte, j’utilisais le Terminal pour compiler et lancer le programme, et me servais de JUnit pour être sûr que tous mes tests étaient corrects. Dans l’article de ce mois ci, je vous exposerai un exemple d’utilisation d’AppleScript dans le but d’automatiser toutes ces tâches.

L’application finale sera réutilisable, mais ce n’est pas vraiment le but. Vous pouvez presser un bouton pour compiler, un autre pour exécuter, et un troisième pour lancer votre batterie de tests. Tout ce que nous obtiendrons, finalement, est une interface utilisateur graphique du Terminal. Voici donc un rapide tutoriel pour vous permettre de considérer l’aide que peut apporter AppleScript aux développeurs Java sur Mac. Bien sûr, Ant serait une meilleure solution, et je conseille toujours de le télécharger et de l’apprendre. Peut être qu’une interface graphique AppleScript à ANT serait la solution.

Comme toujours, vous pouvez m’envoyer des mails à DSteinberg@core.com avec comme sujet “O’Reilly Mac“; vos commentaires m’intéressent tout autant que vos suggestions pour de futurs articles. L’article de ce mois-ci est issu de la question d’un lecteur à propos du scripting du Terminal dans le but de lancer des applications Java. Quant à moi, je me suis mis tardivement à utiliser une paire d’environnements intégrés de développement qui rendent en ce moment ma vie plus facile. J’ai mes favoris, mais si vous voulez me soumettre les vôtres n’hésitez pas à m’envoyer un mail avec “The IDEs of Mac” comme sujet.

Création de l’interface

Assurez-vous d’avoir la mise à jour des outils de développement de Décembre 2001 qui comprend AppleScript Studio. AppleScript Studio est en fait une mauvaise appellation; c’est en fait une amélioration de Project Builder. Quand vous lancez Project Builder, vous avez le choix entre trois types de projets AppleScript. Vous pouvez alors vous servir de d’Interface Builder pour créer une interface Aqua graphique pour votre script. Pour que Java devienne un citoyen Mac de première classe, il serait bien de le faire profiter des fonctionnalités d’Interface Builder.

  • Lancez Project Builder.
  • Sélectionnez New Project dans le menu File.
  • Si AppleScript est installé, vous verrez que les trois premiers choix concernent des projets AppleScript. Choisissez AppleScript Application.
  • Sauvegardez le projet sous le nom que vous voudrez dans un répertoire adéquate.
  • Cliquez sur l’onglet Files, ouvrez le dossier Resources, et double-cliquez sur Main.nib. Cela provoquera le lancement d’Interface Builder.Vous utiliserez Interface Builder pour créer une application qui ressemble à cela :

    Interface Builder Screen
    Le Contrôleur Java AppleScript.

  • Au moment où vous double-cliquez sur Main.nib, vous devriez voir quatre petites fenêtres. Elles s’appellent Window, MainMenu.nib, MainMenu.nib -MainMenu, et Cocoa-Views. Agrandissez la fenêtre Window pour que tous les composants illustrés ci-dessus puissent prendre place.
  • Cliquez sur Window puis rendez vous dans le menu Tools et sélectionnez Show Info.
  • Vous deviez voir un assortiment de propriétés relatif à Window. Changez le titre de la fenêtre par ce que vous voudrez dans le champ Window Title.
  • Cliquez en dehors de ce champ (ou sortez du champ en pressant la touche Tabulation) et vous verrez alors que le nom de la fenêtre en cours de construction a changé.

En majeure partie, Interface Builder se comporte comme d’autres outils RAD (Rapid Application Design - Dessin Rapide d’Application) que vous avez pu utiliser, je ne passerais donc pas trop de temps sur cette partie. Pour créer le reste de l’interface, vous glisserez des composants en provenance de la fenêtre Cocoa-Views vers la fenêtre en cours de design et les et ajusterez ensuite.

  • Cliquez sur un bouton et déposez le sur votre fenêtre.
  • Double-cliquez sur le mot “Button” et il devrait être mis en surbrillance.
  • Tapez le mot “Compiler” en remplacement et changez la forme du bouton si vous voulez.
  • Répétez l’opération pour les boutons “Lancer” et “Tester“.

Vous noterez l’apparition de guides pour vous aider à aligner les boutons. Vos boutons devraient presque ressembler à ceux de l’illustration ci-dessus. Le fond bleu du bouton “Compiler” indique que si l’utilisateur presse la touche “Retour” il sélectionnera “Compiler“. Cliquez sur le bouton “Compiler” et regardez les propriétés dans la fenêtre Show Info. Dans la moitié inférieure, il y a un champ appelé Equiv. A partir du menu déroulant, changez la valeur “no key” par défaut en “Return” et votre bouton sera correctement coloré.

Tout le texte de la fenêtre est créé en modifiant le composant intitulé System Font Text. Déposez le dans votre fenêtre et double-cliquez dessus pour en changer le texte. Les champs texte sont créés en déposant le champ texte sans intitulé, situé dans le coin droit de la fenêtre Cocoa-Views, dans votre fenêtre, en le positionnant et en l’ajustant. Assurez vous que vos champs sont activés, éditables et que le défilement y est possible. Pour mettre en forme les en-têtes “Commandes” et “Réglage des Paramètres“, choisissez une bordure pour le texte et centrez le texte.

Un premier bouton de lancement

Maintenant, créons le script du bouton de lancement.

  • Cliquez sur le bouton “Lancer” et regardez la fenêtre Show Info.
  • En haut, vous apercevrez un menu déroulant affichant le terme Attributes. Cliquez dessus et sélectionnez AppleScript.
  • Intitulez le bouton “Lancer” et vérifiez la boite à cocher sous Action.
  • Vérifiez la boite intitulée Application.applescript pour indiquer que le script par défaut contiendra le code qui gérera les clic utilisateurs effectués sur ce bouton.
  • Cliquez sur Edit Script.
  • Creating a Script
    Création d’un script pour le bouton “Lancer”.

Pour la partie suivante, vous aurez besoin d’une application Java compilée pouvant être lancée à partir de la ligne de commande du Terminal. HelloWorld le fera, ou vous pouvez allez chercher une application dans les articles précédents si vous n’en avez pas sous la main. Dans cet exemple, j’utilise l’application Old MacDonald. Elle se trouve dans le répertoire /Users/dhs/projects/omd/, et la classe qui contient la méthode main() s’appelle Main. Pour lancer cela à partir de la ligne de commande, je changerai les répertoires comme suit :

cd  /Users/dhs/projects/omd/

Puis, je lancerai l’application en tapant :

java Main

Dans notre script, nous demanderons au Terminal d’effectuer ces deux two actions. (Bien sûr, vous devrez changer les informations relatives à l’emplacement et à main()pour votre application). Le script devrait ressembler à cela :

on clicked theObject
	if title of theObject = "Run" then
		tell application "Terminal"
			do script with command "cd /Users/dhs/projects/omd/; java Main"
		end tell
	end if
end clicked

Comme d’autres langages de script, AppleScript est difficile à débugger. Si vous tapez une instruction à la syntaxe correcte et la sauvegardez, AppleScript Studio la formattera bien et mettra en couleur les mots clés appropriés. Si vous avez une erreur de typographie, il peut être très difficile de la déceler.

Dans le script ci-dessus, quand un bouton est cliqué, nous vérifions d’abord qu’il s’agit du bouton “Lancer“. Si c’est le cas, nous demandons au Terminal d’ouvrir une fenêtre et d’exécuter la commande donnée. Notez le “;” placé entre les deux commandes. Cela revient à lancer les commandes cd et java sur deux lignes différentes, comme montré auparavant. Cliquez sur le bouton “Lancer” et cela provoquera l’ouverture d’une fenêtre Terminal et le lancement de votre application. Cliquez sur le bouton “Lancer” une fois de plus. Et vous ouvrez une nouvelle fenêtre Terminal et votre application est lancée de nouveau. Nous souhaiterions éviter que toutes ces fenêtres Terminal s’ouvrent à chaque fois que nous lançons, testons ou compilons notre application. De plus, nous ne voulons pas que le chemin d’accès et le nom de la classe soient codés en dur dans l’application.

Lancement à partir du shell

Commençons par éliminer la fenêtre Terminal. Si vous n’avez pas besoin d’une fonction d’affichage sur console, vous pouvez remplacer les commandes Terminal par un script shell comme celui-ci :

on clicked theObject
	if title of theObject = "Run" then
		do shell script "cd /Users/dhs/projects/omd/; java Main"
	end if
end clicked

Dans ce conseil, vous employez un shell sh au lieu du shell habituel tcsh de Mac OS X et les commandes peuvent varier. Quid des avertissements ? Quand vous tapez un mauvais chemin d’accès ou nom de classe, vous voyez habituellement ces messages dans la fenêtre Terminal. Si je retire omd/ du chemin d’accès et lance le script, le dialogue suivant apparaîtra :

Error Dialogue
AppleScript error dialog box.

Ajout d’un peu de flexibilité à l’application

Nous souhaiterions pouvoir saisir des informations dans les champs texte de notre outil et lancer notre application Java en lui passant le chemin d’accès de la classe. Le script devrait ressembler à quelque chose comme ça. (Notez que les troisième et quatrième lignes de ce code ne doivent pas être placées sur deux lignes différentes).

if title of theObject = "Run" then
		tell application "Terminal"
			do script with command "cd " & outputLocation & ";
java -classpath " & classPath & ":. " & mainClass
		end tell
end if

La variable outputLocation devrait pointer vers l’endroit où les fichiers ont été compilés. Sachant que nous avons commencé par changer les répertoires pour qu’ils pointent vers vers cet emplacement, classPath contient un chemin d’accès autre que l’emplacement des fichiers de classe, suivi par le pointeur du répertoire courant (:.).

La variable mainClass est le nom de la classe contenant main(). Supposez que j’ai compilé Old MacDonald dans le sous-répertoire des classes de /omd. Alors outputLocation deviendrait /Users/dhs/projects/omd/classes/, classPath n’aurait pas besoin d’être valorisée et pourrait n’être que :., et mainClass serait valorisé à Main.

Vous aurez besoin de lire cette information à partir des champs texte, retournez donc vers Interface Builder. Vous devrez attribuer un nom à chaque champ texte. Cliquez sur chacun d’entre eux et jetez un oeil à la page AppleScript de la fenêtre Show Info. Nommez les ainsi de haut en bas : source, output, classPath, package, main, et test. Vous pouvez maintenant créer des variables pour stocker l’information que vous y lisez quand au moment où l’utilisateur clique sur un bouton.

L’application entière

Voici le code source en entier pour l’outil compileur, lanceur et testeur :

-- Application.applescript

property classPath : "."
global mainClass, compilePath, testClass, sourceLocation, outputLocation

on clicked theObject
	set mainClass to contents of text field "main" of window "O'Java"
	set classPath to contents of text field "classPath" of window "O'Java"
	set compilePath to contents of text field "package" of window "O'Java"
	set testClass to contents of text field "test" of window "O'Java"
	set sourceLocation to contents of text field "source" of window "O'Java"
	if the contents of text field "output" of window "O'Java" = "" then
		set outputLocation to contents of text field "source" of window "O'Java"
	else
		set outputLocation to contents of text field "output" of window "O'Java"
	end if

	if title of theObject = "Run" then
		tell application "Terminal"
			do script with command "cd " & outputLocation & ";
java -classpath " & classPath & ":. " & mainClass
		end tell
	else if title of theObject = "Compile" then
		do shell script "cd " & sourceLocation & "; javac -classpath " &
classPath & " -d " & outputLocation & " " & compilePath & "*.java"
	else if title of theObject = "Test" then
		do shell script "java -classpath " & classPath & ":" & outputLocation &
" " & "junit.swingui.TestRunner " & testClass
	end if
end clicked

Vous pouvez télécharger l’application complète ici (14Ko).

Malgré l’évidente limite de mes connaissance AppleScript, nous avons réussi à créer une application simple qui peut être utilisée pour lancer, compiler et tester notre code alors que nous développons avec un simple éditeur de texte. Voici les réglages de mon application Java Old MacDonald :

Old MacDonald app
Les reglages de mon application Java Old MacDonald.

Le compiler et le lanceur de test tournent dans le shell avec la commande do shell script. Du fait que ma version de Old MacDonald affiche des données sur la console, je suis obligé d’utiliser l’application Terminal. Si vous ne lancez que des applications à interface graphique (GUI), vous pouvez modifier la commande.

Vous pouvez aisément adapter cette application à vos besoins. Vous pourriez vouloir y ajouter un bouton qui ne compile qu’une seule classe. Vous pourriez aussi vouloir y ajouter des composants autres que des champs texte pour le réglage de vos paramètres. Ou vous pourriez seulement vouloir appliquer une interface graphique à ANT.

L’adaptation la plus importante que vous pourriez souhaiter consisterait à rendre vos variables persistantes. Cet outil vous autorise à entrer des données une fois par session, mais il serait souhaitable de pouvoir sauvegarder ces données entre chaque réglage. Vous ne pouvez pas sauvegarder des propriétés dans une “app.” générée comme vous le faisiez dans le passé avec un script.

L’héros culte de l’AppleScript, Sal Soghoian (bien que ce ne soit pas son titre officiel pour Apple), a posté des routines le 28 Janvier (2002) sur la liste de diffusion applescript-studio. Vous pouvez les trouver, ainsi que d’autres listes AppleScript, à l’adresse http://lists.apple.com/. Vous pouvez trouver de la documentation et des informations sur AppleScript à l’adresse http://www.apple.com/applescript/ et des informations spécifiques pour Mac OS X à l’adresse http://www.apple.com/applescript/macosx/.

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