在sbt中添加依赖项时,使用版本号重用属性

时间:2012-05-01 15:20:35

标签: scala build dependencies sbt

我有一个用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]而String是预期的。在SettingKey上有方法get(...)evaluate(...),但它们需要传递一些Setting [Scope]参数。

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

4 个答案:

答案 0 :(得分:6)

您需要告诉系统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 }

答案 1 :(得分:3)

libraryDependencies <+= scalaVersion("org.scala-lang" % "scala-swing" % _)

<告诉SBT您的设置依赖于其他设置。

+告诉SBT您要添加另一个值,而不是替换现有值(同时,它表示该设置的内容是一个序列,并且您要向其添加一个元素)。< / p>

语法setting(function)function(setting)相同,其中function将在适当的上下文中评估的设置作为参数。我甚至不知道如何写它,它会非常冗长,所以快捷方式非常有用。

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

PS:以下内容可能也有效,而且它有点短,但从2.10.0开始不使用特殊的编译器标志而弃用。

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

这样的东西
libraryDependencies <+= scalaVersion { v => "org.scala-lang" % "scala-swing" % v}

应该有用。