gpt4 book ai didi

scala - sbt - 添加在 build.sbt 之外定义的任务键

转载 作者:行者123 更新时间:2023-12-03 21:34:04 24 4
gpt4 key购买 nike

如果我在 build.sbt 之外定义了 SBT 任务键文件作为项目文件夹中的 Scala 类,我如何导入该任务

所以在 ./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]])与任何东西(例如一个项目,或者作为一个附加到一个项目的值)相关联,它只会在 MyTask 的构造中得到评估。物体,然后扔掉。

一种方法是将该设置( printHi := println(s"hi ${name.value}") )放入 Seq[Setting[_]]然后你拉入 build.sbt :

项目/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 中看到这样的示例。 .

关于scala - sbt - 添加在 build.sbt 之外定义的任务键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29270367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com