sbt - 添加在 build.sbt 之外定义的任务键
sbt - Adding a task key defined outside of build.sbt
如果我在 build.sbt
文件之外将 SBT 任务密钥定义为项目文件夹中的 Scala class,我该如何导入该任务
所以在 ./project/MyTask.scala 我有;
import sbt.Keys._
import sbt._
object MyTask {
lazy val uname = settingKey[String]("Your name")
lazy val printHi = taskKey[Unit]("print Hi")
printHi := { println(s"hi ${name.value}") }
}
然后在./build.sbt我有;
import MyTask._
uname := "Joe"
然后当我 运行 sbt printHi
时,我得到一个错误,说找不到任务。 运行 show uname
也有效。当我直接在 build.sbt 中定义 printHi 而没有对象导入时,一切都按预期工作。
我需要以某种方式将此任务添加到 build.sbt 文件中。我该怎么做?
问题是您的表达式 printHi := { println(s"hi ${name.value}") }
没有关联到任何东西。
首先,sbt 中的所有内容都是一个转换,在本例中 (:=
) 覆盖任何先前设置的 printHi
到您给出的定义 (println(s"hi ${name.value}")
)。但是,通过不将该表达式(它是一个 Setting[Task[Unit]]
)与任何东西(例如一个项目,或者作为一个值附加到一个项目)相关联,它只是在 [=17= 的构造中被评估] 对象,然后扔掉。
一种方法是将该设置 (printHi := println(s"hi ${name.value}")
) 放入 Seq[Setting[_]]
中,然后将其拉入 build.sbt
:
project/MyTask.scala
import sbt._, Keys._
object MyTask {
val printHi = taskKey[Unit]("prints Hi")
val myTaskSettings = Seq[Setting[_]](
printHi := println(s"hi ${name.value}")
)
}
build.sbt
import MyTask._
myTaskSettings
另一种方法是将 MyTask
定义为 project/
中的迷你插件。您可以在 PgpCommonSettings.
中查看示例
如果我在 build.sbt
文件之外将 SBT 任务密钥定义为项目文件夹中的 Scala class,我该如何导入该任务
所以在 ./project/MyTask.scala 我有;
import sbt.Keys._
import sbt._
object MyTask {
lazy val uname = settingKey[String]("Your name")
lazy val printHi = taskKey[Unit]("print Hi")
printHi := { println(s"hi ${name.value}") }
}
然后在./build.sbt我有;
import MyTask._
uname := "Joe"
然后当我 运行 sbt printHi
时,我得到一个错误,说找不到任务。 运行 show uname
也有效。当我直接在 build.sbt 中定义 printHi 而没有对象导入时,一切都按预期工作。
我需要以某种方式将此任务添加到 build.sbt 文件中。我该怎么做?
问题是您的表达式 printHi := { println(s"hi ${name.value}") }
没有关联到任何东西。
首先,sbt 中的所有内容都是一个转换,在本例中 (:=
) 覆盖任何先前设置的 printHi
到您给出的定义 (println(s"hi ${name.value}")
)。但是,通过不将该表达式(它是一个 Setting[Task[Unit]]
)与任何东西(例如一个项目,或者作为一个值附加到一个项目)相关联,它只是在 [=17= 的构造中被评估] 对象,然后扔掉。
一种方法是将该设置 (printHi := println(s"hi ${name.value}")
) 放入 Seq[Setting[_]]
中,然后将其拉入 build.sbt
:
project/MyTask.scala
import sbt._, Keys._
object MyTask {
val printHi = taskKey[Unit]("prints Hi")
val myTaskSettings = Seq[Setting[_]](
printHi := println(s"hi ${name.value}")
)
}
build.sbt
import MyTask._
myTaskSettings
另一种方法是将 MyTask
定义为 project/
中的迷你插件。您可以在 PgpCommonSettings.