1 votos

Agrupación de aplicaciones Java para Mac OS X Catalina

Escribo aplicaciones científicas amateur en Java que pongo a disposición de un público reducido de forma gratuita. (Probablemente yo soy el principal usuario.) La mayoría de ellas todavía se compilan bajo Java 1.6 donde se ejecutan bien en Mojave, ya sea como archivos jar o como aplicaciones con la estructura de contenido de paquete estándar que se muestra a continuación.

Package contents of Java 1.6 app

Bajo Catalina las aplicaciones ya no se lanzan y me aparece una pantalla diciéndome que tengo que instalar el runtime de Java SE 6 heredado, que, por supuesto, ya está instalado.

Install legacy Java 1.6

Sin embargo, si quito el archivo jar (aquí Motivator.jar) del paquete de la aplicación y hago doble clic en el escritorio (haciendo clic con el botón derecho para evitar Gatekeeper) se ejecuta bien.

Así que en un sentido estoy bien. Pero esto es un Mac y preferiría que mis aplicaciones se vieran como aplicaciones de Mac en el escritorio y cuando se ejecutan (es decir, que no se vea el nombre de la clase con mi método principal).

¿Alguien sabe si ya es posible empaquetar un archivo jar como una aplicación para Mac? Puedo recompilar con una versión superior de Java si es necesario.

0 votos

Java 6 es muy antiguo y no está soportado/descontinuado. Además, tiene muchos errores y problemas de seguridad no corregidos. Deberías actualizarte al menos a Java 8. Puede descargarlo de aquí (tiene una licencia gratuita)

1 votos

@abc Soy muy viejo, pero como mis aplicaciones todavía funcionan adecuadamente. Si Java 8 (que probablemente también tengo instalado) me permite empaquetar en una aplicación Catalina cambiaré mi configuración de Eclipse y recompilaré. ¿Pueden decirme si esto resolverá el problema? Sospecho que el problema es con JavaApplicationStub, que Apple puede haber abandonado. ¿Alguien lo sabe?

0 votos

¿Cómo está empaquetando su aplicación en un paquete de aplicaciones nativas?

1voto

William Leara Puntos 7251

Descargo de responsabilidad
Esta es una respuesta provisional a mi propia pregunta, que no aceptaré hasta que la haya probado finalmente. Sin embargo, como la gente está encontrando varios problemas con las aplicaciones de Java en el Mac pensé que era útil publicar para ayudar a los demás y permitir sugerencias de mejora.

Explicación del motivo del comportamiento
Resultó que:

  1. La razón por la que mi aplicación no se ejecutó fue porque el La actualización de Catalina había eliminado el Runtime de Java SE 6 del directorio JavaVirtualMachine donde residía en una máquina que ejecutaba una versión anterior de Mac OS X: /Library/Java/JavaVirtualMachines

  2. Mi aplicación se ejecutó como un archivo jar 'desnudo' porque había una copia de Java 1.8 de Oracle en ese directorio que Jar Launcher (la aplicación que maneja los archivos jar) debe haber empleado.

  3. Cuando copié el directorio 1.6.0.jdk de otra máquina en el directorio JavaVirtualMachine (sólo arrastré y solté todo - necesité una contraseña de administrador) se ejecutó desde la aplicación empaquetada como se muestra a continuación.

Packaged Java App running under Catalina and Java 1.6

Punto General: El tiempo de ejecución de Java SE 6 heredado de Apple hace correr por debajo de Catalina
Hay un artículo sobre Ars Technica que establece:

Y algunos componentes de larga data de MacOS no han dado el salto a los 64 bits. Entre ellos se encuentra el antiguo Java 6 Runtime mantenido por Apple

Esto me había sugerido (como también el amable comentario de @greg-449) que el Runtime de Java SE 6 era de 32 bits. Sin embargo, he encontrado un hilo en el foro MacRumors sobre el diferentes problema de Catalina impidiendo instalación de Java SE 6 Runtime para una aplicación comercial que lo requiere. Cuando esto se superó, la aplicación funcionó. Esto fue lo que me hizo comprobar las cosas, confirmando que el legado de Java SE 6 de Apple hace correr por debajo de Catalina.

¿Una solución para el desarrollador: sustituir el JavaApplicationStub?
Para volver a insistir, me preocupa ofrecer una aplicación para Mac que simplemente funcione después de que el usuario haya realizado una sencilla instalación de Java. No puedo esperar que se entretenga tratando de instalar el tiempo de ejecución heredado de Java 6 para que mi aplicación funcione.

Parece que es el JavaApplicationStub (en el paquete de la aplicación) que "informa" al sistema de dónde debe ejecutar la aplicación el tiempo de ejecución de Java. Originalmente esto podía ser manejado para el desarrollador por una pequeña utilidad de Apple, jarbundler, que nunca funcionó con el runtime de Oracle Java. (Gracias @abc por recordarme esto.) Sin embargo, resulta que ha habido formas de evitar este problema, como se describe en este Post de Stack Overflow y hay un reemplazo para JavaApplicationStub: universalJavaApplicationStub - en GitHub.

Este último parece ser el camino a seguir, y actualizaré esta respuesta cuando lo haya probado.

0 votos

He actualizado mi respuesta tras las pruebas. Prueba final de la sustitución de JavaApplicationStub a seguir en un día o dos.

0 votos

Disculpas. No he encontrado tiempo para trabajar más en esto. Eventualmente, tal vez.

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