Bundling Java Aplicativos para Mac OS X Catalina -- java campo com catalina camp apple Relacionado O problema

Bundling Java applications for Mac OS X Catalina


1
vote

problema

português

Eu escrevo aplicações científicas do Java Amador que eu fornece livremente por um pequeno público. (Provavelmente eu sou o usuário principal.) A maioria deles ainda é compilada em Java 1.6 onde eles correm bem no Mojave como arquivos jar ou como aplicativos com a estrutura do conteúdo padrão do pacote mostrado abaixo.

Conteúdo do pacote de Java 1.6 app

em Catalina Os aplicativos não são mais lançados e eu recebo uma tela me dizendo que eu preciso instalar o tempo de execução do legado Java SE 6, que, é claro, já está instalado.

instalar legado java 1.6

No entanto, se eu remover o arquivo jar (aqui motivator.jar) do pacote de aplicativos e clique duas vezes no desktop (clicando com o botão direito do mouse em Por By-Pass Gatekeeper), ele funciona bem.

Então, em certo sentido, estou bem. Mas este é um Mac e eu preferiria meus aplicativos para se parecerem como aplicativos Mac na área de trabalho e quando eles correm (i.e. não tem o nome da classe com meu método principal show).

Alguém sabe se é possível empacotar um arquivo jar como um aplicativo Mac mais? Eu posso recompilar com uma versão mais alta do Java, se eu tiver que.

english

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 respostas

1
 
vote

Isenção de isenção
Esta é uma resposta provisória para minha própria pergunta, que eu não vou aceitar até que finalmente testei. No entanto, como as pessoas estão encontrando vários problemas com os aplicativos Java no Mac, achei útil postar para ajudar os outros e permitir sugestões para melhorias.

motivo para o comportamento explicado
Descobriu-se que:

    .
  1. A razão pela qual meu aplicativo não foi executado foi porque a atualização do Catalina tinha removido o Java SE 6 Runtime No diretório JavavirtualMachine, onde residia em uma máquina executando uma versão anterior do Mac OS X: / Biblioteca / Java / JavavirtualMachines

  2. Meu correu aplicação como um 'nu' arquivo jar porque havia uma cópia do Java 1.8 da Oracle nesse diretório que Jar Launcher (o aplicativo que arquivos alças jar) deve ter empregado.

  3. Quando eu copiei o diretório 1.6.0.jdk de outra máquina para o diretório javavirtualmachine (basta arrastado e descartado tudo - precisava de uma senha de administrador) ele correu do aplicativo embalado como mostrado abaixo.

app java empacotado em Catalina e Java 1.6

ponto geral: legado da Apple Java SE 6 Runtime Execute em Catalina
Há um artigo sobre ARS Technica Isso afirma:

.

e alguns componentes de longa data de Macos não fizeram o salto para 64 bits. Estes incluem ... o velho Java 6 Runtime mantido pela Apple ...

Isso sugeriu-me (como também o tipo de comentário por @ Greg-449) que o tempo de execução do Java SE 6 foi de 32 bits. No entanto, encontrei um thread no fórum dos macrumantes Sobre o problema Problema de Catalina Prevenção Instalação de Java SE 6 Tempo de Execução para um aplicativo comercial que exija. Quando isso foi eventualmente superado, o aplicativo funcionou. Isso foi o que me fez verificar as coisas, confirmando que o legado da Apple Java SE 6 faz correr sob Catalina.

uma solução para o desenvolvedor - substituindo o javaapplicationstub?
Para enfatizar novamente, estou preocupado em entregar um aplicativo Mac que apenas funciona depois que o usuário realizou uma instalação fácil de Java. Eu não posso esperar que ele se desperdenda tentando instalar o tempo de execução do Java 6 legado para obter meu aplicativo para trabalhar.

