我可以指出 .deb 包依赖于 Java,但不指定什么实现(例如 OpenJDK、IcedTea、Oracle)?

Thu*_*rge 4 java deb

我有一个 .deb 包,其中包含一个需要 Java 才能运行的应用程序。但是,我不在乎他们安装了哪个实现(例如 OpenJDK、IcedTea、Oracle),而且我不想强迫用户在安装了另一个实现时下载另一个实现。我还想处理用户没有安装任何实现的情况。

有没有办法表明 .deb 包需要任何 Java 实现?如果是这样,如果没有安装任何实现,我该如何处理它们?

Ste*_*itt 5

指示.deb包需要 Java 运行时环境(JVM,而不是 JDK)的标准方法是指定对default-jre或的依赖项default-jre-headless(前者用于具有 GUI 的程序,后者用于不需要 GUI 的程序),以及对适当版本java-runtimejava6-runtime如果您的应用程序使用 Java 6 或更高版本,java7-runtimeJava 7 或更高版本等):

Depends: default-jre | java6-runtime
Run Code Online (Sandbox Code Playgroud)

或者

Depends: default-jre-headless | java6-runtime-headless
Run Code Online (Sandbox Code Playgroud)

等等。

这将处理所有 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从您的启动脚本运行。理想情况下,你应该检查是否有JRE在安装时存在(在postinst,但要确保你没有失败,如果没有JRE找到了安装),每当你需要运行java-这可能是复杂的,如果你的包中包含的启动脚本或 systemd 单元等(复杂的是,如何通知管理员出现问题并不明显,但您可以肯定会注意到和理解)。