Не обнаружено неявного значения 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)
}