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:
-
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
-
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.
-
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.
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
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?
0 votos
@abc - Manualmente. Simplemente haciendo una nueva carpeta con la subestructura mostrada en el diagrama, editando PkgInfo (sólo un ID de aplicación de Apple - no creo que importe) e Info.plist, y luego renombrando la carpeta exterior como "whatever.app". Suelo reciclar cada vez que actualizo o hago una nueva aplicación. No recuerdo cómo lo hice originalmente. Puede haber sido con el ya desaparecido jarbundler. Puedes ver que el JavaApplicationStub data de 2009, y que es una actualización de uno anterior.
0 votos
Creo que Java 6 era de 32 bits que Catalina no soporta. Java 8 o posterior es de 64 bits pero no creo que tenga JavaApplicationStub. Puedes usar Eclipse para construir un "RCP" que será una aplicación completa para MacOS - pero un RCP es muy diferente de un programa Java normal.
1 votos
@greg-449 - Gracias. Tu comentario y los de abc me han hecho pensar en lo que creo que es el camino correcto. Voy a publicar mi propia respuesta - provisional hasta que la haya probado.