Я хочу создать плагин sbt для нового типа тестов. Чтобы все было просто, я создал небольшой плагин тестирования fuzz, аналог которого был указан в sbt docs.sbt plugin - собственная конфигурация classpath неполная
Мой класс плагин выглядит в настоящее время следующим образом:
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)
к задачам ПОЛУЧИТЬ для компиляции кода.
Если я исполню 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
, включая все зависимости проекта?
Спасибо!
Edit: Я нашел (на мой взгляд) довольно грязный обходной путь:
lazy val baseFuzzSettings: Seq[Def.Setting[_]] = Seq(
fullClasspath in Fuzz ++= (dependencyClasspath in Test).value,
dependencyClasspath in Fuzz ++= (dependencyClasspath in Test).value,
...
)
С этим я могу собрать мои классы пуха успешно. Есть ли более разумный способ сделать это? Благодаря!
К сожалению, это не сработало, у меня все еще есть классы 'fuzz' в моем пути к классам. Я изменил 'autoImport' для расширения от' Test' и изменил параметры проекта на 'override lazy val projectSettings = inConfig (Fuzz) (Defaults.testSettings ++ Defaults.testTasks ++ baseFuzzSettings)'. – amuttsch
Единственное, что я могу придумать, это называть 'configs (Fuzz)' в файле 'build.sbt' вашего проекта. Я не уверен, как это сделать с помощью настроек. – jkinkead