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