Parece que é o javaapplicationstub (no pacote de aplicativos) que 'informa' o sistema onde o tempo de execução Java é para executar o aplicativo. Originalmente, isso poderia ser tratado para o desenvolvedor por um pequeno utilitário Apple, Jarbundler, que nunca trabalhou com o Oracle Java Runtime. (Obrigado @abc por me lembrar disso.) No entanto, acontece que houve maneiras rodando esse problema, conforme descrito neste pós-transbordamento de pilha e há um substituto para javaapplicationstub: UniversalJavaApplicationStub - no GitHub.

Este último parece ser o caminho a percorrer, e vou atualizar esta resposta quando eu tiver testado.

 

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.

 
 
   
   

Perguntas relacionadas

1  IKEV2 VPN Não está funcionando Após atualizar para MacOS Catalina - Autenticação do usuário falhou com as configurações de autenticação de nome de usuário  ( Ikev2 vpn not working after updating to macos catalina user authentication fai ) 
Eu tinha uma conexão VPN IKEV2 configurada com Macos Mojave que funcionou perfeitamente. Após a atualização para Catalina, não consigo me conectar à VPN com...

1  A atualização do Catalina falha, nenhum disco inicializável, não é possível acessar arquivos  ( Catalina update fail no bootable disk cant access files ) 
Vou começar dizendo que o meu problema é incrivelmente semelhante ao Mac preso no ciclo de reinicialização após falha na atualização de MacOS Catalina Mas s...

10  Huawei E3372 Oi-Link não funciona com MacOS Catalina  ( Huawei e3372 hi link doesnt work with macos catalina ) 
Desde Catalina caiu suporte de 32 bits Meu LTE Router, Huawei E3372 Hi-Link, parou de funcionar. Existe algum driver de 64 bits (?) Disponível para fazer o di...

41  Catalina Catalina no desligamento: "Timeout de Watchdog: Não Checkins de Watchdogd"  ( Catalina crashing at shutdown watchdog timeout no checkins from watchdogd ) 
. bloqueado . Comentários sobre esta questão foram desativados, mas ainda está aceitando novas respostas e outras interações. Saiba mais . ...

1  Por que as fotos não importarão do iPhone após a atualização?  ( Why wont photos import from iphone after upgrade ) 
Desde que a atualização para Catalina não consigo mais importar fotos do meu iPhone para o aplicativo Fotos. Eu posso arrastar fotos da minha área de trabal...

5  revogar proibição para enviar eventos da Apple para eventos do sistema  ( Revoke forbiddance to send apple events to system events ) 
Eu tenho usado o Gitk fornecido pelo Git fornecido pela Homebrew com sucesso, por vários anos. Um par de dias atrás, de repente solicitou uma janela de segu...

1  Após a atualização para 10.15 A pasta Catalinesa / Media  ( After upgrade to 10 15 cataline media folder is gone ) 
Anteriormente eu tinha usado / mídia para montar sistemas de arquivos remotos. Depois de atualizar hoje, acho que o diretório é embora e / é somente leitura. ...

78  Onde é que a atualização para MacOS Catalina Move Root "/" Arquivos de diretório?  ( Where does the upgrade to macos catalina move root directory files ) 
Após a atualização para MacOS Catalina, todas as pastas que eu tinha salvo no diretório raiz, "/", estavam faltando. Eu leio que o sistema é agora somente l...

6  CS6 Illustrator no Mac OSX 10.15 Catalina - Qualquer um conseguiu executá-lo?  ( Cs6 illustrator on mac osx 10 15 catalina anyone managed to run it ) 
Eu estava navegando na Internet para algumas dicas, mas ainda não encontrou nada. E a comunicação é um pouco missleading, uma palavra dizer que não vai funcio...

0  10.15 Catalina - não mostrando marca de sincronização no localizador  ( 10 15 catalina not showing sync mark on finder ) 
Como você pode ver na captura de tela, os arquivos sincronizados não estão mostrando um ícone indicando se sincronizado ou não. Ele costumava mostrar diferent...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.