gpt4 book ai didi

scala - 忽略自定义任务和范围中的 SBT 工件?

转载 作者:行者123 更新时间:2023-12-02 00:05:38 28 4
gpt4 key购买 nike

在 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。我想以“正确”的方式做到这一点。

最佳答案

我几乎在发布问题后就弄清楚了这一点。关键是使用 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

关于scala - 忽略自定义任务和范围中的 SBT 工件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18535800/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com