У меня есть пакет .deb, содержащий приложение, которому для работы требуется Java. Однако мне все равно, какая реализация установлена (например, OpenJDK, IcedTea, Oracle), и я не хочу заставлять пользователя загружать другую реализацию, если она у него установлена. Я также хочу обработать ситуацию, когда у пользователя не установлена ни одна реализация.
Есть ли способ указать, что пакет .deb требует какой-либо реализации Java? И если да, то как мне быть с тем, что у них нет установленной реализации?
решение1
Стандартный способ указать, что .deb
пакету требуется среда выполнения Java (JVM, а не JDK) — указать зависимость от default-jre
или default-jre-headless
(первый вариант для программ с графическим интерфейсом, второй — если графический интерфейс не нужен), с альтернативными зависимостями от соответствующих версий java-runtime
( java6-runtime
если ваше приложение использует Java 6 или более позднюю версию, java7-runtime
для Java 7 или более позднюю версию и т. д.):
Depends: default-jre | java6-runtime
или
Depends: default-jre-headless | java6-runtime-headless
и т. д.
Это обрабатывает все JRE, предоставляемые Debian (или производные Debian), а также JRE Oracle.еслиони были обработаны с использованием java-package
. default-jre
зависит от JRE по умолчанию (OpenJDK 7 для Debian 8,OpenJDK 8 для Debian 9,OpenJDK 11 для Debian 10), поэтому если не установлено никаких других JRE, это гарантирует установку JRE. Различные пакеты JRE предоставляют java-runtime
варианты в зависимости от уровня поддержки, поэтому в зависимости от этого будет использоваться любая существующая совместимая JRE, соответствующим образом упакованная, вместо того, чтобы заставлять пользователя устанавливать еще одну JRE.
Если вы действительно хотите поддерживать любую установленную JRE, включая установленные вручную, неупакованные Oracle JRE, вы можете использовать только вышеизложенное в строфе "Recommends" пакета, а затем попытаться запустить java
из вашего сценария запуска. В идеале вы должны проверить наличие JRE во время установки (в postinst
, но убедившись, что вы не прервете установку, если JRE не будет найден), и всякий раз, когда вам нужно запустить java
— что может быть сложно, если ваш пакет содержит initscript или systemd unit или что-то подобное (сложно в том смысле, что неочевидно, как уведомить администратора о том, что что-то не так, таким образом, чтобы вы могли быть уверены, что это будет замечено и понято).
решение2
Если вставить это в файл управления, можно указать минимальную версию Java, а также указать реализацию Java, которую следует установить, если соответствующая версия Java еще не установлена:
Depends: openjdk-21-jdk-headless | java-sdk-headless (>= 21), ...
java-sdk-headless — это виртуальный пакет, который предоставляется любой средой выполнения, совместимой с Java 21.