我想創建一個SBT插件一種新的考驗。爲了簡單起見,我創建了一個小模糊測試插件,模擬在sbt docs提到的一個。SBT插件 - 自己配置類路徑不完整
我的插件類,目前看起來是這樣的:
package sbtfuzz
import sbt._, Keys._
object FuzzPlugin extends sbt.AutoPlugin {
override def requires = plugins.JvmPlugin
override def trigger = allRequirements
object autoImport {
lazy val Fuzz = config("fuzz") extend(Compile)
}
import autoImport._
lazy val baseFuzzSettings: Seq[Def.Setting[_]] = Seq(
test := {
println("fuzz test")
}
)
override lazy val projectSettings = inConfig(Fuzz)(baseFuzzSettings) ++ inConfig(Fuzz)(Defaults.compileSettings)
}
我comaprison添加到代碼中的文檔的唯一的事情就是inConfig(Fuzz)(Defaults.compileSettings)
的get任務來編譯代碼。
如果我執行sbt fuzz:compile
,則編譯src/fuzz/scala
中的源代碼。但是如果來源有依賴於實際的項目代碼(如所有的測試都)編譯失敗,系統因爲沒有找到的類。我想這是因爲fuzz:fullClasspath
只有一個條目:
[info] * Attributed(.../fuzz/target/scala-2.10/sbt-0.13/fuzz-classes)
而test:fullClasspath
有項目類,以及依賴於它:
[info] * Attributed(.../fuzz/target/scala-2.10/sbt-0.13/test-classes)
[info] * Attributed(.../fuzz/target/scala-2.10/sbt-0.13/classes)
[info] * Attributed(~/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.10.4.jar)
[info] * Attributed(~/.ivy2/cache/org.scala-sbt/sbt/jars/sbt-0.13.13.jar)
...
這樣test:compile
能夠成功編譯測試類和fuzz:compile
沒有。
如何配置我的fuzz
配置,如test
配置的方式,包括所有項目依賴關係?
謝謝!
編輯: 我發現了一個(在我看來),而骯髒的解決方法:
lazy val baseFuzzSettings: Seq[Def.Setting[_]] = Seq(
fullClasspath in Fuzz ++= (dependencyClasspath in Test).value,
dependencyClasspath in Fuzz ++= (dependencyClasspath in Test).value,
...
)
有了這個,我可以成功編譯我的絨毛類。有沒有更健全的方式來做到這一點?謝謝!
不幸的是,它不工作,我仍然只在我的類路徑中'模糊中classes'。我改變了'autoImport'從'Test'延伸,並且改變了的項目設置爲'覆蓋懶惰VAL projectSettings = inConfig(起毛)(Defaults.testSettings ++ ++ Defaults.testTasks baseFuzzSettings)'。 – amuttsch
我能想到的唯一的另一件事是調用'CONFIGS(起毛)'在項目的'build.sbt'文件。我不知道如何通過設置來做到這一點。 – jkinkead