如何依赖java 11以便可以通过openjdk或Oracle java 11包来满足?

如何依赖java 11以便可以通过openjdk或Oracle java 11包来满足?

我正在尝试创建一个依赖于 java 11 的 rpm 包;但是,openjdk 和 Oracle java 11 包似乎不提供任何重叠的 java 虚拟包。

OpenJDK Java 11 提供:

$ repoquery --provides java-11-openjdk
java-11 = 1:11.0.2.7-0.el7_6
java-11-openjdk = 1:11.0.2.7-0.el7_6
java-11-openjdk(x86-32) = 1:11.0.2.7-0.el7_6
jre-11 = 1:11.0.2.7-0.el7_6
jre-11-openjdk = 1:11.0.2.7-0.el7_6
libjawt.so
java-11 = 1:11.0.2.7-0.el7_6
java-11-openjdk = 1:11.0.2.7-0.el7_6
java-11-openjdk(x86-64) = 1:11.0.2.7-0.el7_6
jre-11 = 1:11.0.2.7-0.el7_6
jre-11-openjdk = 1:11.0.2.7-0.el7_6

Oracle Java 11 安装程序提供:

$ rpm -qp --provides /tmp/jdk-11.0.2_linux-x64_bin.rpm 
jdk
jaxp_parser_impl
xml-commons-apis
java
java-11.0.2
java-fonts
jre
jre-11.0.2
jdk-11.0.2 = 2000:11.0.2-ga
jdk-11.0.2(x86-64) = 2000:11.0.2-ga

如何将包的依赖项设置为足够灵活以适用于 java11?

我以为是rpm布尔依赖关系可能有帮助,但我找不到有关将 rpm 更新到版本 4.13 的信息。如果我将包依赖项设置为: Requires: jre-11 >= 11, rpm >= 4.13 安装失败并显示:

Error: Package: MYPACKAGE
           Requires: rpm >= 4.13
           Installed: rpm-4.11.3-32.el7.x86_64 (installed)
               rpm = 4.11.3-32.el7
           Available: rpm-4.11.3-35.el7.x86_64 (base)
               rpm = 4.11.3-35.el7

4.13 版本的 rpm 似乎不可用?我使用的是 CentOS7,但 RHEL 7.5 上也会发生同样的情况。

答案1

因此,正如您所指出的,最好的情况是两个包都可以有一个共同的“提供”。

由于这可能超出您的能力范围,另一个选择是创建一个伪 RPM 作为 Oracle Java 11 RPM 的代理。

  • Namejava-11-oracle(例如)
  • Providesjava-11或 openjdk RPM 中的任何其他相关值
  • Requiresjava>= 11(或jdk,或jre...)
  • %files: 空部分(可以省略)

在您自己的包中,添加对Provides:代理 RPM 和 openjdk 之间现在通用的依赖项。

然后,您的软件包将可以在以下情况之一中安装:

  • OpenJDK 11 已安装或在存储库中可用
  • Oracle 的 Java 11 RPM 和您的java-11-oracleRPM 已安装或在活动存储库中可用。

相关内容