Application Java AppBundler pointant vers JRE définie par JAVA HOME
J'ai utilisé Java Application Bundler pour emballer une application Java en tant que .App. J'ai réussi à exécuter l'application si j'emballe le JRE7 à l'intérieur du .app bundle. Il est possible de configurer .app (en Info.plist) pour pointer vers le JRE défini par la variable d'environnement JAVA_HOME? Si je fais cela, je reçois "Impossible de charger l'environnement d'exécution Java"! J'ai essayé de configurer le JAVA_HOME de différentes manières, mais sans succès!
Quelqu'un peut-il fournir de l'aide ou suggestion?
2 answers
appbundler
les applications peuvent utiliser soit un Java 7 JRE intégré dans l'app bundle, soit le Java 7 JRE installé dans /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
(le même que celui utilisé par le plugin du navigateur Web). Ils ne peuvent pas utiliser un JDK installé sous /Library/Java/JavaVirtualMachines
(ou ailleurs, d'ailleurs) et ils ne peuvent certainement pas utiliser Java 6.
Ce que vous pouvez faire, cependant, n'est pas d'utiliser appbundler
et de construire le bundle à la main, l'exécutable principal étant un script shell qui exécute l'outil de ligne de commande java
à partir de JAVA_HOME
(peut-être revenir au /Library/Internet Plug-Ins
JRE si JAVA_HOME
n'est pas défini). Un tel script sera capable de prendre en charge Java 6 et 7.
Vous utiliseriez quelque chose comme ça comme YourApp.app/Contents/MacOS/YourApp
:
#!/bin/sh
PRG=$0
while [ -h "$PRG" ]; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '^.*-> \(.*\)$' 2>/dev/null`
if expr "$link" : '^/' 2> /dev/null >/dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
progdir=`dirname "$PRG"`
if [ -n "$JAVA_HOME" ]; then
JAVACMD="$JAVA_HOME/bin/java"
elif [ -x /usr/libexec/java_home ]; then
JAVACMD="`/usr/libexec/java_home`/bin/java"
else
JAVACMD="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java"
fi
exec "$JAVACMD" -classpath "$progdir/../Resources/Jars/*" \
-Dapple.laf.useScreenMenuBar=true \
my.pkg.MainClass
Placez ensuite les fichiers JAR de votre application dans YourApp.app/Contents/Resources/Jars
, l'icône dans YourApp.app/Contents/Resources/icon.icns
et ce qui suit dans YourApp.app/Contents/Info.plist
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>YourApp</string><!-- relative to Contents/MacOS -->
<key>CFBundleGetInfoString</key>
<string>My clever application</string>
<key>CFBundleIconFile</key>
<string>icon.icns</string><!-- relative to Contents/Resources -->
<key>CFBundleInfoDictionaryVersion</key>
<string>8.0</string>
<key>CFBundleName</key>
<string>YourApp</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>8.0</string>
</dict>
</plist>
Voir leGATE Developer launcher pour plus de détails, mais notez que c'est un cas un peu plus compliqué car le script .app
délègue à un autre script, qui dans turn charge les fichiers JAR à partir d'un emplacement situé en dehors du bundle .app
. Le principe reste le même cependant.
usr/libexec/java_home -V
Correspondance des Machines virtuelles Java (2): 1.8.271.09 (x86_64) "Oracle Corporation" - "Java" /Bibliothèque/Plug-ins Internet/JavaAppletPlugin.plugin / Contenu / Accueil 1.8.0_271 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Sommaire / Accueil /Bibliothèque/Plug-Ins Internet / JavaAppletPlugin.plugin/Contenu/Maison
Je faisais face à un problème similaire, que lorsque je définissais mon java_home comme
echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile
Il a été réglé sur / Bibliothèque / Internet Plugins/JavaAppletPlugin.plugin/Contenu/Maison
Donc je l'ai fait comme echo à l'exportation "JAVA_HOME="Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contenu/Accueil" >> ~/.bash_profile
Le résultat est dans
Admins-MacBook-Pro:carot arun$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Table des matières / Accueil
, Vous pouvez également le modifier à l'avenir si nécessaire accédez à votre utilisateur, dans mon dossier arun appuyez sur commande + maj + . pour voir les fichiers cachés ouvrir .bash_profile dans l'un de vos éditeurs préférés