usar sierra para mojave mac línea jdk instalar high herramienta for descargar debes comandos antiguo java macos bundle java-7

sierra - La aplicación está usando Java 6 de Apple en lugar de Java 7 de Oracle en Mac OS X?



java se 6 mac os sierra (5)

Estoy probando mi aplicación actual con Mac OS X que tiene Java 7 de Oracle instalado. En lugar de usar Java 7 de Oracle, usa Java 6 de Apple. La salida del sistema predeterminada de java -version muestra 7 .

Intenté la mayoría de las cosas mencionadas en diferentes sitios, pero no pude solucionar este problema.

JAVA_HOME también está configurado correctamente.

Estoy usando la Mac solo con fines de prueba. Realmente necesito una guía sobre esto.

Cuando lo ejecuto con Eclipse seleccionando JRE 7, se ejecuta correctamente. Por lo tanto, no hay nada de malo con la aplicación. Me falta algo en Mac OS X.

Mi entorno de sistema Java se ve así:

  • Versión OS X

    10.8

  • /usr/libexec/java_home -V

    Matching Java Virtual Machines (3): 1.7.0_12, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk 1.6.0_37-b06-434, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home 1.6.0_37-b06-434, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home

  • /usr/libexec/java_home

    /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home

  • echo $JAVA_HOME

    /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home/

  • JAVA_ARCH no está configurado

  • /Library/Internet/ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -version

    java version "1.7.0_12-ea"

  • ls /Library/Java/JavaVirtualMachines

    jdk1.7.0_12.jdk

  • /System/Library/Frameworks/JavaVM.framework/Commands/java -version

    java version "1.6.0_37"

Creo que mi JDK actual apunta a algo mal.


Problema

El paquete de aplicaciones de Mac OS X se ha creado con un paquete de aplicaciones que no es compatible con el paquete Java 7 de Oracle. El paquete que estaba utilizando podría ser, por ejemplo, Jar Bundler proporcionado por Apple, que solo funciona para los paquetes de sistema Java 6 de Apple.

Apple ha renunciado a la compatibilidad con Java como un paquete de sistema integrado de Java 7 y posterior. Como consecuencia, debe elegir el paquete Oracle Java 7 Third Party y la solución del paquete de paquetes de aplicaciones. Esto le permite crear y desplegar paquetes de aplicaciones basados ​​en Oracle Java 7 en Mac OS X 10.7.3 en adelante.

El problema técnico subyacente al que se enfrenta es el binario JavaAppLauncher basado en Objective-C nativo de Apple y el formato que usa en Info.plist solo funciona con los paquetes de sistema Java 6 de Apple y la combinación JavaAppLauncher Info.plist solo funciona para Java de Oracle 7 paquetes.

Como está utilizando un JavaAppLauncher compatible con los paquetes del sistema Java 6 de Apple, siempre recogerá el paquete del sistema Apple Java 6 instalado en su Mac.

Hay un video en el que Scott Kovatch, ingeniero principal del puerto Mac OS X de la plataforma Java de Oracle, está hablando en DEVOXX sobre cómo la creación de paquetes de aplicaciones para Oracle Java 7 está trabajando con gran detalle.

Solución

Para crear paquetes de aplicaciones basados ​​en Mac OS X 10.7.3 y en adelante basados ​​en

y arriba, tienes que usar el paquete de aplicaciones de Oracle

Con el paquete de aplicaciones de Oracle ahora tiene la opción de ejecutar su aplicación empaquetada con el Paquete Oracle Java 7 predeterminado instalado en su Mac aquí:

  • /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/

o el JRE de Oracle Java 7 en línea en su aplicación empaquetada

  • MyJavaMacOSXApp.app/Contents/PlugIns/

Nota: Existen ventajas y desventajas para ambos enfoques, pero necesita la última con su propio JRE si desea ir a la App Store de Apple con su aplicación en paquete.

