Scala sbt-添加在build.sbt外部定义的任务键
如果在Scala sbt-添加在build.sbt外部定义的任务键,scala,sbt,Scala,Sbt,如果在build.SBT文件之外将SBT任务键定义为项目文件夹中的Scala类,如何导入该任务 所以在./project/MyTask.scala中,我有 然后在./build.sbt中我有 然后,当我运行sbt printHi时,我得到一个无法找到任务的错误。运行show uname也可以工作。当我在build.sbt中直接定义printHi而不使用对象导入时,一切正常 我需要以某种方式将此任务添加到build.sbt文件中。我该怎么做?问题是表达式printHi:={println(s“hi
build.SBT
文件之外将SBT任务键定义为项目文件夹中的Scala类,如何导入该任务
所以在./project/MyTask.scala中,我有
然后在./build.sbt中我有
然后,当我运行sbt printHi
时,我得到一个无法找到任务的错误。运行show uname
也可以工作。当我在build.sbt中直接定义printHi而不使用对象导入时,一切正常
我需要以某种方式将此任务添加到build.sbt文件中。我该怎么做?问题是表达式
printHi:={println(s“hi${name.value}”)}
与任何内容都没有关联
首先,sbt中的所有内容都是一个转换,在这种情况下(:=
)会覆盖先前对给定定义(println(s“hi${name.value}”)
的任何设置。但是,通过不将该表达式(它是一个设置[Task[Unit]]
)与任何东西关联(例如与项目关联,或者作为一个值,然后附加到项目),它只会在MyTask
对象的构造中得到评估,然后被丢弃
一种方法是将该设置(printHi:=println(s“hi${name.value}”)
)放入Seq[setting[\u]]
中,然后将其拉入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}")
)
}
构建.sbt
import MyTask._
myTaskSettings
另一种方法是将
MyTask
定义为生活在project/
中的迷你插件。您可以在中看到一个例子。以获得更好的谷歌体验:如何在build.sbt之外的单独文件中定义sbt任务
import sbt._, Keys._
object MyTask {
val printHi = taskKey[Unit]("prints Hi")
val myTaskSettings = Seq[Setting[_]](
printHi := println(s"hi ${name.value}")
)
}
import MyTask._
myTaskSettings