2016-11-10 3 views
0

Я хочу создать плагин 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, 
    ... 
) 

С этим я могу собрать мои классы пуха успешно. Есть ли более разумный способ сделать это? Благодаря!

ответ

0

Для тестовых конфигураций используйте Defaults.testSettings и Defaults.testTasks. Обратите внимание, что вопросы заказа:

inConfig(Fuzz)(Defaults.testSettings ++ Defaults.testTasks ++ baseSettings) 
+0

К сожалению, это не сработало, у меня все еще есть классы 'fuzz' в моем пути к классам. Я изменил 'autoImport' для расширения от' Test' и изменил параметры проекта на 'override lazy val projectSettings = inConfig (Fuzz) (Defaults.testSettings ++ Defaults.testTasks ++ baseFuzzSettings)'. – amuttsch

+0

Единственное, что я могу придумать, это называть 'configs (Fuzz)' в файле 'build.sbt' вашего проекта. Я не уверен, как это сделать с помощью настроек. – jkinkead

Смежные вопросы