如何强制执行包依赖关系而不是替代依赖关系?

如何强制执行包依赖关系而不是替代依赖关系?

我正在为使用 Java 17 的 Ubuntu 开发 Debian 包。我们过去一直对 有运行时依赖openjdk-17-jre。我们的软件中有一部分在 Windows 和 macOS 上使用了 JavaFX 作为 Web 浏览器组件。由于 OpenJDK 不包含 JavaFX,因此我们在 Linux 上禁用了此页面。我终于弄清楚了如何包含openjfx并修改我们的启动脚本以将正确的参数传递给 Java。以下是我的文件libopenjfx-jni中的依赖项:debian/control

Depends: openjdk-17-jre, xdg-utils, openjfx, libopenjfx-jni

对于大多数用户来说,这已经很完美了。但是,我们的一些用户还为其他软件安装了 bellsoft-java17-full。当配置了 bellsoft 的源时(无论是否安装了 bellsoft JDK),openjfx 都不会安装。当我运行 时apt depend <my-program-name>,我得到了以下输出:

$ apt depends scripture-app-builder
scripture-app-builder
  Depends: openjdk-17-jre
  Depends: xdg-utils
  Depends: openjfx
    bellsoft-java11-full
    bellsoft-java11-runtime-full
    bellsoft-java14-full
    bellsoft-java14-runtime-full
    bellsoft-java15-full
    bellsoft-java15-runtime-full
    bellsoft-java16-full
    bellsoft-java16-runtime-full
    bellsoft-java17-full
    bellsoft-java17-runtime-full
    bellsoft-java18-full
    bellsoft-java18-runtime-full
    bellsoft-java19-full
    bellsoft-java19-runtime-full
    bellsoft-java20-full
    bellsoft-java20-runtime-full
    bellsoft-java8-full
    bellsoft-java8-runtime-full
  Depends: libopenjfx-jni

有没有办法让我的debian/control文件需要 openjfx 而不是 bellsoft 发行版(它们都没有安装)?

答案1

我知道这不正是您想要的,但这里有一种解决您的问题的不同方法:

您可以使用,而不必依赖特定的 JDK链接(以及可选的 jpackage)来构建精简版 Java 运行时,并将其捆绑到包中。自 JDK 9 以来,这被视为打包应用程序以供分发的首选方式。

Depends你只需要一个 而不是Build-Depends。因此,如果你主要运送二进制文件(而不是源代码包),这有以下优点:

  • 你可以避免依赖系统范围的 JRE 安装,
  • 这减轻了这种依赖问题,
  • 减少攻击面
  • 并让您完全控制精确的运行时配置。

我自己已经为 JavaFX 应用程序完成了此操作,这个规则文件可能会帮助你了解如何解决这个问题

相关内容