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?

Author: Jurica Krizanic, 2013-07-09

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.

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

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