Eu tenho um pacote .deb que contém um aplicativo que requer Java para funcionar. No entanto, não me importa qual implementação eles instalaram (por exemplo, OpenJDK, IcedTea, Oracle) e não quero forçar um usuário a baixar outra implementação, se tiver uma instalada. Também quero lidar com a situação de um usuário que não possui nenhuma implementação instalada.
Existe uma maneira de indicar que o pacote .deb requer alguma implementação Java? E se sim, como faço para lidar com o fato de não ter nenhuma implementação instalada?
Responder1
A maneira padrão de indicar que um .deb
pacote requer um Java Runtime Environment (a JVM, não o JDK) é especificar uma dependência em default-jre
ou default-jre-headless
(a primeira para programas com GUIs, a última se nenhuma GUI for necessária), com dependências alternativas no versões apropriadas de java-runtime
( java6-runtime
se seu aplicativo usa Java 6 ou posterior, java7-runtime
para Java 7 ou posterior, etc.):
Depends: default-jre | java6-runtime
ou
Depends: default-jre-headless | java6-runtime-headless
etc.
Isso lida com todos os JREs fornecidos pelo Debian (ou derivados do Debian) e os JREs Oracleseeles foram processados usando java-package
. default-jre
depende do JRE padrão (OpenJDK 7 para Debian 8,OpenJDK 8 para Debian 9,OpenJDK 11 para Debian 10), portanto, se nenhum outro JRE estiver instalado, isso garantirá que um JRE seja instalado. Os vários pacotes JRE fornecem java-runtime
variantes dependendo do seu nível de suporte, portanto, dependendo disso significa que qualquer JRE existente e compatível, devidamente empacotado, será usado em vez de forçar o usuário a instalar outro JRE.
Se você realmente deseja oferecer suporte a qualquer JRE instalado, incluindo Oracle JREs não empacotados e instalados manualmente, você só pode usar o acima na sub-rotina "Recommends" do pacote e, em seguida, tentar executar java
a partir de seu script de inicialização. Idealmente, você deve verificar a presença de um JRE no momento da instalação (em postinst
, mas certificando-se de não falhar na instalação se nenhum JRE for encontrado) e sempre que precisar executar java
- o que pode ser complicado se o seu pacote contiver um script de inicialização ou unidade systemd ou algo semelhante (complicado no sentido de que não é óbvio como notificar o administrador de que algo está errado, de uma forma que você pode ter certeza de que será notado e compreendido).
Responder2
Se você inserir isso no arquivo de controle, poderá especificar a versão mínima do Java e também especificar uma implementação Java a ser instalada se nenhuma versão Java apropriada estiver instalada ainda:
Depends: openjdk-21-jdk-headless | java-sdk-headless (>= 21), ...
java-sdk-headless é um pacote virtual, fornecido por qualquer tempo de execução compatível com java 21.