Trouver Java 8 avec une application Mac


J'ai une application avec quelques milliers de téléchargements d'utilisateurs, écrite en Java, qui est stable depuis des années. Il fonctionne sur Windows et OSX. Maintenant, il y a des problèmes avec la nouvelle version d'OSX High Sierra.

L'application se bloque avec Java 1.6, mais semble fonctionner correctement avec Java 1.8.

Dans le dossier de l'application se trouve un fichier Info.plist. Ce fichier spécifiait à l'origine un Java JVMVersion de 1.5+. Cela provoque l'exécution de mon application sous Java 1.6. Si Java 1.6 n'est pas présent, un message s'affiche invitant l'utilisateur à installez le " Runtime Java SE6 hérité."J'ai essayé de mettre à jour Info.plist pour spécifier 1.8+, mais lorsque j'essaie d'exécuter l'application, un message apparaît disant: "Aucune version compatible de Java 1.8+ n'est disponible."C'est même si j'ai directement téléchargé et installé Java 8 Version 151 directement à partir de Oracle.com.

Comment puis-je faire fonctionner l'application sous Java 8?

Author: Jerry Agin, 2017-10-31

1 answers

Oui, la réponse est de regrouper le JRE. Cela a été une aventure pour tout faire fonctionner. Pour d'autres qui doivent passer par le même processus ou un processus similaire, j'énumère les étapes.

Mon application est écrite en Java, ma principale machine de développement est Windows. Pour distribuer l'application, je dois copier les fichiers nécessaires sur mon Mac et les emballer là-bas.

Télécharger apache-ant-1.10.1-bin.zip à partir de ant.apache.org. Déplacez-le sur /Library/Java/Extensions.

% sudo nano /etc/paths # add /Library/Java/Extensions/apache-ant-1.10.1/bin
% nano .bash_profile # add ANT_HOME and JAVA_HOME

Télécharger appbundler depuis https://bitbucket.org/infinitekind/appbundler/, et l'installer dans ~/JCode/appbundler.

% cd ~/JCode/appbundler
% ant

Cela crée ~/JCode/appbundler/bin/appbundler-1.0ea.jar. Copiez-le dans ~/JCode/intonia/lib.

Sous Windows, utilisez Eclipse et Proguard pour créer Intonia.jar et copiez dans ~/JCode/intonia. Copiez également d'autres fichiers jars et fichiers de bibliothèque nécessaires à la distribution.

Créer construire.xml dans ~/JCode/intonia. Voici mon build.xml:

<project name="Intonia" default="bundle-Intonia" basedir=".">        
<!-- Import environment variables -->
<property environment="env"/>

<taskdef name="bundleapp"
     classname="com.oracle.appbundler.AppBundlerTask"   
     classpath="lib/appbundler-1.0ea.jar" />

<target name="bundle-Intonia">
    <delete dir="appBundle" failonerror="false"/>
    <mkdir dir="appBundle"/>
    <bundleapp outputdirectory="appBundle"
    name="Intonia"
    displayname="Intonia"
    identifier="com.intonia.Intonia"
    icon="Intonia.icns"
    mainclassname="com.intonia.tony.Intonia">
    <runtime dir="${env.JAVA_HOME}"/>
    <classpath file="Intonia.jar"/>
    <classpath file="jh.jar"/>
    <classpath file="jl1.0.1.jar"/>
    <classpath file="mp3spi1.9.4.jar"/>
    <classpath file="tritonus_share.jar"/>
    <classpath file="DefaultOptions.tab"/>
    <option value="-Xdock:icon=Intonia.icns"/>
    </bundleapp>
</target>
</project>

Les modifications notables pour que les choses fonctionnent correctement incluent <runtime dir="${env.JAVA_HOME}"/>, et <option value="-Xdock:icon=Intonia.icns"/> en plus de icon="Intonia.icns".

% cd ~/JCode/intonia
% ant

Cela crée ~/JCode/intonia/appBundle/Intonia.app.

Mon application utilise JavaHelp. JavaHelp exige que les fichiers d'aide soient dans un sous-répertoire du fichier jar appelé Help. Je n'ai pas trouvé de moyen d'obtenir appbundler pour créer et remplir ce répertoire, je dois donc l'ajouter manuellement. Dans le Finder, Affichez le contenu de l'emballage. Option-faites glisser le dossier ~/JCode/intonia/Help dans le répertoire Contents/Java/ du Intonia.app.

% codesign -s "Developer ID Application" -fv --deep appBundle/Intonia.app
% pkgbuild --root appBundle Intonia.pkg

Créer une 'Distribution.xml' dans ~/JCode/intonia. Voici le fichier:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<installer-gui-script minSpecVersion="2">
<title>Intonia</title>
<options customize="never" rootVolumeOnly="true"/>
<conclusion file="Welcome.rtf" mime-type="application/rtf"/>
<license file="EULA.txt" mime-type="text/plain"/>
<allowed-os-versions>
    <os-version min="10.6.6" />
</allowed-os-versions>
<options customize="never" require-scripts="false"/>
<product id="intonia" version="1.4.0" />
<choices-outline>
    <line choice="default">
    <line choice="intonia"/>
    </line>
</choices-outline>
<choice id="default"/>
<choice id="intonia" visible="false">
    <pkg-ref id="intonia"/>
</choice>
<pkg-ref id="intonia" version="1.4.0" onConclusion="none">Intonia.pkg</pkg-ref>
</installer-gui-script>

Enfin, exécutez productbuild. Il peut signer la distribution

% productbuild --distribution Distribution.xml --sign "Developer ID Installer" --resources . InstallIntonia1.4.0.pkg
 0
Author: Jerry Agin, 2017-11-08 19:43:46