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?

Author: Jurica Krizanic, 2013-07-09

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.

 10
Author: Ian Roberts, 2014-02-06 11:41:52
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 / .plugin / Contents / Home

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

 0
Author: Arun, 2020-11-15 15:16:01