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 .deb
paquete requiere un entorno de ejecución Java (la JVM, no el JDK) es especificar una dependencia en default-jre
o 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-runtime
si su aplicación usa Java 6 o posterior, java7-runtime
para 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-jre
depende 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-runtime
variantes 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 java
desde 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, java
lo 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.