10

プロジェクトを 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 ビルド定義に移動する適切な方法は何だろうか?

4

3 に答える 3

8

Def.taskbuild.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

于 2013-09-23T08:11:31.317 に答える
0

私の sbt のバージョンは 0.13.8 で、うまくいきます。

于 2016-03-17T15:26:59.507 に答える
0

<+=の代わりに使用+=:

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)
}
于 2015-10-09T17:29:49.083 に答える