Lo que hay que hacer

  • Descargue lib/appbundler-1.0.jar y muévalo a <project>/lib/appbundler-1.0.jar
  • Agregue lo siguiente a su <project>/build.xml

    <property environment="env" /> <taskdef name="bundleapp" classname="com.oracle.appbundler.AppBundlerTask" classpath="lib/appbundler-1.0.jar" /> <target name="bundle"> <bundleapp outputdirectory="dist" name="MyJavaMacOSXApp" displayname="My Java Mac OS X App" identifier="com.example.MyJavaMacOSXApp" shortversion="1.0" applicationCategory="public.app-category.developer-tools" mainclassname="com.example.MyJavaMacOSXApp"> <runtime dir="${env.JAVA_HOME}" /> <classpath file="dist/MyJavaMacOSXApp.jar" /> </bundleapp> </target>

    Nota: debe reemplazar MyJavaMacOSXApp con los datos de su aplicación. com.oracle.appbundler.AppBundlerTask puede encontrar algunas opciones adicionales de AppBundlerTask , ya que este ejemplo muestra solo cómo funciona en su forma más simple.

  • Después de ejecutar el objetivo del bundle con ant bundle , encontrará MyJavaMacOSXApp.app en el directorio <project>/dist .

¿Qué significa el elemento <runtime dir="${env.JAVA_HOME}" /> ?

Inlinear Oracle Java 7 Package (JRE)

El objetivo Ant anterior copia el paquete Oracle Java 7 (JRE) de su

  • JAVA_HOME

dentro

  • MyJavaMacOSXApp.app/Contents/PlugIns

Por lo tanto, el paquete de la aplicación es totalmente autónomo y no necesita un paquete Oracle Java 7 (JRE) instalado en el sistema de destino. Como puede ver en la siguiente captura de pantalla de dicha aplicación MyJavaMacOSXApp.app :

Cableado predeterminado del paquete Oracle Java 7 (JRE)

Si desea utilizar el Paquete Oracle Java 7 predeterminado (JRE) instalado en el paquete de aplicación objetivo Mac bajo

  • /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/

tienes que eliminar el

  • <runtime dir="${env.JAVA_HOME}" />

elemento a partir de la tarea del bundle . Como puede ver en la siguiente captura de pantalla de dicha aplicación MyJavaMacOSXApp.app :

Fuente de MyJavaMacOSXApp.java

package com.example; import java.awt.*; import javax.swing.*; public class MyJavaMacOSXApp extends JPanel { public MyJavaMacOSXApp() { JLabel versionLabel = new JLabel("java.version=" + System.getProperty("java.version")); JLabel homeLabel = new JLabel("java.home=" + System.getProperty("java.home")); setLayout(new BorderLayout()); add(versionLabel, BorderLayout.PAGE_START); add(homeLabel, BorderLayout.PAGE_END); } private static void createAndShowGUI() { JFrame frame = new JFrame("MyJavaMacOSXApp"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); MyJavaMacOSXApp newContentPane = new MyJavaMacOSXApp(); newContentPane.setOpaque(true); frame.setContentPane(newContentPane); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } }

¿Qué ocurre si mi aplicación tiene varios archivos jar?

Simplemente agregue tantas entradas <classpath file="dist/additional.jar" /> como necesite.

Nota: El orden de los elementos en la tarea del paquete no se conserva en el tiempo de ejecución de la aplicación incluida. java.class.path se java.class.path en tiempo de ejecución mediante el JavaAppLauncher nativo JavaAppLauncher como se lee en el directorio *.jar s de MyJavaMacOSXApp.app/Contents/Java .

Para completar, así es como se ve Info.plist :

<?xml version="1.0" ?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>English</string> <key>CFBundleExecutable</key> <string>JavaAppLauncher</string> <key>CFBundleIconFile</key> <string>GenericApp.icns</string> <key>CFBundleIdentifier</key> <string>com.example.MyJavaMacOSXApp</string> <key>CFBundleDisplayName</key> <string>My Java Mac OS X App</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>MyJavaMacOSXApp</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> <string>1.0</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>1</string> <key>NSHumanReadableCopyright</key> <string></string> <key>LSApplicationCategoryType</key> <string>public.app-category.developer-tools</string> <key>JVMRuntime</key> <string>jdk1.7.0_17.jdk</string> <key>JVMMainClassName</key> <string>com.example.MyJavaMacOSXApp</string> <key>JVMOptions</key> <array> </array> <key>JVMArguments</key> <array> </array> </dict> </plist>

