Да, это так.
Если вы хотите запустить их на той же виртуальной машине, на которой запускается SBT, напишите в файле определения проекта пользовательскую задачу, аналогичную следующей:
lazy val benchmark = task {
// code to run benchmarks
None // Some("will return an error message")
}
Ввод benchmark
в консоли SBT запустит задачу выше. Чтобы на самом деле запустить тесты или, если на то пошло, любой другой класс, который вы скомпилировали, вы можете повторно использовать часть существующей инфраструктуры SBT, а именно метод runTask
, который создаст задачу, которая что-то для вас запускает. Имеет следующую подпись:
def runTask(mainClass: => Option[String], classpath: PathFinder, options: String*): Task
Просто добавьте в ваш файл следующее:
lazy val benchmark = task { args =>
runTask(Some("whatever.your.mainclass.is"), testClasspath, args)
}
При выполнении тестов иногда рекомендуется запускать их в отдельном вызове jvm, чтобы получить более надежные результаты. SBT позволяет запускать отдельные процессы, вызывая метод !
для строковой команды. Скажем, у вас есть команда java -jar path-to-artifact.jar
, которую вы хотите запустить. Тогда:
"java -jar path-to-artifact.jar" !
запускает команду в SBT. Вы хотите поместить фрагмент выше в отдельное задание, как и ранее.
И не забудьте reload
при изменении определения проекта.