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

问题描述:

我想从作为项目组成部分的文件(我目前已将它们放在资源目录中,但这不是要求)中生成源文件。如何从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 => 

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

发生了什么,最终的工作是这样的(由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 

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

我觉得动态任务是做正确的方式, http://www.scala-sbt.org/0.13/docs/Tasks.html#Dynamic+Computations+with

+0

我希望你是对的,但你能否举一个更具体的例子?到目前为止,我在他们的实验中没有取得成功。 – Suma