2012-05-01 5 views
6

Ich habe ein Projekt mit sbt 0.11 erstellt. Ich versuche, eine einfache Benutzeroberfläche mit Scala Schaukel zu schaffen, so erste Sache ist, eine Abhängigkeit von scala-Swing in meinem build.sbt hinzuzufügen:Wiederverwendung der Eigenschaft mit Versionsnummer beim Hinzufügen einer Abhängigkeit in sbt

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

Aber ich habe definiert eine SettingKey scalaVersion:

scalaVersion := "2.9.1-1" 

Wie kann ich diese Eigenschaft referenzieren? Wenn ich versuche, es zu benutzen, wie

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

Compiler beschwert sich, dass es gefunden sbt.SettingKey [Zeichenfolge] während String erwartet wird. Es gibt Methoden get(...) und evaluate(...) auf SettingKey, aber sie erfordern einige Setting [Scope] -Parameter, die übergeben werden.

Was ist der einfachste Weg, nur auf diese Eigenschaft verweisen?

Antwort

6

Sie müssen das System, das libraryDependencies jetzt auf scalaVersion abhängig sagen:

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

(dass meine bevorzugte Formatierung ist, es auf scalaVersion die apply Methode tatsächlich ist aufrufen, damit Sie es ein paar verschiedene Möglichkeiten schreiben könnte, zum Beispiel, . scalaVersion("org.scala-lang" % "scala-swing" % _))

Wenn Sie Sie gleichzeitig abhängen wollten mehrere Einstellungen haben, werden Sie auf dem Tupel von ihnen gelten:

foo <<= (scalaVersion, organization) { (sv, o) => o + " uses Scala " + sv } 
+0

Vielen Dank für die Alternativen zu erzählen. Ich habe immer das Gefühl, dass SBT zu kompliziert ist. –

0

So etwas wie

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

sollte funktionieren.

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

Die < teilt SBT mit, dass Ihre Einstellung von einer anderen Einstellung abhängig ist.

Die + sagt SBT, dass Sie einen anderen Wert hinzufügen möchten, nicht die vorhandenen ersetzen (auch, es gibt an, dass der Inhalt der Einstellung eine Sequenz ist, und Sie fügen ein Element hinzu).

Die Syntax setting(function) ist identisch mit function(setting), wobei function eine Einstellung verwendet, die im richtigen Kontext als Parameter ausgewertet wird. Ich weiß nicht einmal, wie ich das schreiben soll, und es wäre sehr ausführlich, also ist die Abkürzung sehr hilfreich.

Man kann auch (setting 1, setting 2)((a, b) => ...) verwenden, um Abhängigkeiten von mehreren Einstellungen zu machen.

PS: Folgendes könnte auch funktionieren, und es ist ein bisschen kürzer, aber es wurde veraltet, ohne spezielle Compilerflags ab 2.10.0.

1

Das zu erkennen ist alt - eine Antwort für den Fall, dass noch jemand darauf stößt. Fügen Sie einfach .value zum scalaVersion Variable den String-Wert zu erhalten:

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