Sbtタスクでコマンドを実行することは可能ですか?もしそうなら、どうですか?コマンドは国家を必要とするので、どうすれば入手できるでしょうか?Sbtでは、タスクでコマンドを実行する方法
私はここで、デフォルトのタスクを上書きしようとしていますが、私はCommand.processの署名が、私は国家
Sbtタスクでコマンドを実行することは可能ですか?もしそうなら、どうですか?コマンドは国家を必要とするので、どうすれば入手できるでしょうか?Sbtでは、タスクでコマンドを実行する方法
私はここで、デフォルトのタスクを上書きしようとしていますが、私はCommand.processの署名が、私は国家
ような何かを行うことができますはい、あなたは、タスク内のコマンドを実行することができます。ここに私が現在達成しようとしていることがあります。まず、あなたのビルドで次のメソッドを定義します。
/**
* Convert the given command string to a release step action, preserving and invoking remaining commands
* Note: This was copied from https://github.com/sbt/sbt-release/blob/663cfd426361484228a21a1244b2e6b0f7656bdf/src/main/scala/ReleasePlugin.scala#L99-L115
*/
def runCommandAndRemaining(command: String): State => State = { st: State =>
import sbt.complete.Parser
@annotation.tailrec
def runCommand(command: String, state: State): State = {
val nextState = Parser.parse(command, state.combinedParser) match {
case Right(cmd) => cmd()
case Left(msg) => throw sys.error(s"Invalid programmatic input:\n$msg")
}
nextState.remainingCommands.toList match {
case Nil => nextState
case head :: tail => runCommand(head, nextState.copy(remainingCommands = tail))
}
}
runCommand(command, st.copy(remainingCommands = Nil)).copy(remainingCommands = st.remainingCommands)
}
はその後、単に、例えば、上記で定義されたユーティリティを使用して、タスク内からrunCommandAndRemaining("+myProject/publishLocal")(state.value)
を任意のコマンドを呼び出します。あなたの特定のケースで
、それは
dist := {
val log = streams.value.log
log.debug("Turning coverage off")
runCommandAndRemaining("coverageOff")(state.value)
dist.value
}
これが役に立てば幸いに煮詰める必要があります!
(string, state) => _
ある
dist := {
println("Turning coverage off")
Command.process("coverageOff")
dist.value
}
を試みたものです
gitterから助けを得た後、それは不可能ですが、逆にコマンドを実行してタスクを呼び出すことはできます。
ご利用の場合は、コマンドとタスクの順番に(またはその逆)を実行することであるのであれば、あなたはこの
lazy val newCommand = Command.command("name") { state =>
val newState = Command.process("comandName", state)
// run task
newState
}