Я пытаюсь построитьСкалапроект ссбт, поэтому я запускаю команду:
sbt clean test > log.log
Это означает, что любые сообщения, которые инструмент sbt записывает в консоль Windows, должны записываться в файл "log.log". Но иногда я получаю stacktrace, записанный в консоль, а не в файл:
C:\path>sbt clean test > log.log
java.lang.ExceptionInInitializerError
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.ClassCastException: Class org.infinispan.configuration.parsing.Parser60 does not implement org.infinispan.configuration.parsing.ConfigurationParser
Почему команда ">" не перенаправляет все сообщения в файл?
решение1
То, что вы вставили, — это не стандартный вывод команды (STDOUT), а вывод ошибок команды (STDERR).
Когда вы добавляете ">output_file" к команде, вы перенаправляете в этот файл только STDOUT, а не STDERR.
Если вы хотите выводить ошибки в тот же файл, что и стандартный вывод, вам нужно использовать
sbt clean test > log.log 2>&1
"2>&1" говорит о необходимости вывести ошибку в то же место, что и результаты стандартного вывода.
Вы также можете сделать что-то вроде этого:
sbt clean test > log.log 2>error.log
Он выведет STDOUT в log.log, а STDERR — во второй файл с именем error.log, если вы хотите их разделить.
См. это об операторах перенаправления команд