如何为任务生成资源?

时间:2014-07-07 07:00:51

标签: sbt sbt-assembly

对于我的Runtime配置,我可以按如下方式定义额外的resourceGenerator

resourceGenerators in Runtime <+= myResourceGeneratingTask

对于assembly任务,这不起作用:

resourceGenerators in assembly <+= myResourceGeneratingTask

错误消息是:

Reference to undefined setting:

  *:assembly::resourceGenerators from *:assembly::resourceGenerators (...\build.sbt:20)

当我更改&#39;追加&#39;运算符<+=到赋值<<=,它不再导致任何错误,但我的资源生成器未被调用。

1 个答案:

答案 0 :(得分:3)

请注意,我使用sbt 0.13.5 。它也适用于Typesafe Activator 1.2.3(因为它基于sbt 0.13.5)。

assembly是一项任务而非配置,并且不提供resourceGenerators设置,因此错误为undefined setting

但是,您可以在给定配置中设置任务的设置,以便以下工作正常:

resourceGenerators in (Runtime, assembly) += myResourceGeneratingTask.taskValue

请注意,我使用+=taskValue组合,这是0.13中的首选方法。我还提取了一个方法def makeSomeSources,以便在必要时可以在其他用例中重复使用它。请参阅sbt:

官方文档中的Generating files
  

因为我们想要添加任务,而不是之后的值   执行时,我们使用taskValue而不是通常的值。它应该是   根据生成的文件是否为main(Compile)确定范围   或测试(Test)资源。

在您的情况下,它是assembly配置中的Runtime任务。

build.sbt 我用作参考:

import AssemblyKeys._

assemblySettings

def makeSomeSources(f: File): Seq[File] = {
  val content = "Hello"
  IO.write(f, content)
  Seq(f)
}

lazy val myResGenT = taskKey[Seq[File]]("My personal resgen")

myResGenT := {
  val log = streams.value.log
  val f = (resourceManaged in Compile).value / "resgen.xml"
  val fs: Seq[File] = makeSomeSources(f)
  log.info(s"Generating file(s): $fs")
  fs
}

resourceGenerators in Compile += myResGenT.taskValue

resourceGenerators in Runtime += myResGenT.taskValue

resourceGenerators in (Runtime, assembly) += myResGenT.taskValue

执行runtime:assembly会给我以下输出:

> runtime:assembly
[info] Generating file(s): List(C:\dev\sandbox\resourceGenerators\target\scala-2.10\resource_managed\main\resgen.xml)
[info] Including: scala-library.jar
[info] Checking every *.class/*.jar file's SHA-1.
[info] Merging files...
[warn] Merging 'META-INF\MANIFEST.MF' with strategy 'discard'
[warn] Strategy 'discard' was applied to a file
[info] SHA-1: 875d4b95f38dc85d14e53bdcd10e442520aeeefd
[info] Packaging C:\dev\sandbox\resourceGenerators\target\scala-2.10\resourcegenerators-assembly-0.1-SNAPSHOT.jar ...
[info] Done packaging.