【问题标题】:sbt : scalaVersion value inside plugins.sbtsbt : plugins.sbt 中的 scalaVersion 值
【发布时间】:2021-06-08 05:37:18
【问题描述】:

有没有办法在 plugins.sbt 中获取 scalaVersion 设置的值?

我尝试在plugins.sbt 内部执行以下操作:

logLevel := Level.Warn

resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/releases/"
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.7")

val version = scalaVersion.value

这是我得到的错误:

错误:值只能在任务或设置宏中使用,例如:=, +=、++=、Def.task 或 Def.setting。

我想在 plugins.sbt 中实现的是检索 scalaVersion 设置的值并将该值与 addSbtPlugin 一起使用,如下所示:

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.7").filter(_ => version == "2.12")

【问题讨论】:

  • 你能发布整个代码 sn-p 吗?此错误表示您的值声明位置错误。
  • @Ivan Kurchenko ,我更新了问题并发布了整个 plugins.sbt 文件,但我想它只与声明该 val 的特定行有关。如您所见,我直接声明它,而不是在 sbt 任务中,也不是设置
  • 您可以尝试在plugins.sbt 中详细说明您要使用该版本实现的目标。这可能对你有用:stackoverflow.com/q/11768730/2359227
  • @Tomer Shetah ,目标是使用带有 addSbtPlugin 的 scala 版本
  • @Tomer Shetah,我已经更新了我的问题,我描述了我想要实现的目标

标签: scala sbt


【解决方案1】:

此错误表示您无法在任务或设置执行范围之外读取设置值,因此您不应仅声明字段,而应在另一个任务或设置中使用,例如:

lazy val customVersion = settingKey[String]("Custom version for sake of example")

customVersion := {
  //`.value` referenced inside `customVersion` settings declaration, so sbt can evaluate customVersion in scope of other settings/task evaluations.
  "Custom version" + scalaVersion.value
}

【讨论】:

  • 我怎样才能在 plugins.sbt 中检索新的 customVersion 设置的值。我想我会属于第一种情况,因为我不能在任务/设置范围之外使用值。我的目标是检索 scalaVersion,然后将其与 plugins.sbt 中的 addSbtPlugin 一起使用。
  • @Helix112 不是 sbt 添加插件仅适用于某些 Scala 版本吗?
猜你喜欢
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
相关资源
最近更新 更多