2012-05-01 14 views
6

Tengo un proyecto creado con sbt 0.11. Estoy tratando de crear una interfaz de usuario sencilla, con Scala oscilación, por lo que lo primero es añadir una dependencia de Scala-swing en mi build.sbt:Reutilizar la propiedad con el número de versión al agregar una dependencia en sbt

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

Pero tengo una scalaVersion SettingKey definido:

scalaVersion := "2.9.1-1" 

¿Cómo puedo hacer referencia a esa propiedad? Si trato de usarlo como

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

compilador se queja de que se encontró sbt.SettingKey [String] mientras que se espera de cadena. Hay métodos get(...) y evaluate(...) en SettingKey pero requieren un cierto ajuste de parámetros [Alcance] para ser aprobada en.

¿Cuál es la forma más sencilla simplemente referencia a esta propiedad?

Respuesta

6

es necesario decirle al sistema que libraryDependencies depende ahora scalaVersion:

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

(que es mi formato preferido, se trata en realidad de invocar el método apply en scalaVersion por lo que podría escribir un par de maneras diferentes, por ejemplo, . scalaVersion("org.scala-lang" % "scala-swing" % _))

Si tuviera múltiples configuraciones que quería depender al mismo tiempo, que le aplican en la tupla de ellos:

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

Gracias por decirle a las alternativas. Siempre siento que SBT es demasiado complicado. –

0

Algo así como

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

debería funcionar.

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

El < dice que la configuración de SBT tiene una dependencia en otro entorno.

El + le dice a SBT que desea agregar otro valor, no reemplazar los existentes (también, indica que el contenido de la configuración es una secuencia, y le está agregando un elemento).

La sintaxis setting(function) es la misma que function(setting), donde function toma una configuración evaluada en el contexto adecuado como parámetro. Ni siquiera sé cómo escribir eso, y sería muy detallado, por lo que el atajo es muy útil.

También se puede usar (setting 1, setting 2)((a, b) => ...) para realizar dependencias en múltiples configuraciones.

PD: El siguiente podría funcionar también, y es un poco más corto, pero se ha desaprobado sin indicadores de compilación especiales desde 2.10.0.

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

darse cuenta de esto es viejo - la adición de una respuesta en caso de que alguien más le llega a través de ella.Sólo tiene que añadir .value a la variable scalaVersion para obtener el valor de la cadena:

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