Comment diriger une application pour utiliser une version Java spécifique?


3

Je suis une application Java qui ne fonctionne sous Java 1.8 sans problème quand je commence son JAR directement. Toutefois, sur mon Mac, le fichier JAR est intégré à une application qui me demande d’installer Java 1.6 - ce que je ne veux vraiment pas faire!

Donc, je cherche le point dans le paquet d'application où je pourrais configurer que mon application doit utiliser le Java 1.8 installé

Changer la propriété InfoDictionary versiondans la Contents/Info.plist8.0 ne va pas aider.

Est-ce possible ou dois-je créer un nouvel ensemble d'applications? Dans le cas du dernier cas, quel outil serait le mieux pour faire cela pour un tas d'applications?


L'application est-elle une application Java seule ou s'appelle-t-elle Tom dans une autre application? S'il s'agit d'une application Java seule, vous pouvez y pointer une version Java spécifique. Sinon, vous devrez spécifier une version Java globale à tout moment pour ouvrir cette application.
agentroadkill

@agentroadkill: à l'origine, c'est une application qui lui est propre, déployée en tant que fichier JAR sur toutes les autres plateformes. Pour MacOS, il est fourni dans un package APP. Si vous sélectionnez "afficher le contenu du paquet", vous y trouverez des métadonnées, Info.plist et le fichier JAR lui-même. Je peux commencer ce JAR directement cependant.
Sept

@agentroadkill: Alors, pourriez-vous préciser un peu comment spécifier ma version Java pour toutes les applications?
Sept

Voici le post SuperUser spécifiant ce que vous cherchez à faire. Je vais élaborer plus dans une réponse ci-dessous.
agentroadkill

Je pense que cette réponse peut compléter ce fil de discussion: stackoverflow.com/a/15379462/335478
Seven

Réponses:


3

Cela pourrait aider à démarrer rapidement à trouver une réponse. Rappelant que PyCharm.app fait quelque chose de similaire, voici un extrait du Info.plistfichier d’ applications (regardez les lignes… snip… là-dedans):

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

En outre, l’application PaperCut Client (PCClient) utilise des éléments similaires dans ses éléments suivants 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>

Encore une fois, il s’agit de parties de différents Info.plistfichiers qui risquent de ne pas fonctionner comme un copier-coller simple. Cependant, les deux applications fonctionnent sous OS X. Ces clés / valeurs peuvent donc vous aider à trouver une solution qui fonctionne.

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


Merci, c’est exactement l’endroit où j’ai pensé qu’on devrait pouvoir énoncer le minimum de JRE requis ... Cependant, aucun de ces paramètres n’a eu d’effet. Je reçois toujours une boîte de dialogue demandant l'installation de JRE 1.6. Je pense que cela dépend aussi de JavaAppLauncher qui est en train de démarrer, ce qui demandera un JRE 1.6
Seven le

3

Il semble que Oracle aurait pu résoudre ce problème. Mais n'a pas ...

Donc, je travaille maintenant en faisant ceci: (Tous les crédits vont à: https://oliverdowling.com.au/2014/03/28/java-se-8-on-mac-os-x )

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

Changer le contenu de Info.plist:

Ouvrez Terminal et lancez cette commande

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

Cherchez la clé JVMCapabilitieset changez-la en ceci:

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

Ajouter un lien symbolique pour libjvm.dylibet 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

1
Que fait ce changement?
Marc

@Mark Cette modification permet à la machine virtuelle Java d'être exécutée non seulement à partir de la ligne de commande, mais également à partir de l'interface native Java et des applications fournies. Cependant, vous constaterez qu'il sera toujours impossible de trouver libjvm.dylibet libserver.dylibqui est corrigé avec les liens symboliques.
Spex

C’est une excellente réponse, mais comment l’appliquez-vous à JRE au lieu d’un JDK? J'ai trouvé l'équivalent pour le lien symbolique ci-dessous /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/mais il n'y a pas d'Info.plist qui contient une JVMCapabilitiesentrée.
tatsu

1

Merci à un post sur SuperUser , cela semble être 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>

Je crois comprendre que cela ne fournit pas réellement un JRE différent, mais provoque simplement l’identification du JRE installé en tant que version appelée et implémente toutes les différences mineures entre les versions. Les autres devraient absolument me corriger si ce n'est pas le cas.

Pour vos besoins, ce serait

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

Le message lié ci-dessus indique également que vous pouvez éditer le fichier nommé /Applications/votreApp.app/Contents/MacOS/votreApp pour utiliser la commande correcte afin que vous n'ayez pas besoin de la retaper ou de vous en souvenir à chaque fois.

Toute cette courtoisie Geff


Tout ce qu'il fait est d'exécuter le java défini avec le paramètre -v
Mark

Le problème était que l'application souhaitait une version différente de JRE. Ainsi, le JRE fourni par Apple s’identifie comme celui qui est requis et fournit les fonctions attendues de cette version de Java
agentroadkill
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.