Documentos importantes en los que se basa esta respuesta:

  1. http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html
  2. http://java.net/projects/appbundler/pages/Home
  3. com.oracle.appbundler.AppBundlerTask
  4. http://intransitione.com/blog/take-java-to-app-store/
  5. video

También hay un tenedor de appbundler bien mantenido, con muchas más características y correcciones de errores.


EDITAR: La impresionante respuesta de Uwe es absolutamente correcta para el OP que resultó que estaba usando el AppLauncher. Mi lectura inicial de la pregunta fue que se relacionaba con problemas de línea de comandos en OSX con Java 6 vs Java 7. Los comentarios sobre la pregunta original muestran que estaba equivocado. Sin embargo, cualquiera que tenga problemas con la línea de comandos puede encontrar la siguiente solución más simple.

ORIGINAL: Mis circunstancias parecían las mismas que pensaba que tenía el OP: Java 1.7 perfectamente en la línea de comandos pero mvn fallando y quejándose de 1.6, la compilación general había funcionado bien usando sbt e IntelliJ. Solo comencé a tener problemas para compilar un proyecto de terceros con mvn .

Encontré que esto funciona bien y es mucho más simple:

http://www.jayway.com/2013/03/08/configuring-maven-to-use-java-7-on-mac-os-x/

Todo lo que necesitaba de eso era lo siguiente en .profile:

export JAVA_HOME=`/usr/libexec/java_home -v 1.7`

Establezca esa variable y mvn funcionó bien.


Intenta instalar esto:

http://support.apple.com/kb/dl1572

InteliJ funciona bien, mientras que todavía estoy en Java SE 7 usando, por ejemplo, NetBeans.

java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)


La versión de Java requerida por la aplicación es probable que se especifique en los metadatos de la aplicación. Si hace clic con el botón derecho en la aplicación y selecciona Mostrar contenido del paquete y Info.plist archivo Info.plist , debe encontrar las entradas que definen la JVM que usará la aplicación. P.ej

<key>JVMVersion</key> <string>1.5</string>

OSX puede optar por utilizar una JVM inferior si la aplicación lo solicita.


Su sistema no está realmente actualizado. No digo que esto esté causando tu problema. Pero solo para estar seguro, cumpliré con los más recientes y mejores.

  1. Active su sistema a través de la actualización del sistema, que está en Mac OS X 10.8.2
  2. Instale un JRE nuevo 1.6.0_43 de Apple también conocido como Java para OS X 2013-002
  3. Instale un JDK nuevo 1.6.0_43 de Apple también conocido como Java para el paquete de desarrollo OS X 2013-002 del 4 de marzo de 2013 . Para obtener el JDK de Apple, debe iniciar sesión aquí con su ID de Apple (cuenta de desarrollador gratuita) y buscar el término "Paquete de desarrollador Java para OS X 2013-002". Desafortunadamente no hay un enlace directo para ese paquete.
  4. Elimine su Oracle JDK obsoleto: sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk . Nota: Eso es seguro porque en el siguiente paso estamos instalando el Oracle JDK 1.7.0_17 actual.
  5. Descargue e instale Oracle JDK 1.7.0_17 para Mac OS X. Nota: Esto también incluye el JRE 1.7.0_17 de Oracle.
  6. Haz un reinicio.

Una vez que haya terminado todos los pasos desde arriba, vuelva a generar la siguiente salida:

  1. ¿Qué versión de OS X usas?
  2. ¿Qué vuelca el comando /usr/libexec/java_home -V out?
  3. ¿Qué vuelca el comando /usr/libexec/java_home ?
  4. ¿Qué vuelca el comando echo $JAVA_HOME out?
  5. ¿Qué vuelca el comando echo $JAVA_ARCH out?
  6. ¿Qué vuelca el comando /Library/Internet/ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -version out?
  7. ¿Qué descarga el comando ls /Library/Java/JavaVirtualMachines ?
  8. ¿Qué descarga el comando /System/Library/Frameworks/JavaVM.framework/Commands/java -version out?

Solo documente los pasos y el esfuerzo que hizo en su pregunta original. Entonces refleja tu progreso.

ACTUALIZACIÓN: la solución es crear un paquete de aplicaciones Mac OS X con Oracles http://java.net/projects/appbundler/pages/Home . Para más detalles, vea mi otra respuesta aquí: share