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

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

По какой-то причине у меня не работает фрагмент кода Generate sources из документации 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? 

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

3 ответа

+ Изменить 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 в сб. Test.scala будет сгенерировано в ./target/scala-2.10/src_managed/main/demo/Test.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)
}

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

Другие вопросы по тегам