35

設定を変更してタスクをpublish-snapshot実行するコマンドが必要です(その設定はコマンドの実行時に計算されます)。publishversion

versionInsideコマンドの現在の値を取得する方法を理解しました。これは、タスクProject.runTask("task", "scope", ...)を呼び出すための正しい呼び出しのようです。publish

私が混乱しているのは、Stateインスタンスを新しいバージョン値で変更する方法だけです。私の試みはすべて、元のバージョン設定には何の影響も与えていないようです。

私の最後の試み:

val printVers = TaskKey[Unit]("printvers")
val printVersTask = TaskKey[Unit]("printvers") <<= {version map println}

def publishSnapshot = Command.command("publish-snapshot") { state =>
  val newState = SessionSettings.reapply(state.get(sessionSettings).get.appendRaw(version := "???"), state)
  Project.runTask(printVers in Compile, newState, true)

  state
}

lazy val root = Project("main", file("."),
                        settings =
                          Defaults.defaultSettings ++
                          Seq(printVersTask)).settings(commands += publishSnapshot)

その動作を修正する方法はありますか?

4

3 に答える 3

21

sbtメーリングリストの助けを借りて、私は次のような解決策を作成することができました。

def publishSnapshot = Command.command("publish-snapshot") { state =>
  val extracted = Project extract state
  import extracted._
  val eVersion = getOpt(version).get // getting current version
  runTask(publish in Compile,
    append(Seq(version := "newVersion"), state),
    true
  )
  state
}
于 2013-01-11T09:02:49.293 に答える
12

これは実際にはうまくいきませんでした。SBT0.13.7を使用しています

上記の例に私がしなければならなかったことを適応させて、私は次のようなことをしなければなりませんでした:

def publishSnapshot = Command.command("publish-snapshot") { state =>
  val extracted = Project extract state
  val newState = extracted.append(Seq(version := "newVersion"), state)
  val (s, _) = Project.extract(newState).runTask(publish in Compile, newState)
  s
}

または、次のようにします。

def publishSnapshot = Command.command("publish-snapshot") { state =>
  val newState =
    Command.process("""set version := "newVersion" """, state)
  val (s, _) = Project.extract(newState).runTask(publish in Compile, newState)
  s
}
于 2015-04-13T03:32:14.257 に答える
5

コマンドから任意の設定を更新するには、次のようにします。

def updateFoo = Command.command("updateFoo") { state =>
 val extracted = Project extract state
 import extracted._
 println("'foo' set to true")
 //append returns state with updated Foo
 append(Seq(foo := true), state)
}
于 2015-05-06T19:49:43.040 に答える