Bundling Java Aplicaciones para Mac OS X Catalina -- java campo con catalina camp apple Relacionados El problema

Bundling Java applications for Mac OS X Catalina


1
vote

problema

Español

Escribo aplicaciones científicas de Java amateur que proporciono libremente para una pequeña audiencia. (Probablemente soy el usuario principal). La mayoría de ellos todavía están compilados bajo Java 1.6 donde corren bien en Mojave como archivos JAR o como aplicaciones con la estructura de contenido del paquete estándar que se muestra a continuación.

Contenido del paquete de la aplicación Java 1.6 SRC =

Bajo Catalina Las aplicaciones ya no se inician y me digo una pantalla que necesito instalar el tiempo de ejecución legado Java SE 6, que, por supuesto, ya está instalado.

Instalar legacy java 1.6

Sin embargo, si elimino el archivo JAR (aquí Motivator.jar) desde el paquete de la aplicación y haga doble clic en él en el escritorio (haga clic con el botón derecho en el controlador de acceso por by-pase), se ejecuta bien.

Entonces, en un sentido, estoy bien. Pero este es un Mac y yo preferirí que mis aplicaciones se parezcan a las aplicaciones MAC en el escritorio y cuando se ejecutan (es decir, no tienen el nombre de la clase con mi programa principal de método).

¿Alguien sabe si es posible empaquetar un archivo JAR como una aplicación MAC más? Puedo recompilar con una versión más alta de Java si tengo que hacerlo.

Original en ingles

I write amateur Java scientific applications which I provide freely for a small audience. (Probably I am the main user.) Most of them are still compiled under Java 1.6 where they run fine on Mojave either as jar files or as applications with the standard package contents structure shown below.

Package contents of Java 1.6 app

Under Catalina the applications no longer launch and I get a screen telling me that I need to install the legacy Java SE 6 runtime, which, of course, is already installed.

Install legacy Java 1.6

However if I remove the jar file (here Motivator.jar) from the app package and double-click it on the desktop (right-clicking to by-pass Gatekeeper) it runs fine.

So in one sense I am OK. But this is a Mac and I would prefer my applications to look like Mac applications on the desktop and when they run (i.e. not have the name of the class with my main method show).

Anyone know if it is possible to package a jar file as a Mac application any more? I can recompile with a higher version of Java if I have to.

     
         
         

Lista de respuestas

1
 
vote

descargo de responsabilidad
Esta es una respuesta provisional a mi propia pregunta, que no aceptaré hasta que finalmente lo haya probado. Sin embargo, a medida que las personas se encuentran con diversos problemas con las aplicaciones de Java en la Mac, pensé que era útil publicar para ayudar a otros y permitir sugerencias de mejoras.

