Sbt 如何在任务中执行命令

Sbt 如何在任务中执行命令,sbt,Sbt,是否可以在Sbt任务中执行命令?如果是,怎么做?由于命令需要一个状态,我如何才能获得一个状态 我正在尝试覆盖一个默认任务,下面是我尝试过的 dist := { println("Turning coverage off") Command.process("coverageOff") dist.value } Command.process的签名是(字符串,状态)=>\uu 我还不知道从哪里获取状态在获得gitter的帮助后,这是不可能的,但

是否可以在Sbt任务中执行命令?如果是,怎么做?由于命令需要一个状态,我如何才能获得一个状态

我正在尝试覆盖一个默认任务,下面是我尝试过的

dist := {
  println("Turning coverage off")
  Command.process("coverageOff")
  dist.value
}
Command.process
的签名是
(字符串,状态)=>\uu


我还不知道从哪里获取状态

在获得gitter的帮助后,这是不可能的,但是可以做相反的事情,在命令中调用任务

因此,如果您的用例是按顺序运行命令和任务(反之亦然),您可以这样做

lazy val newCommand = Command.command("name") { state =>
  val newState = Command.process("comandName", state)
  // run task
  newState
}

是的,您可以在任务中运行命令。以下是我目前为实现这一目标所做的工作。首先,在构建中定义以下方法:

/**
*将给定的命令字符串转换为释放步骤操作,保留并调用其余命令
*注意:这是从https://github.com/sbt/sbt-release/blob/663cfd426361484228a21a1244b2e6b0f7656bdf/src/main/scala/ReleasePlugin.scala#L99-L115
*/
def runcommandremaining(命令:字符串):State=>State={st:State=>
导入sbt.complete.Parser
@注释.tailrec
def RUNCOMAND(命令:字符串,状态:状态):状态={
val nextState=Parser.parse(命令,状态.combinedParser)匹配{
大小写右侧(cmd)=>cmd()
大小写左侧(msg)=>抛出系统错误(s“无效的编程输入:\n$msg”)
}
nextState.remainingCommands.toList匹配{
案例Nil=>nextState
case head::tail=>runCommand(head.commandLine,nextState.copy(remaingcommands=tail))
}
}
runCommand(command,st.copy(remaingcommands=Nil)).copy(remaingcommands=st.remaingcommands)
}
然后,只需使用上面定义的实用程序从任务中调用任何命令,例如,
runcommandremaining(“+myProject/publishLocal”)(state.value)

在你的具体情况下,它应该归结为

dist:={
val log=streams.value.log
调试(“关闭覆盖范围”)
runcommandremaining(“coverageOff”)(state.value)
距离值
}
希望这有帮助

可通过计算
状态值

要从任务访问当前状态,请使用
状态
任务作为 输入。比如说,

myTask:=。。。state.value…

并且可以使用
Command在任务中调用命令

dist := {
  println("Turning coverage off")
  Command.process("coverageOff", state.value)
  dist.value
}

您好,什么是
命令。进程
?它在对象上不存在,并且给出的符号未解析DHI@boyang,这个答案可能已经过时,我认为接受的答案有效,可能值得检查结果,
Command.process
在sbt 1.0.x和1.1.x中被删除,但在1.2.x中被添加回,语义略有不同。你的作品再次出现,现在应该是正确的答案。你能补充一些解释,解释一下为什么会这样吗?据我所知,
runcommandremaining
只会创建一个新状态,其中所需的命令处于挂起状态。但是,结果状态在
dist
的定义中被简单地丢弃。或者有一些宏魔法在起作用吗?这也适用于
命令。
定义,如果您只使用
运行命令和维护(状态)