【问题标题】:SBT artifact in custom task and scope ignored?自定义任务和范围中的 SBT 工件被忽略了吗?
【发布时间】:2013-09-03 08:29:48
【问题描述】:

在 SBT 中,如果我有一个任务应该生成包含一堆文件的 zip/jar/war,我会使用 Defaults.packageTaskSettings 方法来设置该任务。它看起来如下:

object BuildDef extends Build {

  val makeThings = TaskKey[File]("make-things")

  val defaultMakeSettings = (baseDirectory) map { base => Seq(
    (base / "thingA") -> "thingy",
    (base / "thingB") -> "thingz"
  )}

  val project = Project("stuff", file("."))
    .settings(Defaults.packageTaskSettings(makeThings, defaultMakeSettings): _*)
    .settings(
      artifact in makeThings <<= moduleName{ Artifact(_, "zip", "zip") }
    )
}

效果很好,并在target 文件夹中生成stuff_2.9.2-0.1-SNAPSHOT.zip

现在我想制作make-things 任务的替代版本,它在不同的范围内运行,例如运行proguard,然后稍微不同地打包东西。我在BuildDef 对象中添加了以下设置:

val Scope = config("scope")

val project = ...
  .settings(...)
  .settings(
    Defaults.packageTaskSettings(makeThings in Scope, defaultMakeSettings): _*
  )
  .settings(
    artifact in (Scope, makeThings) <<= 
      moduleName{ n => Artifact(n+".scoped", "zip", "zip") }
  )

当我运行 scope:make-things 时,它似乎忽略了该设置并使用旧设置:

> show scope:make-things
[info] ...\target\scala-2.9.2\stuff_2.9.2-0.1-SNAPSHOT.zip

为什么它会忽略我的设置?我希望它会生成 stuff.scoped_2.9.2-0.1-SNAPSHOT.zip

更多信息...

> show scope:make-things::artifact
[info] Artifact(stuff.scoped,zip,zip,None,List(),None,Map())

> show scope:make-things::artifact-path
[info] ...\target\scala-2.9.2\stuff_2.9.2-0.1-SNAPSHOT.zip

我意识到我可能可以直接更改artifactPath,但我将放弃xsbt-web-plugin 对其package-war 任务所做的事情,并且它不会触及artifactPath。我想以“正确”的方式做到这一点。

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    我几乎一发布问题就解决了这个问题。关键是使用inConfig 方法来包装包设置,如下所示:

    .settings(
      artifact in (Scope, makeThings) <<= moduleName{Artifact(_,"zip","zip")}
    )
    .settings(
      inConfig(Scope){
        Defaults.packageTaskSettings(makeThings, defaultMakeSettings)
      }: _*
    )
    

    我还发现packageTaskSettings 将通过附加配置名称来修改我的工件,只要我在packageTaskSettings 之前指定我的工件设置。现在我得到了

    的工件路径
    ...target\scala-2.9.2\stuff_2.9.2-0.1-SNAPSHOT-scope.zip
    

    【讨论】:

    • 感谢您成为我的调试器小鸭。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    相关资源
    最近更新 更多