motivo del comportamiento explicado
Resultó que:

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

  2. Mi solicitud fue como un archivo JAR 'desnudo' porque hubo una copia de Java 1.8 de Oracle en ese directorio que JAR Lanzador (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 (simplemente arrastrado y lo dejó caer todo: se necesita una contraseña de administrador), corrió de la aplicación empaquetada como se muestra a continuación.

Aplicación de Java envasada en Catalina y Java 1.6

punto general: el legado de Apple Java SE 6 Runtime hace Ejecutar bajo Catalina
Hay un artículo sobre Ars Technica que afirma:

y algunos componentes de larga data de MacOS no han hecho el salto a 64 bits. Estos incluyen ... La antigua manzana mantuvo Java 6 Runtime ...

Esto me había sugerido (como también el tipo de comentario de @ greg-449) que el tiempo de ejecución de Java SE 6 era de 32 bits. Sin embargo, encontré una hilo en el foro de Macrumors Acerca del problema DIFERENTE de Catalina Prevención Instalación de Java SE 6 Tiempo de ejecución para una aplicación comercial que lo requiere. Cuando finalmente se superó, la aplicación funcionó. Esto fue lo que me hizo verificar las cosas, confirmando que el legado de Apple Java SE 6 hace correr bajo Catalina.

una solución para el desarrollador - ¿Reemplazo del JavaApplicationStub?
Para volver a enfatizar, me preocupa la entrega de una aplicación MAC que solo funciona después de que el usuario haya realizado una instalación de Java fácil. No puedo esperar que se quense intentar instalar el tiempo de ejecución del legado Java 6 para que mi aplicación funcione.

Parecería que es el javaapplicationstub (en el paquete de aplicaciones) que 'informa' el sistema donde el tiempo de ejecución de Java es ejecutar la aplicación. Originalmente, esto podría ser manejado para el desarrollador por una pequeña utilidad de Apple, Jarbundler, que nunca trabajó con Oracle Java Runtime. (Gracias @ABC por recordarme esto.) Sin embargo, resulta que ha habido formas de ronda de este problema, como se describe en este pila de desbordamiento Post , 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.

 

Disclaimer
This is a provisional answer to my own question, which I will not accept until I have finally tested it. However, as people are encountering various problems with Java apps on the Mac I thought it useful to post to help others and allow suggestions for improvements.

Reason for the Behaviour Explained
It turned out that:

  1. The reason that my application failed to run was because the Catalina update had removed the Java SE 6 Runtime from the JavaVirtualMachine directory where it resided on a machine running an earlier version of Mac OS X: /Library/Java/JavaVirtualMachines

  2. My application ran as a xe2x80x98nakedxe2x80x99 jar file because there was a copy of Java 1.8 from Oracle in that directory which Jar Launcher (the app that handles jar files) must have employed.

  3. When I copied the 1.6.0.jdk directory from another machine into the JavaVirtualMachine directory (just dragged and dropped it all over xe2x80x94 needed an admin password) it ran from the packaged app as shown below.

Packaged Java App running under Catalina and Java 1.6

General Point: Applexe2x80x99s legacy Java SE 6 Runtime does run under Catalina
There is an article on Ars Technica that states:

And a few longstanding components of macOS havenxe2x80x99t made the jump to 64-bit. These includexe2x80xa6 the old Apple-maintained Java 6 Runtimexe2x80xa6

This had suggested to me (as also the kind comment by @greg-449) that the Java SE 6 Runtime was 32-bit. However I found a thread on the MacRumors forum about the different problem of Catalina preventing installation of Java SE 6 Runtime for a commercial app that requires it. When that was eventually overcome, the app worked. This was what caused me to check things out, confirming that Applexe2x80x99s legacy Java SE 6 does run under Catalina.

A solution for the developer xe2x80x94 replacing the JavaApplicationStub?
To re-emphasize, I am concerned with delivering a Mac app that just works after the user has performed an easy Java install. I canxe2x80x99t expect him to fiddle around trying to install the legacy Java 6 runtime to get my app to work.

It would seem that it is the JavaApplicationStub (in the application bundle) that xe2x80x98informsxe2x80x99 the system where the Java runtime is to run the application. Originally this could be handled for the developer by a little Apple utility, jarbundler, which never worked with Oracle Java runtime. (Thanks @abc for reminding me of this.) However it turns out that there have been ways round this problem, as described on this Stack Overflow post, and there is a replacement for JavaApplicationStub: universalJavaApplicationStub xe2x80x94 on GitHub.

This latter seems to be the way to go, and I will update this answer when I have tested it.

 
 
   
   

Relacionados problema

0  ¿Vea los artefactos de video en su MacBook Pro al abrir el panel de control de Java?  ( Do you see video artefacts on your macbook pro when opening the java control pan ) 
Llamando a todos los propietarios de MacBook Pro 15 "2018, especialmente los propietarios del modelo de 2.6 GHz. ¿Estaría dispuesto a probar algo en su MBP 20...

0  Apache NetBeans 10 binarios no funcionan  ( Apache netbeans 10 binaries not working ) 
He descargado recientemente los binarios de Apache Netbeans 10 de la Sitio de Apache NetBeans (incubadoras) . Extraí el archivo ZIP a / Solicitud / NetBeans ...

1  ¿MacOS Mojave viene con Java preinstalado?  ( Does macos mojave comes with java pre installed ) 
Acabo de correr qué comando java y obtuve la salida / usr / bin / java También ejecuté el comando java -version y también obtuve la salida de informac...

1  Jar launcher.app: ¿Dónde se supone que se encuentra?  ( Jar launcher app where is it supposed to be located at ) 
en Sierra I instaló Java (JDK) y Parallels Desktop. El Windows VM que tengo en Parallels ha decidido establecer su propia copia (Windows) de Java como predete...

4  ¿Cómo puedo actualizar de Oracle JDK 8 a OpenJDK 8 usando Homebrew y asegúrese de que se utilice de forma predeterminada?  ( How can i upgrade from oracle jdk 8 to openjdk 8 using homebrew and be sure it w ) 
Si tengo instalado Oracle Java SE JDK 8 en mi Mac, ¿cómo puedo actualizar para abrir JDK 8 y asegurarme de que se utilizará de forma predeterminada? Motivac...

1  Python en la sierra alta "No Java Runtime presente, solicitando instalación"  ( Python on high sierra no java runtime present requesting install ) 
Tengo un código Python que funciona bien en varios otros lugares y "usado" para trabajar en mi Mac, pero ahora cuando intento ejecutar mi código como: ABCD...

1  MacOS Dock se congela cuando lanza la aplicación Java  ( Macos dock freezes when i launch java application ) 
Tengo un MacBook Pro de finales de 2016 (sin la barra táctil) - MacOS High Sierra 10.13.2 - Java 9 Desde una o dos semanas, cuando inicie una aplicación Jav...

0  Uso de "JAR LAuncer" en High Sierra ¿Cómo paso los argumentos de la línea de comandos a una aplicación Java (tarro)  ( Using jar launcher on high sierra how do i pass command line arguments to a ja ) 
¿Es posible usar "JAR LAuncer" en Mac para pasar los argumentos de la línea de comandos a una aplicación Java? Por ejemplo: Abrir myApp.jar --Args -Hello ...

0  No puedo ejecutar Eclipse en MacBook en Yosemite: "La versión 1.6.0_65 de la JVM no es adecuada para este producto". Y tengo Java 1.8 (Espectáculos en Configuración)  ( I cant run eclipse on macbook on yosemite version 1 6 0 65 of the jvm is not ) 
No puedo ejecutar Eclipse en MacBook en Yosemite: "La versión 1.6.0_65 de la JVM no es adecuada para este producto". Y tengo Java 1.8. Cuando abro la configur...

2  Tengo Java 8. Una aplicación quiere Java 6 (Legacy One). ¿Puedo evitar eso?  ( I have java 8 an app wants java 6 legacy one can i avoid that ) 
Mi Gobierno hizo una aplicación de Java para enviar documentos fiscales. Esa aplicación, en realidad es una versión muy desactualizada de Eclipse. Cuando ...

42  ¿Cómo aumentar el tamaño de la fuente de Eclipse globalmente?  ( How to increase font size of eclipse globally ) 
Me gustaría saber cómo aumentar el tamaño de la fuente para Eclipse, por lo que ajusta a toda la GUI para no lucir tan pequeña en mi pantalla. Para NetBeans...

6  ¿Cómo puedo actualizar mi Mac a OpenJDK 11 usando Homebrew?  ( How can i upgrade my mac to openjdk 11 using homebrew ) 
Si tuviera una versión anterior de Java JDK en mi Mac, como Java SE 8 o OpenJDK 8, ¿cuál sería una forma rápida de actualizar a OpenJDK 11 usando Homebrew (us...

8  Obtener Java 11 para MacOS?  ( Obtain java 11 for macos ) 
Sé que en los últimos años ha cambiado la cadencia del desarrollo de Java, se está convirtiendo mucho más rápido y más predeciblemente programado. Se anunciar...

1  Actualización de Java falló  ( Java update failed ) 
Recién realizado que Java en mi Mini 2012 es 1.6.0_65-B14-468. Por lo tanto, busqué algo más nuevo compatible con Jdownloader. Por lo tanto, descargué 1.8 (JR...

2  ¿Cómo puede una aplicación aplicada con Java 11?  ( How can a i run a bundled app with java 11 ) 
Siguí la respuesta a esta pregunta para obtener una aplicación agrupada para trabajar con Java 8 ... Cómo ¿Para dirigir una aplicación para usar una versió...




© 2021 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos