如何在sbt中添加自定义命令?
问题描述:
我正在尝试向我的sbt添加一条新命令。如何在sbt中添加自定义命令?
在我build.sbt
我有
lazy val root = (project in file(".")).settings(mySuperDuperCommand)
在同级文件mySuperDuperCommands.sbt
我
lazy val mySuperDuperTaskKey = TaskKey[Unit]("mySuperDuperCommand")
lazy val mySuperDuperCommand := { ... do *amazing* stuff ... }
它给我的错误cannot resolve symbol "mySuperDuperCommand"
内build.sbt
。如何解决这个问题?
答
如果你喜欢留在一个单一的构建文件,然后,在你的build.sbt
你可以这样做:
lazy val mySuperDuperTask = TaskKey[Unit]("mySuperDuperCommand")
lazy val root = (project in file(".")).settings(mySuperDuperTask:= { ... })
当然
用自己的任务的实现替换...
。
或者,如果你喜欢使用两个不同的文件,你可以做这样的事情:
在project/Build.scala
你可以定义你的任务。例如:
import sbt._
import Keys._
object ProjectBuild {
lazy val mySuperDuperTask = TaskKey[Unit]("mySuperDuperCommand", "Prints hello.")
def buildSettings = Seq(mySuperDuperTask:={println("Hello")})
}
然后,在你build.sbt
可以这样写:
import ProjectBuild._
lazy val root = (project in file(".")).settings(ProjectBuild.buildSettings : _*)
然后,你可以调用你的正确sbt mySuperDuperCommand
。
希望它有帮助!
答
你行
lazy val mySuperDuperCommand := { ... do *amazing* stuff ... }
是错误的。 :=
是一个创建SettingDefinition的函数。改行
lazy val mySuperDuperCommand: Def.SettingsDefinition = {
mySuperDuperTaskKey := { ... do *amazing* stuff ... }
}
它应该工作。
您是否尝试在项目目录下找到mySuperDuperCommands.sbt? – P3trur0
@ P3trur0我得到错误:未找到:值mySuperDuperCommand – gurghet