如何在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。如何解决这个问题?

+0

您是否尝试在项目目录下找到mySuperDuperCommands.sbt? – P3trur0

+0

@ P3trur0我得到错误:未找到:值mySuperDuperCommand – gurghet

如果你喜欢留在一个单一的构建文件,然后,在你的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

希望它有帮助!

+0

因此,没有办法把它放在一个单独的文件? – gurghet

+0

是的,在我的例子中,你应该只保留build.sbt。但是,如果您愿意,也可以在两个单独的文件中进行创建。 – P3trur0

你行

lazy val mySuperDuperCommand := { ... do *amazing* stuff ... } 

是错误的。 :=是一个创建SettingDefinition的函数。改行

lazy val mySuperDuperCommand: Def.SettingsDefinition = { 
    mySuperDuperTaskKey := { ... do *amazing* stuff ... } 
} 

它应该工作。