【问题标题】:How to add a custom command in sbt?如何在 sbt 中添加自定义命令?
【发布时间】:2018-03-23 04:20:08
【问题描述】:

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

【问题讨论】:

  • 您是否尝试在项目目录下找到 mySuperDuperCommands.sbt?
  • @P3trur0 我收到错误:未找到:值 mySuperDuperCommand

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


【解决方案1】:

如果您想保留单个构建文件,那么您可以在 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。

希望对你有帮助!

【讨论】:

  • 所以没有办法把它放在一个单独的文件中?
  • 是的,在我的示例中,您应该只使用 build.sbt。但是,如果您愿意,也可以将其放在两个单独的文件中。
【解决方案2】:

你的线路

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

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

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

它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-26
    • 2019-06-27
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 2010-12-11
    相关资源
    最近更新 更多