2014-09-12 3 views
3

Мы используем различные старые версии Java 1.6 на работе, которые не могут быть обновлены по разным причинам вне моего контроля.Проверьте, поддерживается ли опция -XX Java

Некоторая поддержка -XX:ReduceInitialCardMarks, некоторые нет, и выйдите, если вы попытаетесь использовать неподдерживаемый вариант.

Мне нужен сценарий оболочки, который вызывает java с параметром -XX: ReduceInitialCardMarks, если он доступен, но в остальном без него.

Вещи, которые я пробовал/с учетом

  • -X, это только распечатывает -X аргументы не -XX
  • Тестирование версии? Как? Нужно заранее знать, какие версии поддерживают то, что
  • Вызов с использованием фиктивного приложения и проверки возвращаемого значения, например. java -XX: ReduceInitialCardMarks -jar dummy.jar. Нет подходящих классов в rt.jar со статическим void main() для использования, поэтому нужно сделать свой собственный.

Лучший подход до сих пор, grepping выход для параметра Unrecognized VM при вызове с -version, note -version должен быть после аргумента, поскольку в противном случае он не тестирует его.

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

Есть ли какой-либо чистый способ сделать это?

ответ

2

На моей машине, выполняя

java -XX:+ReduceInitialCardMarks -version 

возвращает 0 и информацию о версии (так как опция поддерживается), и исполнением

java -XX:+NoSuchOption -version 

возвращает 1 с некоторыми сообщениями об ошибках на stderr. Если это верно для версий Java, то вы можете просто сделать

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

мне это нравится, лучше до сих пор чище, чем мой подход grep. Я немного успокоюсь, если у кого-нибудь есть идеи. – Adam

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

+0

Спасибо, версионирование не просто, 1.6.0_18 поддерживает этот аргумент, но 1.6.0_15 не т.д ... – Adam

Смежные вопросы