如何在SBT中从资源(或其他项目文件)创建源

时间:2017-02-09 19:37:57

标签: scala sbt

我想从作为项目一部分的文件中生成源代码(我目前已将它们放在资源目录中,但这不是必需的。)

这是我的尝试:

sourceGenerators in Test += (sourceManaged in Test map { src =>
  (unmanagedResourceDirectories in Test).value map { dir =>
    val file = dir / "demo" / src.name
    IO.write(file, "Prefix---" + IO.read(src) + "---Postfix")
    file
  }
}).taskValue

这给了我一个错误:

error: Illegal dynamic dependency 
(unmanagedResourceDirectories in Test).value map { src =>

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

最终起作用的是(受this code启发,在对问题SBT sourceGenerators task - execute only if a file changes的评论中引用):

sourceGenerators in Test += Def.task {
  val sources = (unmanagedResources in Test).value filter ( _.isFile )
  val dir = (sourceManaged in Test).value
  sources map { src =>
    IO.write(dir / src.name, "Prefix---" + IO.read(src) + "---Postfix")
    f
  }
}.taskValue

重要的部分是阅读任务内部的设置。

答案 1 :(得分:0)