6 votos

¿Cómo hacer que una aplicación utilice una versión específica de Java?

Tengo una aplicación Java que hace se ejecuta 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 que instale Java 1.6 - ¡lo que realmente no quiero hacer!

Así que estoy buscando el punto dentro del paquete de la aplicación donde podría configurar que mi aplicación debe utilizar el Java 1.8 instalado

Cambio de propiedad InfoDictionary version en Contents/Info.plist a 8.0 no ayudará.

¿Es esto posible o tengo que crear un nuevo paquete de aplicaciones completo? En caso de lo segundo, ¿qué herramienta sería la mejor para hacer esto para un grupo de aplicaciones?

6voto

Chris Cundy Puntos 738

Gracias a un post en SuperUser Parece que esto es bastante sencillo. Parece que las diferentes versiones de Java pueden ser llamadas desde el propio JRE de Apple:

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

Tengo entendido que esto no proporciona realmente 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 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

El post enlazado más arriba también señala que puedes editar el archivo llamado /Applications/yourApp.app/Contents/MacOS/yourApp para utilizar el comando correcto y así no tener que volver a escribirlo o recordarlo cada vez.

Todo esto por cortesía Geff

4voto

cdvonstinkpot Puntos 21

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

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

Asumo que tienes instalado el último JDK (actualmente 1.8.0_60, por favor ajusta esto en el futuro)

Cambiar el contenido de Info.plist:

Abra el Terminal y emita este comando

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

Busque la clave JVMCapabilities y cámbialo por esto:

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

Añadir un enlace simbólico para libjvm.dylib y libserver.dylib :

Abra el Terminal y emita 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

3voto

Esto podría ayudar a encontrar una respuesta. Recordando que PyCharm.app hace algo similar, he aquí un extracto de las aplicaciones Info.plist (observe las líneas snip que hay allí):

…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>

De nuevo, se trata de partes de diferentes Info.plist por lo que es posible que no funcionen como un simple copiar y pegar. Sin embargo, ambas aplicaciones trabajo en OS X, así que estas claves/valores podrían ayudarte a encontrar 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.

0voto

atErik Puntos 81

Para más detalles, por favor revise/lea esta sección "OPCIONAL / EXTRA : Configuración de ENV-VAR específicos de Java" (esta sección está en la parte inferior) de este responder Por favor, vea también este respuesta.

Resumen:

  1. Obtenga el binario Legacy Java 8 (JDK, 1.8, que incluye JRE) (que está optimizado para MacOS) (y también incluye el código Src), de Oracle sitio e instálelo, (el Java basado en Oracle es gratuito sólo para uso personal, no es gratuito para uso comercial y no es gratuito si quiere distribuir JRE ) . ( OpenJDK basado en Legacy Java 8 ( 1.8 ) El código fuente está disponible en OpenJDK.java.net para aquellos que quieran compilarlo y construir su propio binario. OpenJDK (incluye JRE) v9 (1.9) y superiores están disponibles como binarios optimizados para MacOS en OpenJDK archivo-sitio/página . El Java basado en OpenJDK es gratuito para cualquier uso comercial y también para uso personal. )
  2. Configure estas ENV VAR específicas: JAVA_HOME & PATH, sólo para una aplicación específica, antes de ejecutarla, utilizando un shell script:
    ( no escriba la palabra 'cmd:' cuando copie/escriba un comando desde aquí )
  • Ejecute este conjunto de comandos para crear un archivo shell-script con una línea de cabecera:
    cmd: sb='#!/bin/bash' ; echo "$sb" > ~/java-based-APP-name.sh ; unset sb;
    ( cambiar el "java-based-APP-name" en el nombre real de su aplicación de destino )
  • editar ese archivo shell script utilizando nano :
    cmd: nano ~/java-based-APP-name.sh
    • La primera línea debe ser #!/bin/bash para usarlo como "BASH" shell script, entonces añade las 5 líneas siguientes:
      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"
  • Guardar "~/java-based-APP-name.sh" & salir del nano . ( Nano )
    ( Nota: si el nombre de una aplicación MacOS es "My MacApp.app" entonces debe tener un archivo ejecutable con el mismo nombre aquí: "My MacApp.app/Contents/MacOS/My MacApp" . Así que el ejemplo anterior script está utilizando ese ejecutable de ejemplo )
  • Y establecer el bit de permiso de "ejecución": cmd: chmod +x ~/java-based-APP-name.sh
  1. Ahora puede ejecutar la aplicación utilizando el shell-script: cmd: ~/java-based-APP-name.sh
    ( esa App tendrá acceso a Java 8 (1.8) que has instalado, & que has especificado en el shell script . También puedes crear un acceso directo/enlace para ese shell-script y colocar el enlace dentro del /Applications para que pueda ver un icono y hacer clic en él para ejecutar la aplicación de destino. )

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X