我有一个使用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.SettingKeyString,而字符串是预期的。SettingKey上有get(...)和evaluate(...)方法,但它们需要传入一些SettingScope参数。
引用此属性的最简单方法是什么?
发布于 2012-05-01 23:31:26
您需要告诉系统libraryDependencies现在依赖于scalaVersion
libraryDependencies <+= (scalaVersion) { sv => "org.scala-lang" % "scala-swing" % sv }(这是我喜欢的格式;它实际上是调用scalaVersion上的apply方法,所以您可以用几种不同的方式编写它,例如scalaVersion("org.scala-lang" % "scala-swing" % _)。)
如果你有多个你想要同时依赖的设置,你可以在它们的元组上应用:
foo <<= (scalaVersion, organization) { (sv, o) => o + " uses Scala " + sv }发布于 2012-05-03 05:59:33
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" %)发布于 2016-11-08 00:22:40
意识到这是陈旧的--添加一个答案,以防其他人遇到它。只需将.value添加到scalaVersion变量即可获得字符串值:
libraryDependencies += "org.scala-lang" % "scala-swing" % scalaVersion.valuehttps://stackoverflow.com/questions/10399864
复制相似问题