我正在尝试让 sbt 编译和构建一些基准。我已经告诉它将基准添加到测试路径,以便它们与测试一起重新编译,但我不知道如何编写一个动作来让我实际运行它们。是否可以从项目定义类,甚至只是从命令行调用类?
问问题
844 次
2 回答
4
是的。
如果您想在运行 SBT 的同一 VM 中运行它们,请在项目定义文件中编写类似于以下内容的自定义任务:
lazy val benchmark = task {
// code to run benchmarks
None // Some("will return an error message")
}
在 SBT 控制台中键入benchmark
将运行上述任务。要实际运行基准测试,或者就此而言,您已编译的任何其他类,您可以重用 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
当你改变你的项目定义时不要忘记。
于 2010-10-19T15:52:38.410 回答
2
您不能简单地将基准编写为测试,以便在您在 SBT 中调用“测试”时运行它们吗?
您还可以使用“仅测试”运行特定测试,或使用“运行”或“执行”运行主测试(请参阅http://code.google.com/p/simple-build-tool/wiki/RunningSbt细节)。
于 2010-10-19T12:53:18.910 回答