gpt4 book ai didi

scala - 具有类似属性参数的 SBT InputKey

转载 作者:行者123 更新时间:2023-12-01 11:33:55 41 4
gpt4 key购买 nike

谁能帮我创建一个 SBT 任务来支持来自命令行的类似属性的参数?

lazy val myTask = inputKey[Unit]("my task")
myTask := {
if (directoryOpt.isEmpty) // directoryOpt comes from an optional command line argument: directory="~/downloads"
fullRunInputTask(inputKey, Compile, "example.MyTaskClass")
else
fullRunInputTask(inputKey, Compile, "example.MyTaskClass", directoryOpt.get)
}

任务可以从命令行运行,例如:

sbt myTask directory="~/downloads"

我确实在 http://www.scala-sbt.org/0.13/docs/Input-Tasks.html 阅读了 sbt 文档.但它只解释了如何创建任务解析器,如 sbt myTask option1 option2,这并不能完全满足我的需要。

更新:我使用了 jazmit 的解决方案,因为这是一个简单的改变。它运作良好!我也会尝试 Mariusz 的解决方案并在此处更新。

最佳答案

您可以将 project/Build.scala 与您的 build.sbt 一起用于您的输入。您也可以使用 Commands 而不是 Tasks。下面是一个例子:

import sbt._
import Keys._

object CustomBuild extends Build {

def myTask = Command.args("myTask", "<name>"){ (state, args) =>

val argMap = args.map { s =>
s.split("=").toList match {
case n :: v :: Nil => n -> v
}
}.toMap

//println(argMap) //to see all argument pairs
//react on name in params list
println("Hi "+ argMap.getOrElse("name", "Unknown"))

state //Command can modify state, so you must to return it.
}
}

现在你必须将这个命令添加到你的项目中,在 build.sbt add 中

commands += myTask

现在你可以使用它了:

> sbt "myTask name=Mario"
> Hi Mario
> sbt myTask
> sbt Hi Unknown

希望对您有所帮助!
有关命令的更多信息: you can find here

关于scala - 具有类似属性参数的 SBT InputKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33634137/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com