1

I'm trying to add a new command to my sbt.

In my build.sbt I have

lazy val root = (project in file(".")).settings(mySuperDuperCommand)

In a sibling file mySuperDuperCommands.sbt I have

lazy val mySuperDuperTaskKey = TaskKey[Unit]("mySuperDuperCommand")

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

It gives me the error cannot resolve symbol "mySuperDuperCommand" inside build.sbt. How to solve this conondrum?

4

2 回答 2

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.

希望能帮助到你!

于 2017-10-11T14:20:12.930 回答
1

你的线路

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

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

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

它应该可以工作。

于 2017-10-11T14:39:49.593 回答