2017-10-11 71 views
1

我正在嘗試向我的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

回答

2

如果你喜歡留在一個單一的構建文件,然後,在你的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

1

你行

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

是錯誤的。 :=是一個創建SettingDefinition的函數。改行

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

它應該工作。