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

时间:2017-10-11 13:10:09

标签: scala sbt sbt-native-packager sbt-release

我正在尝试向我的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。如何解决这个问题?

2 个答案:

答案 0 :(得分: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

希望它有所帮助!

答案 1 :(得分:1)

你的行

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

错了。 :=是一个创建SettingDefinition的函数。将行更改为

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

它应该有用。