测试Java是否支持-XX选项

时间:2014-09-12 04:25:59

标签: java shell

我们在工作中使用各种旧版本的Java 1.6,由于我无法控制的各种原因而无法更新。

某些支持-XX:ReduceInitialCardMarks,有些则不支持,如果您尝试使用不受支持的选项,则退出。

我想要一个shell脚本,它使用-XX:ReduceInitialCardMarks选项调用java(如果可用),否则没有。

我尝试/考虑过的事情

  • -X,这只打印-X参数而不是-XX
  • 测试版本?怎么样?需要预先了解哪些版本支持
  • 使用虚拟应用程序调用并测试返回值,例如java -XX:ReduceInitialCardMarks -jar dummy.jar。没有合适的类在rt.jar中使用静态void main(),所以必须自己制作。

到目前为止最好的方法是,在使用-version调用时忽略无法识别的VM选项的输出,注意-version必须在参数之后,否则它不会测试它。

if java -XX:-ReduceInitialCardMarks -version 2>&1 | grep -q 'Unrecognized VM option'; then echo "Not supported"; else echo "Supported"; fi

有没有干净的方法呢?

2 个答案:

答案 0 :(得分:2)

在我的机器上执行

java -XX:+ReduceInitialCardMarks -version

返回0和版本信息(因为支持该选项),并执行

java -XX:+NoSuchOption -version

在stderr上返回1并显示一些错误消息。如果这适用于您的Java版本,那么您只需执行

if java -XX:+ReduceInitialCardMarks -version; then
    echo "Supported"
else
    echo "Unsupported"
fi

答案 1 :(得分:0)

您可以尝试以下方式:

if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]];  then   
    _java="$JAVA_HOME/bin/java"

if [[ "$_java" ]]; then
    version=$("$_java" -version 2>&1 | awk -F '"' '/version/ {print $2}')
    echo version "$version"
    if [[ "$version" > "1.6" ]]; then
        # do work
    else         
        echo version is less than 1.6
        exit
    fi
fi

请参阅:Correct way to check Java version from BASH script