【问题标题】:Check java version programmatically on IBM i using CL or RPGLE使用 CL 或 RPGLE 在 IBM i 上以编程方式检查 java 版本
【发布时间】:2019-07-18 05:20:53
【问题描述】:

我有一种情况,我必须检查 IBM i 上的 java 版本是否等于 1.8。

在我的 CL 程序中有一个 RUNJVA 调用,它运行一个依赖于 java 1.8 的 jar 文件。仅当 IBM i 机器具有 Java 1.8 时,我才想运行该命令。

在 IBM i 上有很多方法可以查看 java 版本,但要以编程方式检查版本,我需要以某种方式在变量中提供版本信息。

一种方法是运行命令

RUNJVA 类(*版本)输出(*打印)

并从假脱机文件中读取版本。但是这种方法应该有效,但我正在寻找更无缝的方法。读取假脱机文件以获取信息似乎不是一个好方法

【问题讨论】:

  • 试试System.getProperty("java.version");
  • @BorisChistov 这是我们可以在 java 中做的事情。我必须在 CL 中检查,然后运行 ​​java。
  • 为什么一定要先检查?
  • 请注意,您可以为 Java 1.2 编译主类,它应该在 i 上可用的任何 JVM 上运行,即使 jar 的其余部分用于 Java 8。然后您的 java 类可以显式尝试如果 JVM 不兼容,则调用 Java 8 代码并正常失败。任何查看字符串的启发式方法都可能在以后失败(就像 Oracle JVM 发生的那样)
  • 我在下面的回答可能想多了。如果您针对不正确的 JDK 版本执行 jar,您的 CL 中会发生什么?有没有可以在 CL 中使用 MONMSG 监控的消息?

标签: java ibm-midrange


【解决方案1】:

我不确定这是否被认为是优雅的,但您至少不必处理假脱机文件。我将 java -version 的输出写入了一个数据区域,然后您可以获取该数据区域:

创建一个数据区来保存 java_version 文件第一行的值。您可以将这些添加到您的 CL 中:

QSH CMD('java -version 2> /some/IFSdir/java_version')

QSH CMD('head -n 1 /some/IFSdir/java_version | datarea -w /qsys.lib/doug .lib/testing.dtaara')

然后只需将数据区域抓取到一个变量中并在那里进行评估。

【讨论】:

    【解决方案2】:

    尝试以下方法:

    使用 RUNRMTCMD 执行“java -version”。捕获输出或错误,解析并找出版本。

    【讨论】:

    • 我不想远程运行命令。我想检查它是否与运行我的应用程序的系统相同。你能解释一下吗?
    猜你喜欢
    • 2017-06-23
    • 2014-11-20
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多