Applicazione Java AppBundler che punta a JRE definito da JAVA HOME
Ho usato Java Application Bundler per confezionare un'applicazione Java come .app. Sono riuscito a eseguire l'applicazione se imballare il JRE7 all'interno del .pacchetto app. È possibile configurare .app (in Info.plist) per puntare al JRE definito dalla variabile d'ambiente JAVA_HOME? Se lo faccio, ricevo "Impossibile caricare Java Runtime Environment"! Ho provato a configurare JAVA_HOME in modi diversi, ma senza successo!
Qualcuno può fornire qualsiasi aiuto o suggerimento?
2 answers
appbundler
le applicazioni possono utilizzare un Java 7 JRE incorporato all'interno del pacchetto app o il Java 7 JRE installato in /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
(lo stesso utilizzato dal plug-in del browser Web). Non possono usare un JDK installato sotto /Library/Java/JavaVirtualMachines
(o altrove, se è per questo) e sicuramente non possono usare Java 6.
Ciò che può fare, tuttavia, non è usare {[2] } e invece costruire il bundle a mano, con l'eseguibile principale che è uno script di shell che esegue lo strumento della riga di comando java
da JAVA_HOME
(forse tornando al /Library/Internet Plug-Ins
JRE se JAVA_HOME
non è impostato). Tale script sarà in grado di supportare sia Java 6 che 7.
Useresti qualcosa di simile come 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
Quindi inserisci i file JAR dell'applicazione in YourApp.app/Contents/Resources/Jars
, l'icona in YourApp.app/Contents/Resources/icon.icns
e il seguente in 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>
Vedere il GATE Developer launcher per tutti i dettagli, anche se si noti che questo è un caso leggermente più complicato in quanto lo script .app
delega a un altro script, che in turn carica i file JAR da una posizione esterna al bundle .app
. Il principio rimane comunque lo stesso.
usr/libexec/java_home -V
Macchine virtuali Java corrispondenti (2): 1.8.271.09 (x86_64) "Oracle Corporation" - "Java" /Libreria/Internet Plug-in/JavaAppletPlugin.plugin / Contenuti / Home 1.8.0_271 (x86_64) "Oracle Corporation" - "Java SE 8" /Libreria/Java/JavaVirtualMachines/jdk1.8.0_271.home-Centro Studi /Libreria / Plug-in Internet / JavaAppletPlugin.plugin / Contents / Home
Stavo affrontando un problema simile, che quando ho impostato il mio java_home come
echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile
È stato impostato su
/ Biblioteca / Internet Contatti /
Quindi l'ho fatto come echo export"JAVA_HOME=" Libreria / Java / JavaVirtualMachines / jdk1.8. 0_271.jdk / Contents / Home">>~/.bash_profile
Il risultato è in
Admins-MacBook-Pro:carot arun$ echo $JAVA_HOME
/ Libreria / Java / JavaVirtualMachines / jdk1.8. 0_271.jdk / Indice / Home
È anche possibile modificarlo in futuro, se necessario vai al tuo utente, nel mio caso cartella arun premere comando + maiusc+. per vedere i file nascosti aprire .bash_profile in uno dei tuoi editor preferiti