Я помещал эту команду в.sh файл:
CP="$1"
"$JAVA_CMD" -cp "$CP" "$MAIN_CLASS" "$@"
Где CP - это путь к файлу jar
моя проблема:
когда CP не имеет надлежащего значения, и в этой инструкции он не смог найти основной класс, и я получу это исключение:
Exception in thread "main" java.lang.NoClassDefFoundError
как я могу справиться с этим исключением в сценарии оболочки?
Чтобы заменить любую ошибку, напечатанную на stderr собственным сообщением об ошибке, вы можете подавить команду stderr (путем перенаправления на /dev/null
) и напечатать свое сообщение вместо этого, когда статус завершения вашей команды отличен от нуля:
CP="$1"
"$JAVA_CMD" -cp "$CP" "$MAIN_CLASS" "$@" 2>/dev/null || { echo "error: Java exited with nonzero status $?"; exit 1; }
Более подробный способ сделать это, что, вероятно, более читаемо для людей, относительно новых для Bash:
CP="$1"
if ! "$JAVA_CMD" -cp "$CP" "$MAIN_CLASS" "$@" 2>/dev/null; then
echo "error: Java exited with nonzero status $?"
exit 1
fi
Возможно, вы можете найти эту ссылку полезной: http://www.tldp.org/LDP/abs/html/exit-status.html
Bash содержит встроенную переменную с именем $?
который содержит код выхода ранее выполненной команды. $? == 0
$? == 0
означает, что программа Java выполнена успешно, а $? != 0
$? != 0
означает, что программа Java выбрала исключение, такое как в вашем случае.