如何在 sbt 中添加自定义命令?

How to add a custom command in 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 ... }

它给我 build.sbt 里面的错误 cannot resolve symbol "mySuperDuperCommand"。如何解决这个难题?

如果您喜欢使用单个构建文件,那么在您的 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 ... }
}

它应该可以工作。