Могу ли я указать, что пакет .deb зависит от Java, но не указывать, какая именно реализация (например, OpenJDK, IcedTea, Oracle)?

Могу ли я указать, что пакет .deb зависит от Java, но не указывать, какая именно реализация (например, OpenJDK, IcedTea, Oracle)?

У меня есть пакет .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.

Связанный контент