¿Puedo indicar que un paquete .deb depende de Java, pero no especificar qué implementación (por ejemplo, OpenJDK, IcedTea, Oracle)?

¿Puedo indicar que un paquete .deb depende de Java, pero no especificar qué implementación (por ejemplo, OpenJDK, IcedTea, Oracle)?

Tengo un paquete .deb que contiene una aplicación que requiere Java para funcionar. Sin embargo, no me importa qué implementación hayan instalado (por ejemplo, OpenJDK, IcedTea, Oracle) y no quiero obligar a un usuario a descargar otra implementación si tiene una instalada. También quiero manejar la situación de un usuario que no tiene ninguna implementación instalada.

¿Hay alguna manera de indicar que el paquete .deb requiere alguna implementación de Java? Y si es así, ¿cómo hago para que no tengan ninguna implementación instalada?

Respuesta1

La forma estándar de indicar que un .debpaquete requiere un entorno de ejecución Java (la JVM, no el JDK) es especificar una dependencia en default-jreo default-jre-headless(el primero para programas con GUI, el segundo si no es necesaria ninguna GUI), con dependencias alternativas en el versiones apropiadas de java-runtime( java6-runtimesi su aplicación usa Java 6 o posterior, java7-runtimepara Java 7 o posterior, etc.):

Depends: default-jre | java6-runtime

o

Depends: default-jre-headless | java6-runtime-headless

etc.

Esto maneja todos los JRE proporcionados por Debian (o derivados de Debian) y los JRE de Oracle.sifueron procesados ​​usando java-package. default-jredepende del JRE predeterminado (OpenJDK 7 para Debian 8,OpenJDK 8 para Debian 9,OpenJDK 11 para Debian 10), por lo que si no hay ningún otro JRE instalado, esto garantiza que haya un JRE instalado. Los distintos paquetes de JRE proporcionan java-runtimevariantes según su nivel de soporte, por lo que depender de eso significa que se utilizará cualquier JRE existente y compatible, adecuadamente empaquetado, en lugar de obligar al usuario a instalar otro JRE más.

Sin embargo, si realmente desea admitir cualquier JRE instalado, incluidos los JRE de Oracle no empaquetados e instalados manualmente, solo puede usar lo anterior en la sección "Recomendaciones" del paquete y luego intentar ejecutar javadesde su script de inicio. Lo ideal sería comprobar la presencia de un JRE en el momento de la instalación (en postinst, pero asegurándose de no fallar la instalación si no se encuentra ningún JRE) y siempre que necesite ejecutarlo, javalo que puede resultar complicado si su paquete contiene un script de inicio. o unidad systemd o similar (complicado en el sentido de que no es obvio cómo notificar al administrador que algo anda mal, de una manera que pueda estar seguro de que será notado y comprendido).

Respuesta2

Si inserta esto en el archivo de control, puede especificar la versión mínima de Java y también especificar una implementación de Java que se instalará si aún no hay una versión de Java adecuada instalada:

Depends: openjdk-21-jdk-headless | java-sdk-headless (>= 21), ...

java-sdk-headless es un paquete virtual proporcionado por cualquier tiempo de ejecución compatible con Java 21.

información relacionada