我試圖讓SBT編譯並生成一些基準簡單的構建工具。我已經告訴它要將測試基準添加到測試路徑中,以便它們與測試一起重新編譯,但我無法弄清楚如何編寫一個動作讓我實際運行它們。是否有可能從Project定義類中調用類,甚至是從命令行調用?使用爲基準
使用爲基準
回答
是的,它是。
如果你想在SBT運行在同一個虛擬機上運行它們,然後寫類似的項目定義文件如下自定義任務:
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
只需添加以下到您的文件:您在一個單獨的JVM調用運行它們
lazy val benchmark = task { args =>
runTask(Some("whatever.your.mainclass.is"), testClasspath, args)
}
當運行基準測試,它有時建議,得到更可靠結果。 SBT允許您通過在字符串命令上調用方法!
來運行單獨的進程。假設你有一個要運行的命令java -jar path-to-artifact.jar
。然後:
"java -jar path-to-artifact.jar" !
在SBT中運行命令。你想把上面的代碼片段放在一個單獨的任務中,和之前一樣。
當你改變你的項目定義不要忘了reload
。
你不能簡單地寫基準作爲測試,所以當你調用SBT「測試」,他們將運行?您也可以使用「僅測試」運行特定的測試,或者使用'run'或'exec'運行主(有關詳細信息,請參閱http://code.google.com/p/simple-build-tool/wiki/RunningSbt)。
他們可能需要很長的時間,所以我想單獨行動運行它們。 – 2010-10-19 13:01:09
@Dial我看到了,添加了一些替代答案。 – 2010-10-19 15:51:57
- 1. 使用基準值
- 2. 爲基準
- 3. 圍棋:使用的基準
- 4. String作爲基準參數
- 5. Android應用程序電池使用的準確基準
- 6. 爲什麼分配給非基準的基準會改變其動態行爲
- 7. 使用Python進行基準測試
- 8. 使用javascript更改基準href
- 9. 使用Azure的基準環境
- 10. 使用Jmeter進行基準Solr索引
- 11. 使用Apache JMeter的基準Elasticsearch
- 12. 在單元格中使用Rails基準
- 13. 使用時間命令基準
- 14. 使用gprof的與LULESH基準
- 15. 使用opendj列出基準DN Rest
- 16. 使用ab的網站基準測試
- 17. 使用RAII與工廠作爲輸入的基準的指針
- 18. 準確的基準代碼
- 19. 基準django應用程序
- 20. iOS應用基準測試
- 21. libtomcrypt用法基準測試
- 22. Membase的基準和用法
- 23. 使用具有基於基準行篩選結果
- 24. CPython的基準
- 25. 基準分析
- 26. 當「基準」documentdb
- 27. 飛鏢基準?
- 28. 基於準則
- 29. 基準長度
- 30. 基準網站
我會建議在另一個jvm中運行基準測試。當我從sbt調用測試時,它最終會耗盡內存(尤其是在很多測試失敗的情況下)。這是令人討厭的(但不是致命的)測試,但會扭曲基準。 – 2010-10-20 07:02:03
我經常見到這個,在Liftweb裏很多。我對此並不十分確定,但可能因爲以下原因而失敗。每次sbt重新編譯你的文件,你希望從sbt使用它們,sbt會使用自定義類加載器來動態加載類文件。然後這些佔據jvm的permgen空間。一旦你重新編譯,舊的類和新的類都會保留在permgen空間中,如果沒有收集舊的類,遲早你會用完它。增加運行sbt的jvm的permgen空間可能會有所幫助:'-XX:MaxPermSize = 256m'。 – axel22 2010-10-20 07:11:57