将资源生成器添加到SBT中的所有范围

时间:2016-02-21 18:21:34

标签: sbt

我有一个资源生成器,它应该同时为CompileTest运行。代码如下所示:

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_managed/main/isabelle,并另外写入这些文件的列表。

到目前为止,此工作正常,但我也想支持src/test/isabelle。显然,我可以复制上面的代码,但这似乎不太优雅(即使我将公共位拉出到函数中)。

我尝试在任何地方删除in Compile,但这不起作用("References to undefined settings")。

1 个答案:

答案 0 :(得分:4)

您想使用inConfig

val isabelleSettings = Seq(
  resourceGenerators += Def.task {
    val log = streams.value.log
    val source = sourceDirectory.value / "isabelle"
    val target = resourceManaged.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
)

inConfig(Compile)(isabelleSettings)
inConfig(Test)(isabelleSettings)

请参阅:

> 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