java - RedHat - RPM 如何自动选择正确的 JVM 版本?
问题描述
我分发我自己的 RPM 包,其中包含 jar 文件。我的目标是 RHEL 8。
默认情况下,在 RHEL 8 上安装了 Java 8。我的 jar 需要 Java 11。
为了在丢失的情况下将其带入并“自动”安装,在我的 RPM“规范”中,我添加了对 Java 11 的依赖,如下所示:
Requires: java-11-openjdk-headless
...确实是与我一起下载并安装的 Java 11 包。
为了执行我的 jar,我运行以下命令:
java -jar <my.jar>
但是,似乎 Java 8 是被选中的,而我的应用程序无法正常运行。如果我使用“替代方案”并选择 Java 11 - 一切正常。但我想为我的客户提供一个“自包含”的 RPM 包,而无需执行额外的手动步骤。我不希望他们选择正确的 Java 版本,我希望这会以某种方式自行发生。
执行我的 jar 时,是否可以以某种方式自动选择正确的 Java 版本?
解决方案
执行我的 jar 时,是否可以以某种方式自动选择正确的 Java 版本?
如果您的客户像这样运行您的应用程序:
$ java -jar some.jar
那么您的应用程序就不可能选择正确的 Java 版本。您正在隐式使用当前搜索路径上的 Java 版本;即java
指向什么。那是在用户手中。
如果您希望您的应用程序选择正确的版本,您将需要编写一个包装脚本,该脚本知道发行版安装不同 Java 版本的目录的路径名。您应该能够通过从(比如说)/usr/bin/java
到实际可执行文件的符号链接来解决这个问题。
这有两种变化:
- 您可以让安装程序脚本做出选择并将其嵌入到生成的包装脚本中。
- 您可以让包装脚本自己做出选择,可能在命令行选项或环境变量的指导下进行。
(请注意,该/etc/alternatives
机制并不能直接帮助解决这个问题。它允许用户选择(例如)java
命令的版本。但是通过修改符号链接链来工作/usr/bin/java
。它影响使用的一切/usr/bin/java
......不仅仅是你的应用。)
(另外,请注意,尝试对 RPM 依赖项执行此操作是行不通的。依赖项确保安装了所需的 Java 版本……而不是实际使用它。)
推荐阅读
- jquery - 日文字符未显示(空白)
- watson-studio - 具有相同电子邮件的两个帐户 - Watson Studio Desktop
- css - 如何使网站在移动视图中响应
- python - 有没有办法使用opencv中的阈值函数来检测小线条
- python - pdb 调试器从 set_trace 逃逸
- java - 如何正确调整图像大小?
- java - pdfbox:字体 ZapfDingbats 中没有 U+2714 的字形
- daml - 来自 == 的模棱两可的类型变量
- python - 我在 SQLAlchemy 中使用 or_() 做错了什么?
- c# - 如何修复“Generic.List 的最佳重载方法匹配”
.AddRange(Generic.IEnumerable ) 有一些无效的参数。”?