gpt4 book ai didi

sbt - 将设置提取到顶级 val

转载 作者:行者123 更新时间:2023-12-05 06:36:32 27 4
gpt4 key购买 nike

给定:

resourceGenerators in Compile += Def.task {
val jar = (update in Compile).value
.matching((_: ModuleID) == nemesisProto)
.head
IO.unzip(jar, (resourceManaged in Compile).value / "protobuf").toSeq
}.taskValue

PB.protoSources in Compile := Seq((resourceManaged in Compile).value / "protobuf")

是否可以将 (resourceManaged in Compile).value/"protobuf" 重构到一个公共(public)位置?

我尝试将它分配给一个 val:

val protobufResourceFile = (resourceManaged in Compile).value / "protobuf"

resourceGenerators in Compile += Def.task {
val jar = (update in Compile).value
.matching((_: ModuleID) == nemesisProto)
.head
IO.unzip(jar, protobufResourceFile).toSeq
}.taskValue

PB.protoSources in Compile := Seq(protobufResourceFile)

只得到如下错误:

 error: `value` can only be used within a task or setting macro, such as :=, +=, ++=, Def.task, or Def.setting.
val protobufResourceFolder = (resourceManaged in Compile).value / "protobuf"
^

最佳答案

差不多。正如错误消息所述,您根本无法解包 sbt dsl 之外的值。所以,像这样的事情通常使用 SettingKey 来完成:

val protobufResourceFile = settingKey[File]("Protobuf resource file ...")

protobufResourceFile := (resourceManaged in Compile).value / "protobuf"

resourceGenerators in Compile += Def.task {
val jar = (update in Compile).value
.matching((_: ModuleID) == nemesisProto)
.head
IO.unzip(jar, protobufResourceFile.value).toSeq
}.taskValue

PB.protoSources in Compile := Seq(protobufResourceFile.value)

不过,在这种特定情况下,它可能有点矫枉过正。

关于sbt - 将设置提取到顶级 val,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49016705/

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