【问题标题】:How to validate that "java -version" doesn't returns an error through the code?如何验证“java -version”不会通过代码返回错误?
【发布时间】:2018-02-18 09:23:47
【问题描述】:

在我们的组织中,我们提供了一个安装程序 (Install4j) 来构建和运行我们的产品。

在其中一个阶段,我们使用System.getProperty("java.version") 对 java 版本进行验证。在极少数情况下,在命令提示符下键入 java -version 时,可能会出现各种错误,例如:

我面临的问题是此类错误仅从命令提示符中显示,而System.getProperty("java.version") 不会发出任何警报,只需返回版本号。

我正在寻找一种方法来监控此类错误并相应地停止安装程序,但我所有的尝试都是徒劳的。

编辑

我想过使用Runtime.getRuntime().exec(),但是'java -version'响应不会回来。

【问题讨论】:

  • 您的屏幕截图显示 Java 安装损坏,在这种情况下您必须重新安装 Java。
  • 是的,我知道。但我的目的是在这种情况下向客户显示适当的信息。我需要知道安装程序中何时发生此类错误。
  • 安装程序中不会以同样的方式发生该错误。你捆绑了一个 JRE 吗?那么这个错误不会发生。如果不是,则 install4j 生成的本机可执行文件中的搜索序列将负责查找工作的 JRE。
  • @ingoKegel - 有没有办法使用“运行可执行文件或批处理文件”操作来运行命令 java -version
  • 是的,您可以这样做并解析输出。不确定这对安装程序有什么帮助,因为如果它已经在运行,那么 JRE 安装损坏不会有任何问题。

标签: java install4j


【解决方案1】:

使用“运行可执行文件或批处理文件”操作,将“可执行文件”属性设置为

${installer:sys.javaHome}/bin/java.exe

“参数”属性到

-version

并将“重定向标准错误”属性设置为“到安装程序变量”,子属性“安装程序变量名称”设置为

javaVersionOutput

动作运行后,您可以使用“运行脚本”属性检查输出:

String output = context.getVariable("javaVersionOutput");
// TODO check output

【讨论】:

    【解决方案2】:

    使用以下代码处理错误并获取警报消息:

    String javaVersion = System.getProperty("java.version");
    
    if(!javaVersion.contains("1.7")) {
        System.out.println("jdk 1.7 is required.");
        System.out.println("Please install jdk 1.7");
    }
    

    【讨论】:

    • 这个解决方案不好。在示例错误中,我包含的版本号确实返回,但我仍然错过了一个错误...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多