我正在为使用 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 应用程序完成了此操作,这个规则文件可能会帮助你了解如何解决这个问题。