Scala 是否忽略自定义任务和范围中的SBT工件?
在SBT中,如果我有一个任务应该生成包含一堆文件的zip/jar/war,我会使用Scala 是否忽略自定义任务和范围中的SBT工件?,scala,sbt,Scala,Sbt,在SBT中,如果我有一个任务应该生成包含一堆文件的zip/jar/war,我会使用Defaults.packageTaskSettings方法来设置该任务。情况如下: object BuildDef extends Build { val makeThings = TaskKey[File]("make-things") val defaultMakeSettings = (baseDirectory) map { base => Seq( (base / "thing
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") }
)
}
当我运行scope:make things
时,它似乎忽略了该设置并使用了旧设置:
> show scope:make-things
[info] ...\target\scala-2.9.2\stuff_2.9.2-0.1-SNAPSHOT.zip
为什么它忽略了我的设置?我希望它已经生成了东西。范围是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
我意识到我可能可以直接更改
工件路径
,但我已经放弃了xsbt web插件为其包战争
任务所做的工作,而且它不会触及工件路径
。我想以“正确”的方式来做这件事。几乎在我发布问题的时候,我就发现了这一点。关键是使用inConfig
方法包装包设置,如下所示:
.settings(
artifact in (Scope, makeThings) <<= moduleName{Artifact(_,"zip","zip")}
)
.settings(
inConfig(Scope){
Defaults.packageTaskSettings(makeThings, defaultMakeSettings)
}: _*
)
谢谢你做我的调试器小鸭。
.settings(
artifact in (Scope, makeThings) <<= moduleName{Artifact(_,"zip","zip")}
)
.settings(
inConfig(Scope){
Defaults.packageTaskSettings(makeThings, defaultMakeSettings)
}: _*
)
...target\scala-2.9.2\stuff_2.9.2-0.1-SNAPSHOT-scope.zip