¿Cómo dirigir una aplicación para que use una versión Java específica?

2

Obtuve una aplicación Java que sí se ejecuta bajo Java 1.8 sin problemas cuando inicio su JAR directamente. Sin embargo, en mi Mac, el JAR está envuelto en una aplicación que me exige instalar Java 1.6, ¡lo que realmente no quiero hacer!

Por lo tanto, estoy buscando el punto dentro del paquete de la aplicación donde puedo configurar que mi aplicación use el Java 1.8 instalado

Cambiar la propiedad InfoDictionary version dentro de Contents/Info.plist a 8.0 no ayudará.

¿Es esto posible o necesito crear un nuevo paquete de aplicaciones completo? En el caso de más adelante, ¿qué herramienta sería la mejor para hacer esto con un montón de aplicaciones?

    
pregunta Seven 01.09.2015 - 21:11

3 respuestas

3

Esto podría ayudar a comenzar a encontrar una respuesta. Recordando que PyCharm.app hace algo similar, aquí hay un extracto del archivo de aplicaciones Info.plist (vea las líneas de ... recorte ...):

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

Además, la aplicación PaperCut Client (PCClient) usa algunos elementos similares en su 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>

Nuevamente, estas son partes de diferentes archivos Info.plist por lo que podrían no funcionar como copiar y pegar directamente. Sin embargo, ambas aplicaciones funcionan en OS X, por lo que estas claves / valores pueden ayudarlo a limitarse a una solución que funcione.

Ambas aplicaciones parecen tener una forma ligeramente diferente de hacer las cosas. PCClient.app parece incluir su propia versión de Java, mientras que PyCharm se basa en lo que está instalado en OS X.

    
respondido por el jps3 01.09.2015 - 22:26
1

Gracias a una publicación en Superusuario , esto parece ser bastante sencillo. Parece que se pueden llamar diferentes versiones de Java desde el propio JRE de Apple:

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

Entiendo que esto no proporciona un JRE diferente, sino que simplemente hace que el JRE instalado se identifique a sí mismo como la versión llamada e implementa cualquier diferencia menor entre las versiones. Otros deberían definitivamente corregirme si este no es el caso.

Para tus propósitos, esto sería

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

La publicación vinculada anterior también señala que puede editar el archivo llamado /Applications/yourApp.app/Contents/MacOS/yourApp para usar el comando correcto para que no tenga que volver a escribirlo o recordarlo cada vez.

Toda esta cortesía Geff

    
respondido por el agentroadkill 02.09.2015 - 21:26
1

Parece que Oracle podría haber solucionado esto. Pero no ...

Así que ahora lo tengo funcionando haciendo esto: (Todos los créditos van a: enlace )

Supongo que tiene el último JDK instalado (actualmente 1.8.0_60, por favor, ajuste esto en el futuro)

Cambiar contenido de Info.plist:

Abre la Terminal y ejecuta este comando

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

Busque la clave JVMCapabilities y cámbiela a esta:

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

Agrega un enlace simbólico para libjvm.dylib y libserver.dylib :

Abre la Terminal y ejecuta estos dos comandos:

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
    
respondido por el Seven 15.10.2015 - 16:20

Lea otras preguntas en las etiquetas