5 votes

Comment demander à une application d'utiliser une version spécifique de Java ?

J'ai une application Java qui fait fonctionne sous Java 1.8 sans problème lorsque je lance son JAR directement. Cependant, sur mon Mac, le JAR est intégré dans une application qui me demande d'installer Java 1.6 -- ce que je ne veux vraiment pas faire !

Je cherche donc l'endroit où je pourrais configurer mon application pour qu'elle utilise la version installée de Java 1.8.

Changement de propriété InfoDictionary version à l'intérieur Contents/Info.plist à 8.0 ne sera d'aucune utilité.

Est-ce possible ou dois-je créer un nouveau paquet d'applications ? Dans ce dernier cas, quel outil serait le meilleur pour faire cela pour un ensemble d'applications ?

5voto

agentroadkill Points 1466

Grâce à un post sur SuperUtilisateur Il semble que ce soit assez simple. Il semble que différentes versions de Java puissent être appelées à partir du JRE d'Apple :

/usr/libexec/java_home -v 1.6.0 --exec <Java command>

D'après ce que j'ai compris, cela ne fournit pas réellement un JRE différent, mais fait simplement en sorte que le JRE installé s'identifie comme la version appelée, et met en œuvre toutes les différences mineures entre les versions. Si ce n'est pas le cas, que d'autres me corrigent.

Dans votre cas, il s'agirait de

/usr/libexec/java_home -v 1.6.0 --exec java -jar <yourJarHere>.jar

L'article susmentionné indique également que vous pouvez modifier le fichier appelé /Applications/yourApp.app/Contents/MacOS/yourApp afin d'utiliser la commande correcte, de sorte que vous n'ayez pas à la retaper ou à vous en souvenir à chaque fois.

Toute cette courtoisie Geff

4voto

Seven Points 201

Il semble qu'Oracle aurait pu corriger ce problème. Mais il ne l'a pas fait ...

J'ai donc réussi à le faire fonctionner en procédant de la manière suivante : (Tous les crédits vont à : https://oliverdowling.com.au/2014/03/28/java-se-8-on-mac-os-x )

Je suppose que vous avez installé le dernier JDK (actuellement 1.8.0_60, veuillez l'ajuster à l'avenir).

Modifier le contenu de Info.plist :

Ouvrez le terminal et lancez la commande suivante

sudo nano /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Info.plist

Recherche de clés JVMCapabilities et la modifier comme suit :

<key>JVMCapabilities</key>
<array>
    <string>CommandLine</string>
    <string>JNI</string>
    <string>BundledApp</string>
</array>

Ajouter un lien symbolique pour libjvm.dylib y libserver.dylib :

Ouvrez Terminal et lancez ces deux commandes :

sudo mkdir -p /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bundle/Libraries
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/server/libjvm.dylib /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bundle/Libraries/libserver.dylib

3voto

Cela pourrait aider à accélérer la recherche d'une réponse. Rappelant que PyCharm.app fait quelque chose de similaire, voici un extrait des applications Info.plist (attention aux lignes snip qui s'y trouvent) :

…snip…
<key>JVMOptions</key>
<dict>
  …snip…
  <key>JVMVersion</key>
  <!-- string>1.6*,1.7+</string -->
  <string>1.7+</string>
  …snip…
</dict>
…snip…

De même, l'application PaperCut Client (PCClient) utilise des éléments similaires dans son application Info.plist :

<plist version="1.0">
  <dict>
    …snip…
    <key>CFBundleExecutable</key>
    <string>JavaAppLauncher</string>
    <key>JVMRuntime</key>
    <string>jre</string>
    <key>JVMMainClassName</key>
    <string>biz.papercut.pcng.client.uit.UserClient</string>
    <key>JVMOptions</key>
    <array>
      <string>-Dclient.home=$APP_ROOT/Contents/Resources/</string>
      <string>-Dcom.apple.macos.useScreenMenuBar=true</string>
      <string>-Xmx256m</string>
      <!-- Workaround since the icon parameter for bundleapp doesn't work -->
      <string>-Xdock:icon=$APP_ROOT/Contents/Resources/client-icon.icns</string>
    </array>
    <key>JVMArguments</key>
    <array/>
  </dict>
