[ANT] JavaApplicationStub

  • Créateur du sujet Créateur du sujet JoJoS
  • Date de début Date de début

JoJoS

Membre actif
23 Août 2005
144
3
Bonjour à tous!!

Voilà, je souhaiterais utiliser un script ant pour compiler, créer un jar puis créer un .app de mon application java.
Je fais tout ce qu'il faut, a savoir la copie des fichiers dans les bon repertoire, enfin bref..
Mon seul probleme, c'est a la copie du fichier JavaApplicationStub... Il n'est pas reconue comme un executable UNIX mais comme un document dans mon COntents/MacOS de mon .app..

J'utilise cette commande pour copier :

<copy todir="${main}.app/Contents/MacOs" file="${sourcesApp}/JavaApplicationStub"/>

Donc peut etre qu'il y a une extension a placer a la fin.. Mais j'arrive pas a trouver laquelle..


Merci pour votre aide!!!
 
Non, pas de soucis d'extension à la fin... simplement une limitation de.... Java (et donc de Ant).

Tous les détails ICI, en particulier, tout en bas, la Unix note.

Du coup, pour résoudre ton soucis, il faut simplement mettre les bons droits depuis ton script. Par exemple:
<chmod file="${build}/MonAppli.app/Contents/MacOS/JavaApplicationStub" perm="ugo+rx" />
 
Merci, le fichier est maintenant correctement copié!!

Mais j'ai pas compris ce que ca fait au juste...
 
