¿Cómo dirigir una aplicación para usar una versión específica de Java?

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

Así que estoy buscando el punto dentro del package de la aplicación donde pude configurar que mi aplicación use el Java 1.8 instalado

  • Instalar versiones anteriores de Java en OSX 10.8.1
  • IntelliJ Scala ya no funciona después de la actualización de El Capitan
  • Cómo evitar las windows emergentes "instalar java"
  • ¿iOS desactiva los efectos de fundido de input?
  • Si instalo un time de ejecución de Java más viejo y obsoleto, ¿se estropearán las aplicaciones que usan la versión actual de Java?
  • Java - versión 1.7.45 - y Mavericks
  • Cambiar la propiedad de la InfoDictionary version dentro de Contents/Info.plist a 8.0 no ayudará.

    ¿Es posible esto o necesito crear un package de aplicaciones completamente nuevo? En el caso de lo último, ¿qué herramienta sería la mejor para hacer esto para un montón de aplicaciones?

  • ¿Snow Leopard Server es un buen candidato para el uso diario como sistema operativo principal?
  • ¿Cómo combinar dos o más files de Safari Bookmarks.plist juntos?
  • La configuration del sistema Mac OS Sierra no permanecerá configurada
  • ¿Cómo restaurar el sistema desde la unidad de networking?
  • ¿Todos los Mac vienen con las aplicaciones de iLife?
  • Hay un file llamado% FF en la raíz. ¿Para qué sirve?
  • 3 Solutions collect form web for “¿Cómo dirigir una aplicación para usar una versión específica de Java?”

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

     …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) utiliza 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 files Info.plist por lo que es posible que no funcionen como copyr y pegar directamente. Sin embargo, ambas aplicaciones funcionan en OS X, por lo que estas keys / valores pueden ayudarlo a limitarse a una solución funcional.

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

    Gracias a una publicación en SuperUser , 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> 

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

    Para sus 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 file llamado /Applications/yourApp.app/Contents/MacOS/yourApp para usar el command correcto, por lo que no necesita volver a escribirlo ni recordarlo todo el time.

    Todo esto cortesía de Geff

    Parece que Oracle podría haber arreglado esto. Pero no …

    Así que lo tengo trabajando ahora haciendo esto: (Todos los créditos van a: https://oliverdowling.com.au/2014/03/28/java-se-8-on-mac-os-x )

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

    Cambiar el contenido de Info.plist:

    Abra la Terminal y emita este command

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

    Busque las JVMCapabilities key de JVMCapabilities y cámbielo a esto:

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

    Agregue un enlace de sum a libjvm.dylib:

    Abra la Terminal y emita estos dos commands:

     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 
    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).