Posso indicar que um pacote .deb depende de Java, mas não especificar qual implementação (por exemplo, OpenJDK, IcedTea, Oracle)?

Posso indicar que um pacote .deb depende de Java, mas não especificar qual implementação (por exemplo, OpenJDK, IcedTea, Oracle)?

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 .debpacote requer um Java Runtime Environment (a JVM, não o JDK) é especificar uma dependência em default-jreou 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-runtimese seu aplicativo usa Java 6 ou posterior, java7-runtimepara 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-jredepende 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-runtimevariantes 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 javaa 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.

informação relacionada