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") }
)
}
それはうまく機能し、フォルダーに生成さstuff_2.9.2-0.1-SNAPSHOT.zip
れtarget
ます。
ここで、別のスコープで実行されるタスクの代替バージョンを作成したいと思い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
。これを「正しい」方法で行いたいと思います。