7

我有一个用 sbt 0.11 构建的项目。我正在尝试使用 Scala Swing 创建一个简单的 UI,所以首先是在我的 build.sbt 中添加对 scala-swing 的依赖:

libraryDependencies += "org.scala-lang" % "scala-swing" % "2.9.1-1"

但我定义了一个 SettingKey scalaVersion:

scalaVersion := "2.9.1-1"

我如何引用该属性?如果我尝试像这样使用它

libraryDependencies += "org.scala-lang" % "scala-swing" % scalaVersion

编译器抱怨它在预期字符串时找到了 sbt.SettingKey[String]。SettingKey 上有方法get(...)和方法,evaluate(...)但它们需要传入一些 Setting[Scope] 参数。

仅引用此属性的最简单方法是什么?

4

4 回答 4

5

您需要告诉系统libraryDependencies现在依赖于scalaVersion

libraryDependencies <+= (scalaVersion) { sv => "org.scala-lang" % "scala-swing" % sv }

(这是我的首选格式;它实际上是在调用apply方法,scalaVersion因此您可以用几种不同的方式编写它,例如,scalaVersion("org.scala-lang" % "scala-swing" % _).)

如果您有多个要同时依赖的设置,您将应用它们的元组:

foo <<= (scalaVersion, organization) { (sv, o) => o + " uses Scala " + sv }
于 2012-05-01T15:31:25.583 回答
3
libraryDependencies <+= scalaVersion("org.scala-lang" % "scala-swing" % _)

告诉 SBT 你的<设置依赖于另一个设置。

告诉 SBT 您要添加另一个值,而+不是替换现有值(此外,它表明设置的内容是一个序列,并且您正在向其中添加一个元素)。

语法setting(function)与 相同function(setting),其中function将在适当上下文中评估的设置作为参数。我什至不知道怎么写,而且会很冗长,所以这个快捷方式很有帮助。

也可以(setting 1, setting 2)((a, b) => ... )用来对多个设置进行依赖。

PS:以下可能也有效,并且它有点短,但从 2.10.0 开始,它已被弃用,没有特殊的编译器标志。

libraryDependencies <+= scalaVersion("org.scala-lang" % "scala-swing" %)
于 2012-05-02T21:59:33.227 回答
3

意识到这是旧的 - 添加一个答案以防其他人遇到它。只需添加.valuescalaVersion变量以获取字符串值:

libraryDependencies += "org.scala-lang" % "scala-swing" % scalaVersion.value
于 2016-11-07T16:22:39.510 回答
0

就像是

libraryDependencies <+= scalaVersion { v => "org.scala-lang" % "scala-swing" % v}

应该管用。

于 2012-05-01T15:38:43.083 回答