2012-04-14 13 views
15

Estoy usando una versión bastante reciente de SBT (parece ser difícil averiguar cuál es la versión). Quiero pasar propiedades del sistema para mi aplicación con sbt run de la siguiente manera:Establecer las propiedades del sistema con "sbt run"

sbt -Dmyprop=x run 

¿Cómo podría hacer eso?

Respuesta

16

El corredor de SBT normalmente no crea nuevos procesos, por lo que también debe indicarle que haga esto si desea establecer los argumentos que se pasan. Puede añadir algo como esto a los valores de creación:

fork := true 

javaOptions := Seq("-Dmx=1024M") 

Hay más detalles sobre los procesos que se bifurcan en the SBT documentation.

+0

¿Cómo podría hacer esto en la línea de comandos w/la orden de marcha? –

+1

Chad ha formulado esta pregunta por separado en http://stackoverflow.com/questions/21389392/ –

8

He encontrado la mejor manera de estar agregando esto a build.sbt:

// important to use ~= so that any other initializations aren't dropped 
// the _ discards the meaningless() value previously assigned to 'initialize' 
initialize ~= { _ => 
    System.setProperty("config.file", "debug.conf") 
} 

relacionadas: Al realizar esta operación para cambiar la configuración de Typesafe que se carga (mi caso de uso), es necesario incluir también manualmente el valor por defecto config. Para esto, la configuración Typesafe sugerida include "application" no fue suficiente, pero include classpath("application.conf") funcionó. Se pensó mencionar ya que algunos otros pueden estar deseando anular las propiedades del sistema por la misma razón.

Fuente: discussion en la lista de correo SBT

+0

Resulta que 'otro' fui yo mismo, solo 8 días después. Había logrado de algún modo obtener la parte 'classpath()' perdida. La razón # 1 para las entradas de StackOverflow es servir como un recordatorio para nosotros mismos ... – akauppi

+1

Nota: Por alguna razón, esto ya no funciona si uno quiere definirlo por separado para 'en prueba' en otro lugar en build.sbt. En general, el uso de "inicializar" parece estar semi-documentado en el mejor de los casos, así que me inclino por el enfoque "tenedor: = verdadero" que sugiere Luke Taylor. – akauppi

+0

es una pena ya que preferí su enfoque. ¿Todavía bifurcas una JVM separada después de configurar 'javaOptions'? –

4

Gracias por el puntero, esto realmente me ayudó a resolver un problema de alguna manera relacionado con las pruebas de Scala.

Resultó que sbthace horquilla las pruebas cuando hay sub-proyectos (véase mi code) y algunas de las pruebas fallan para recoger la propiedad del sistema.

Así que en sbt -Dsomething="some value" test, algunas de las pruebas podría fallar al no encontrar something en las propiedades del sistema (que pasó a ser mi DB URI, por lo que poco importaba!)

Esto me estaba volviendo loco, por lo que pensé en publicarlo aquí para referencia futura para otros (como @akauppi señaló correctamente, ¡hay muchas posibilidades de que "otros" pueda ser yo en unas pocas semanas!).

La solución fue añadir lo siguiente a build.st:

fork in Test := false

Cuestiones relacionadas