我可以指出 .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(前者用于具有 GUI 的程序,后者如果不需要 GUI),以及对适当的版本java-runtimejava6-runtime如果您的应用程序使用 Java 6 或更高版本、java7-runtimeJava 7 或更高版本等):

Depends: default-jre | java6-runtime

或者

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

ETC。

这可以处理所有 Debian 提供的 JRE(或 Debian 衍生版本)和 Oracle JRE如果它们是使用java-package.default-jre取决于默认的 JRE (适用于 Debian 8 的 OpenJDK 7,适用于 Debian 9 的 OpenJDK 8,适用于 Debian 10 的 OpenJDK 11),因此如果没有安装其他 JRE,这将确保安装 JRE。各种 JRE 包java-runtime根据其支持级别提供变体,因此这意味着将使用任何现有的、兼容的 JRE(适当打包),而不是强制用户安装另一个 JRE。

如果您确实想支持任何已安装的 JRE,包括手动安装、未打包的 Oracle JRE,则只能在包的“推荐”节中使用上述内容,然后尝试java从启动脚本运行。理想情况下,您应该在安装时(在 中postinst,但确保如果没有找到 JRE,安装不会失败)以及需要运行时检查是否存在 JRE java— 如果您的包包含 initscript,这可能会很复杂或 systemd 单元等(复杂是因为如何通知管理员出现问题并不明显,但您可以确定会被注意到并理解)。

答案2

如果将其插入到控制文件中,则可以指定最低 java 版本,还可以指定要安装的 java 实现(如果尚未安装适当的 java 版本):

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

java-sdk-headless 是一个虚拟包,由任何 java 21 兼容运行时提供。

相关内容