我有一个用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]参数。
引用此属性的最简单方法是什么?
答案 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}
应该有用。