Rpm

如何依賴 java 11 才能滿足 openjdk 或 Oracle java 11 包的要求?

  • April 25, 2019

我正在嘗試創建一個依賴於 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

rpm 的 4.13 版似乎不可用?我使用的是 CentOS7,但同樣的情況也發生在 RHEL 7.5 上。

因此,正如您所指出的,如果可以使兩個軟體包都具有共同的“提供”,那麼最好的辦法是。

由於這可能不在您的範圍之內,因此另一種選擇是創建一個偽 RPM 作為 Oracle Java 11 RPM 的代理。

  • Name:(java-11-oracle例如)
  • Provides:java-11或來自 openjdk RPM 的任何其他相關值
  • Requires: java>= 11 (或jdk, 或jre…)
  • %files: 空白部分(可以省略)

在您自己的包中,Provides:向該代理 RPM 和 openjdk 之間現在共有的依賴項添加一個依賴項。

然後,您的軟體包將可以在以下情況之一中安裝:

  • OpenJDK 11 已安裝或在儲存庫中可用
  • Oracle 的 Java 11 RPM 和您的java-11-oracleRPM 已安裝或在活動儲存庫中可用。

引用自:https://unix.stackexchange.com/questions/511426