向SBT中的所有作用域添加资源生成器

向SBT中的所有作用域添加资源生成器,sbt,Sbt,我有一个资源生成器,它应该同时用于编译和测试。代码如下所示: resourceGenerators in Compile += Def.task { val log = streams.value.log val source = (sourceDirectory in Compile).value / "isabelle" val target = (resourceManaged in Compile).value / "isabelle" if (source.exists

我有一个资源生成器,它应该同时用于编译和测试。代码如下所示:

resourceGenerators in Compile += Def.task {
  val log = streams.value.log
  val source = (sourceDirectory in Compile).value / "isabelle"
  val target = (resourceManaged in Compile).value / "isabelle"
  if (source.exists()) {
    log.info(s"Copying Isabelle sources from $source to $target")
    IO.delete(target)
    IO.copyDirectory(source, target)
    val files = (target ** "*").get.filter(_.isFile)
    val mapper = Path.rebase(target, "")
    val contents = files.map(mapper).map(_.get).mkString("\n")
    val list = target / ".libisabelle_files"
    IO.write(list, contents)
    list +: files
  }
  else {
    Nil
  }
}.taskValue
基本上,它会查找src/main/isabelle文件夹中的所有文件,将其复制到resources\u managed/main/isabelle,并另外写入这些文件的列表

到目前为止,这一切都很好,但我也希望支持src/test/isabelle。显然,我可以复制上面的代码,但即使我将公共位提取到一个函数中,这看起来也很不优雅

我尝试在Compile everywhere中删除引用,但无法删除对未定义设置的引用。

是否要在图中使用:

val Isabelle设置=序号 resourceGenerators+=Def.task{ val log=streams.value.log val source=sourceDirectory.value/isabelle val target=resourceManaged.value/isabelle 如果source.com存在{ log.infosCopying Isabelle sources从$source到$target IO.deletetarget IO.copyDirectorysource,目标 val files=target***.get.filter_U2;.isFile val mapper=Path.rebasetarget, val contents=files.mapper.map\ux.get.mkString\n val list=target/.libisabelle\u文件 IO.writelist,目录 列表+:文件 } 否则{ 无 } }.taskValue IncofigCompileIsabelle设置 InFigtestisableSettings 见:

您要使用inConfig:

val Isabelle设置=序号 resourceGenerators+=Def.task{ val log=streams.value.log val source=sourceDirectory.value/isabelle val target=resourceManaged.value/isabelle 如果source.com存在{ log.infosCopying Isabelle sources从$source到$target IO.deletetarget IO.copyDirectorysource,目标 val files=target***.get.filter_U2;.isFile val mapper=Path.rebasetarget, val contents=files.mapper.map\ux.get.mkString\n val list=target/.libisabelle\u文件 IO.writelist,目录 列表+:文件 } 否则{ 无 } }.taskValue IncofigCompileIsabelle设置 InFigtestisableSettings 见:

> test:products
[info] Copying Isabelle sources from /Users/dnw/Desktop/t-2016-02-22.1038/src/test/isabelle to /Users/dnw/Desktop/t-2016-02-22.1038/target/scala-2.11/resource_managed/test/isabelle
[info] Copying Isabelle sources from /Users/dnw/Desktop/t-2016-02-22.1038/src/main/isabelle to /Users/dnw/Desktop/t-2016-02-22.1038/target/scala-2.11/resource_managed/main/isabelle