Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala sbt-添加在build.sbt外部定义的任务键_Scala_Sbt - Fatal编程技术网

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