scala – SBT插件 – 用户通过build.sbt定义的Command配置
发布时间:2020-12-16 09:24:15 所属栏目:安全 来源:网络整理
导读:我正在编写一个添加命令的SBT插件,并希望用户能够通过在其build.sbt中设置变量来配置此命令.实现这一目标的最简单方法是什么? 以下是插件外观的简化示例: import sbt.Keys._import sbt._object MyPlugin extends Plugin { override lazy val settings = Se
我正在编写一个添加命令的SBT插件,并希望用户能够通过在其build.sbt中设置变量来配置此命令.实现这一目标的最简单方法是什么?
以下是插件外观的简化示例: import sbt.Keys._ import sbt._ object MyPlugin extends Plugin { override lazy val settings = Seq(commands += Command.args("mycommand","myarg")(myCommand)) def myCommand = (state: State,args: Seq[String]) => { //Logic for command... state } } 我希望有人能够将follow添加到他们的build.sbt文件中: newSetting := "light" 如何从上面的myCommand命令中将其作为String变量提供? 解决方法
看一下这里的例子:
http://www.scala-sbt.org/release/docs/Extending/Plugins.html#example-plugin
在此示例中,定义了任务和设置: val newTask = TaskKey[Unit]("new-task") val newSetting = SettingKey[String]("new-setting") val newSettings = Seq( newSetting := "test",newTask <<= newSetting map { str => println(str) } ) 然后,您的插件的用户可以在他们的build.sbt中为newSetting设置提供自己的值: newSetting := "light" 编辑 这是另一个例子,更接近你的目标: Build.scala: import sbt._ import Keys._ object HelloBuild extends Build { val newSetting = SettingKey[String]("new-setting","a new setting!") val myTask = TaskKey[State]("my-task") val mySettings = Seq( newSetting := "default",myTask <<= (state,newSetting) map { (state,newSetting) => println("newSetting: " + newSetting) state } ) lazy val root = Project(id = "hello",base = file("."),settings = Project.defaultSettings ++ mySettings) } 使用此配置,您可以在sbt提示符下运行my-task,并且您将看到newSetting:default打印到控制台. 您可以在build.sbt中覆盖此设置: newSetting := "modified" 现在,当你在sbt提示符下运行我的任务时,你会看到newSetting:modified打印到控制台. 编辑2 以下是上述示例的独立版本:https://earldouglas.com/ext/stackoverflow.com/questions/17038663/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |