Ich habe ein .deb-Paket, das eine App enthält, die Java zum Funktionieren benötigt. Mir ist es jedoch egal, welche Implementierung installiert ist (z. B. OpenJDK, IcedTea, Oracle), und ich möchte einen Benutzer nicht zwingen, eine andere Implementierung herunterzuladen, wenn er eine installiert hat. Ich möchte auch die Situation behandeln, dass ein Benutzer keine Implementierung installiert hat.
Gibt es eine Möglichkeit, anzugeben, dass das .deb-Paket eine Java-Implementierung erfordert? Und wenn ja, wie gehe ich damit um, wenn keine Implementierung installiert ist?
Antwort1
Die Standardmethode zum Angeben, dass ein .deb
Paket eine Java-Laufzeitumgebung erfordert (die JVM, nicht das JDK), besteht darin, eine Abhängigkeit von default-jre
oder anzugeben default-jre-headless
(ersteres für Programme mit GUIs, letzteres, wenn keine GUI erforderlich ist), mit alternativen Abhängigkeiten von den entsprechenden Versionen von java-runtime
( java6-runtime
wenn Ihre Anwendung Java 6 oder höher verwendet, java7-runtime
für Java 7 oder höher usw.):
Depends: default-jre | java6-runtime
oder
Depends: default-jre-headless | java6-runtime-headless
usw.
Dies verwaltet alle von Debian bereitgestellten JREs (oder Debian-Derivate) und die Oracle JREsWennSie wurden verarbeitet mit java-package
. default-jre
hängt von der Standard-JRE ab (OpenJDK 7 für Debian 8,OpenJDK 8 für Debian 9,OpenJDK 11 für Debian 10), wenn also kein anderes JRE installiert ist, wird dadurch sichergestellt, dass ein JRE installiert ist. Die verschiedenen JRE-Pakete bieten java-runtime
je nach Unterstützungsstufe Varianten. Abhängig davon bedeutet dies, dass jedes vorhandene, kompatible JRE in geeigneter Verpackung verwendet wird, anstatt den Benutzer zur Installation eines weiteren JRE zu zwingen.
Wenn Sie jedoch wirklich alle installierten JREs unterstützen möchten, einschließlich manuell installierter, nicht verpackter Oracle JREs, können Sie nur das Obige in der „Recommends“-Strophe des Pakets verwenden und dann versuchen, es java
von Ihrem Startskript aus auszuführen. Idealerweise sollten Sie zum Installationszeitpunkt (in postinst
, aber stellen Sie sicher, dass die Installation nicht fehlschlägt, wenn kein JRE gefunden wird) und immer dann, wenn Sie es ausführen müssen, das Vorhandensein eines JRE überprüfen java
– was kompliziert sein kann, wenn Ihr Paket ein Initscript oder eine Systemd-Einheit oder Ähnliches enthält (kompliziert in dem Sinne, dass es nicht offensichtlich ist, wie man den Administrator benachrichtigt, dass etwas nicht stimmt, und zwar auf eine Weise, bei der Sie sicher sein können, dass es bemerkt und verstanden wird).
Antwort2
Wenn Sie dies in die Steuerdatei einfügen, können Sie die minimale Java-Version angeben und auch eine Java-Implementierung angeben, die installiert werden soll, wenn noch keine entsprechende Java-Version installiert ist:
Depends: openjdk-21-jdk-headless | java-sdk-headless (>= 21), ...
java-sdk-headless ist ein virtuelles Paket, das von jeder Java 21-kompatiblen Laufzeit bereitgestellt wird.