3

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.ziptargetます。

ここで、別のスコープで実行されるタスクの代替バージョンを作成したいと思い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。これを「正しい」方法で行いたいと思います。

4

1 に答える 1

3

質問を投稿するとすぐに、これを理解することになりました。重要なのは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
于 2013-08-30T15:04:55.590 に答える