redhat-rpm如何自动选择正确的jvm版本?

vxbzzdmp  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(325)

我分发了我自己的rpm包,其中包含一个jar文件。我的目标是rhel 8。
默认情况下,RHEL8上安装了Java8。我的jar需要java11。
为了在丢失的情况下“自动”安装它,我在rpm“规范”中添加了对java 11的依赖,如下所示:

Requires:       java-11-openjdk-headless

…和java 11包一起下载并安装。
为了执行我的jar,我运行以下命令:

java -jar <my.jar>

然而,似乎java8是被选中的,我的应用程序无法正常运行。如果我使用“alternatives”并选择Java11,那么一切都很好。但是我想为我的客户提供一个“独立的”rpm包,而不需要执行额外的手动步骤。我不希望他们选择正确的java版本,我希望这种情况以某种方式自行发生。
当我的jar被执行时,是否有可能自动选择正确的java版本?

fzsnzjdm

fzsnzjdm1#

当我的jar被执行时,是否有可能自动选择正确的java版本?
如果您的客户这样运行您的应用程序:

$ java -jar some.jar

那么应用程序就不可能选择正确的java版本。您正在隐式地使用当前搜索路径上的java版本;i、 e.什么 java 指向。在用户手中。
如果希望应用程序选择正确的版本,则需要编写一个 Package 器脚本,该脚本知道发行版安装了不同java版本的目录的路径名。您应该能够通过以下符号链接来解决这个问题(例如) /usr/bin/java 到实际的可执行文件。
这方面有两种变化:
您可以让安装程序脚本做出选择,并将其嵌入生成的 Package 器脚本中。
您可以让 Package 器脚本自己做出选择,可能是在命令行选项或环境变量的指导下。
(注意 /etc/alternatives 机制不能直接帮助解决这个问题。允许用户选择 java 命令。但这是通过修改符号链来实现的 /usr/bin/java . 它影响到所有使用 /usr/bin/java ... 不仅仅是你的申请。)
(另外,请注意,尝试使用rpm依赖项执行此操作是行不通的。依赖项确保安装了所需的java版本。。。并不是说它真的被使用了。)

相关问题