Неявно для Append.Value [...] найдено с Def.task для генерации файлов в SBT 0.13?

У меня проблема с переносом моего проекта на SBT 0.13.

По какой-то причине фрагмент из Создать источники из документации SBT не работает для меня.

К сожалению, ни простое определение сборки .sbt, ни определение конструктора Scala. Определение проекта взято из документации:

name := "sbt-test"

sourceGenerators in Compile += Def.task {
  val file = (sourceManaged in Compile).value / "demo" / "Test.scala"
  IO.write(file, """object Test extends App { println("Hi") }""")
  Seq(file)
}

Компилятор жалуется на ошибку типа при компиляции определения проекта:

~/P/sbt-test ▶ sbt
[info] Loading global plugins from /Users/phearnot/.sbt/0.13/plugins
[info] Loading project definition from /Users/phearnot/Projects/sbt-test/project
/Users/phearnot/Projects/sbt-test/build.sbt:3: error: No implicit for Append.Value[Seq[sbt.Task[Seq[java.io.File]]], sbt.std.FullInstance.M[Seq[java.io.File]]] found,
  so sbt.std.FullInstance.M[Seq[java.io.File]] cannot be appended to Seq[sbt.Task[Seq[java.io.File]]]
sourceGenerators in Compile += Def.task {
                            ^
[error] Type error in expression
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? 

ОБНОВЛЕНИЕ: Теперь, когда AlexIv указал на проблему в моем определении файла SBT, я задаюсь вопросом, что является правильным способом переместить его в определение сборки Scala?

Ответы

Ответ 1

Измените Def.task в файле build.sbt(от gist) до Def.task[Seq[File]] или просто оставьте task[Seq[File]] причина Def автоматически импортируется в build.sbt:

name := "sbt-test"

sourceGenerators in Compile += task[Seq[File]] {
  val file = (sourceManaged in Compile).value / "demo" / "Test.scala"
  IO.write(file, """object Test extends App { println("Hi") }""")
  Seq(file)
}

Затем вызовите compile в sbt. Test.scala будет сгенерирован в ./target/scala-2.10/src_managed/main/demo/Test.scala

Ответ 2

Используйте <+= вместо +=:

name := "sbt-test"

sourceGenerators in Compile <+= Def.task {
  val file = (sourceManaged in Compile).value / "demo" / "Test.scala"
  IO.write(file, """object Test extends App { println("Hi") }""")
  Seq(file)
}

Ответ 3

Моя версия sbt 0.13.8, и она работает для меня.