Неявно для 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, и она работает для меня.