2015-06-09 3 views
1

В некоторых пользовательских задач, я обнаружить некоторые ошибки, и я использую этот способ сигнализировать об ошибке и прекратить обработку текущей задачи:Как избежать трассировки стека с sys.error (сообщение)

sys.error("Some error") 

Внутренне он выдает исключение RunTimeException.

SBT показывает трассировку стека, и я хотел бы сообщить об ошибке без трассировки стека. Для ожидаемых ошибок это часто многословно, не имеет смысла и путает конечных пользователей.

Трассировка стека отображается при запуске из командной строки, а не оболочки, где только трассировка стека отображается командой last.

Существует ли стандартный способ сообщения об ошибках без трассировки стека?

ответ

1

Нечто подобное должно работать, но это может скрыть другие (непреднамеренные) ошибки в вашей задаче? Может быть, вы можете добавить ошибку к ошибке-задаче, а затем вызвать эту задачу каждый раз, когда хотите поднять ошибку? Затем вы можете установить traceLevel только на ошибку-задачу.

lazy val myTask = taskKey[Unit]("doomed to err") 

traceLevel in myTask:= -1 

myTask := { 
    error("Some error") 
} 
+1

Да, как вы уже сказали, разница между ожидаемыми ошибками с хорошим сообщением об ошибке и неожиданными (где интересна трассировка стека), не имеет значения. Спасибо за трюк 'traceLevel'. –