RedHat-RPM如何自动选择正确的JVM版本?

问题描述

我分发了自己的RPM软件包,其中包含jar文件。我定位到RHEL 8。

默认情况下,在RHEL 8上安装了Java8。我的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版本,而不是实际使用的Java版本。)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...