Mac os est en fait un Unix... et donc, à ce titre, le système de droits de fichier (qui fait en partie la robustesse de l'os), sont ignorés lors de la copie.

Le fichier doit avoir les droits d'exécution pour que ton bundle fonctionne... hors, à la copie, il perd ces droits, et donc, ça ne marche plus. L'instruction dans Ant, permet de rétablir après coup les droits....

Si vous êtes plusieurs à déveloper sur plusieurs OS, li conviendra de tester sous windows et éventuellement, protéger le bout de code pour le rendre propre que à Unix.

Tu risques également te heurter au problème de la redistribution par la suite selon le logiciel d'installation que tu utiliseras...

Tous les détails sur les droits de fichiers sous unix ICI.
 
Oki je te remercie!!! Je vais me lire ton lien sur les droits unix!!

Encore 1 question sur ANT... Je compile a partir d'une version 1.5, et je voudrais que mon code compilé soit compatible avec les versions antérieur...
Je voudrais donc savoir qu'elle propriété a ajouter lors de la compilation...

Voilà ma commode:
<javac srcdir="${sources}" destdir="${classes}" debug="on"/>
 
dans le meme esprit que le java applicationstub j'ai commencé à écrire un application stub pour python il reste simple
pour l'instant il lit 3 valeurs d'un dictionnaire plist (info.plist)

j'ai commencé un petit projet pour tester wxpython sur osx (archimade)
c'est assez stable il me reste à gerer les SIGBUS car parfois python part en live (handicapés de la function free ...) (toutefois tres rarement gdb que du bonheur :) )

<key>Python</key>
<dict>
<key>WorkingDirectory</key>
<string>Contents/Resources/Python</string>
<key>MainClass</key>
<string>__MacOSExecutable__</string>
<key>PrintDebug</key>
<string>1</string>
</dict>

l'interpreteur démarre avec comme os.path ajouté "Contents/Resources/Python" (mais aussi "Contents/MacOS et Resources (pour plus tard)"

il essaye de loader le package "__MacOSExecutable__" (__MacOSExecutable__.py)

Contents/Resources/Python/__init__.py
Contents/Resources/Python/__MacOSExecutable__.py

-- à gerer si les fichiers n'existent pas
-- et d'autres pétouilles d'erreur de dict

pour ceux que ca interresse
http://plumber.gnu-darwin.org/shared.php?_w2pb=pub/binaries/python
 
JoJoS a dit:
Encore 1 question sur ANT... Je compile a partir d'une version 1.5, et je voudrais que mon code compilé soit compatible avec les versions antérieur...
Je voudrais donc savoir qu'elle propriété a ajouter lors de la compilation...

Voilà ma commode:
<javac srcdir="${sources}" destdir="${classes}" debug="on"/>

Plusieurs possibilités s'offrent à toi. Le tout est de spécifier le numéro de version de compatibilité à la tache javac.
  • Définir une propriété (attention, les props sont finales) <property name="build.compiler" value="javac1.4"/>
  • La même chose depuis le build.properties avec build.compiler=javac1.4
  • Définir la version directement dans javac par l'attribut compiler

Toutes les possibilités sont décrites dans l'aide sur la tâche javac ICI.
 
Oki cool!! Encore merci!!

Et pour continuer dans ma lancer de questions, c'est bizare mais j'arrive pas a voir mon icone a la place de l'icone par défaut des .app.
Pourtant j'ai bien mis mon images dans le repertoire qui va bien, et je l'ai bien indiqué dans mon fichier .plist

Pourtant, quand je genere mon .app a partir de jar bundle, ca fonctionne..
J'ai redemarrer le finder et redemarrer, rien n'as changé..

1 idée??
 
Quelques pistes extraites de cette page:
Problems That May Arise
There are times when you have set up these resource types properly but the icon is either the wrong one or it has defaulted to the standard application or data file icon. There are a number of possible reasons for this.

If you are using the Macintosh-based RMaker, the first thing to check is whether there are any extraneous spaces in your resource compiler input file. The Macintosh-based RMaker is very picky about extra spaces.

If your icon is defaulting to the standard icon, check to see that the bundle bit is set. If the bundle bit isn't set , the Finder doesn't know to place the bundle in the Desktop file. If it isn't in the Desktop file, the Finder displays the file with a default icon.

If you changed the icon and remade the resource file, but the file still has the same old icon when displayed in the Finder. The old icon is still in the Desktop file. The Finder doesn't know that you've changed it, so it uses what it has. To get it to use the new icon you need to rebuild the Desktop file. To force the Finder to rebuild the Desktop file, you can hold down the Option and Command keys on startup or on insertion of the disk in question if it isn't the boot disk. The Finder will ask whether or not you want to rebuild the desktop (meaning the Desktop file).
 
JoJoS a dit:
Oki cool!! Encore merci!!

Et pour continuer dans ma lancer de questions, c'est bizare mais j'arrive pas a voir mon icone a la place de l'icone par défaut des .app.
Pourtant j'ai bien mis mon images dans le repertoire qui va bien, et je l'ai bien indiqué dans mon fichier .plist

Pourtant, quand je genere mon .app a partir de jar bundle, ca fonctionne..
J'ai redemarrer le finder et redemarrer, rien n'as changé..

1 idée??

rm -f `find /mybundle -name '.DS_*'`
osascript -e 'tell app "Finder" to quit'
osascript -e 'tell app "Finder" to activate'

mais ceci dans un script
 
Oki merci, je testerai ca demain!
Mais j'ai deja tester de re-demarrer le finder et meme le mac..

Sinon, encore 1 question.. lol, je m'arrete plus..

Voila, comme je programme en java, je voudrais savoir comment faire pour reussir, on lancer l'application a partir du jar et non du .app, a obtenir les menu en francais.. Parce que j'arrive bien a activer mes menus Preferences et a propos, mais le probleme c'est que ca s'ecrit en anglais...
 
Quelqu'un pourrait me faire voir un exemple de création de .app a partir de ant??
parce que la j'y arrive vraiment pas.. Je ne comprends rien.. Je fais tout pareil que si c'etait avec le jar bundler mais en ant, et rien ne marche...

Donc si quelqu'un pourrait poster un ant qui genere un .app ca serait super cool!

Je vous passe mon script pour voir si vous trouvez une erreur...

<property name="main" value="LecteurRSS"/>
<property name="sources" location="src"/>
<property name="classes" location="bin"/>
<property name="documentation" location="doc"/>
<property name="enJar" location="."/>
<property name="enApp" location="."/>
<property name="sourcesApp" location="sourcesApp"/>

<!-- =================================
target: executableJar
================================= -->
<target name="executableJar" depends="compilation" description="--> obtention d'un jar">
<jar destfile="${enJar}/LecteurRSS.jar" basedir="${classes}">
<manifest>
<attribute name="Main-Class" value="${main}"/>
<attribute name="Class-Path" value="outilsJo.jar"/>
</manifest>
</jar>
</target>


<!-- =================================
target: executableApp
================================= -->
<target name="executableApp" depends="executableJar" description="--> obtention d'un executable mac os x">
<!-- Création de l'arborescence de l'application -->
<delete dir="${main}.app"/>
<mkdir dir="${main}.app"/>
<mkdir dir="${main}.app/Contents"/>
<mkdir dir="${main}.app/Contents/MacOs"/>
<mkdir dir="${main}.app/Contents/Ressources"/>
<mkdir dir="${main}.app/Contents/Ressources/Java"/>
<!-- Copie du fichier JavaApplicationStub dans mon dossier de sourcesApp -->
<copy todir="${main}.app/Contents" file="${sourcesApp}/Info.plist"/>
<copy todir="${main}.app/Contents" file="${sourcesApp}/PkgInfo"/>
<copy todir="${main}.app/Contents/MacOs" file="${sourcesApp}/JavaApplicationStub"/>
<copy todir="${main}.app/Contents/Ressources" file="${sourcesApp}/RSS.icns"/>
<!-- Regler un probleme de droit lors de la copie -->
<chmod file="${main}.app/Contents/MacOS/JavaApplicationStub" perm="ugo+rx" />
<copy todir="${main}.app/Contents/Ressources/Java" file="${main}.jar"/>
<copy todir="${main}.app/Contents/Ressources/Java" file="lib/outilsJo.jar"/>
<exec executable="/Developer/Tools/SetFile">
<arg value="-a B ${main}.app"/>
</exec>
</target>

Voila, je n'ai mis que la partie jar et .app, le reste c'est de la compilation et ca fonctioonne bien.