</plist>

Là encore, il s'agit de parties de différents Info.plist Il se peut donc qu'ils ne fonctionnent pas comme un simple copier-coller. Cependant, les deux applications travail sous OS X, ces clés/valeurs peuvent vous aider à trouver une solution efficace.

Les deux applications semblent avoir une façon de faire légèrement différente. PCClient.app semble inclure sa propre version de Java, alors que PyCharm s'appuie sur ce qui est installé sur OS X.

0voto

atErik Points 191

Pour plus de détails, veuillez consulter la section "OPTIONAL / EXTRA : Setup Specific Java ENV-VAR" (cette section se trouve en bas de page) de ce document. répondre Voir aussi cette répondre.

Résumé :

  1. Obtenir le binaire Java 8 (JDK, 1.8, qui inclut JRE) optimisé pour MacOS (et qui inclut également le code Src), auprès d'Oracle. site & l'installer, (Java basé sur Oracle est gratuit uniquement pour un usage personnel, non gratuit pour un usage commercial et non gratuit si vous voulez distribuer JRE ) . ( OpenJDK basé sur l'héritage de Java 8 ( 1.8 ) Le code source est disponible dans OpenJDK.java.net pour ceux qui veulent le compiler et construire leur propre binaire . OpenJDK (y compris JRE) v9 (1.9) et plus sont disponibles sous forme de binaire optimisé pour MacOS à l'adresse suivante OpenJDK archive-site/page . Le logiciel Java basé sur OpenJDK est gratuit pour tout usage commercial et également gratuit pour un usage personnel. )
  2. Mettre en place ces VAR ENV spécifiques : JAVA_HOME & PATH, uniquement pour une application spécifique, avant de la lancer, en utilisant un shell script :
    ( ne pas taper le mot 'cmd:' , lorsque vous copiez/tapez une commande à partir d'ici )
  • Exécutez ce jeu de commandes pour créer un fichier shell-script avec une ligne d'en-tête :
    cmd: sb='#!/bin/bash' ; echo "$sb" > ~/java-based-APP-name.sh ; unset sb;
    ( modifier le "java-based-APP-name" dans le nom de l'application cible)
  • modifiez ce fichier script de l'interpréteur de commandes en utilisant nano :
    cmd: nano ~/java-based-APP-name.sh
    • La première ligne doit être #!/bin/bash pour l'utiliser comme script de l'interpréteur de commandes "BASH", ajoutez les 5 lignes suivantes :
      export JAVA_HOME=$(/usr/libexec/java_home --version 1.8);
      export PATH="$JAVA_HOME/bin:$PATH";
      # $JAVA_HOME/bin/java -jar executableJarAppName.jar
      # $JAVA_HOME/bin/java -cp jarAppName.jar <full-path-of-main-class>
      "/Applications/java-based-APP-name.app/Contents/MacOS/java-based-APP-name"
  • Économiser "~/java-based-APP-name.sh" & sortir de nano . ( Nano )
    (Note : si le nom d'une application MacOS est "My MacApp.app" alors il doit avoir un fichier exécutable portant le même nom ici : "My MacApp.app/Contents/MacOS/My MacApp" . Ainsi, l'exemple ci-dessus script utilise cet exemple d'exécutable )
  • Et définir le bit d'autorisation "exécuter" : cmd: chmod +x ~/java-based-APP-name.sh
  1. Vous pouvez maintenant lancer l'application en utilisant le shell-script : cmd: ~/java-based-APP-name.sh
    ( cette application aura accès à Java 8 (1.8) que vous avez installé, et que vous avez spécifié dans le shell script . Vous pouvez également créer un raccourci/lien pour ce shell-script et placer le lien à l'intérieur du fichier /Applications afin que vous puissiez voir une icône et cliquer dessus pour lancer l'application cible. )

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X