sbt - teclas - propiedades del sistema windows 10
¿Cómo establecer las propiedades del sistema para runMain en la línea de comandos? (3)
¿Cómo puedo establecer una propiedad del sistema para runMain
al ejecutarlo desde la línea de comando en Windows?
Me gustaría poder ejecutar el siguiente comando:
sbt -Dconfig.resource=../application.conf "runMain akka.Main com.my.main.Actor"
Independientemente de si el fork
es verdadero, si lo pongo en SBT_OPTS
, o cómo lo SBT_OPTS
, no puedo lograrlo. Estoy familiarizado con ambos Establecer el valor de configuración en la línea de comandos cuando no se define ningún valor predeterminado en la compilación? y Establecer las propiedades del sistema con "sbt run" pero no responder mi pregunta.
Otras preguntas parecen indicar que ni siquiera puede ver fácilmente los argumentos de invocación de Java en SBT. Cualquier ayuda es apreciada.
Esto funciona:
sbt ''; set javaOptions += "-Dconfig.resource=../application.conf" ; runMain akka.Main com.my.main.Actor''
Si esta no es una sintaxis "amigable", envuélvala en un pequeño script de shell.
(Tenga en cuenta que esto supone que tiene el fork
configurado en verdadero para ejecutar. Si no lo hace, vea el comentario de akauppi).
Podría usar la configuración envVars
. Sin embargo, no estoy seguro de lo idiomático que es en SBT.
> help envVars
Environment variables used when forking a new JVM
El siguiente build.sbt
(muy minimalista) funcionó bien.
fork := true
envVars := Map("msg" -> "hello")
Una vez que lo ejecutas, configurar envVars
a cualquier valor con set
hace el truco.
> help set
set [every] <setting-expression>
Applies the given setting to the current project:
1) Constructs the expression provided as an argument by compiling and loading it.
2) Appends the new setting to the current project''s settings.
3) Re-evaluates the build''s settings.
This command does not rebuild the build definitions, plugins, or configurations.
It does not automatically persist the setting(s) either.
To persist the setting(s), run ''session save'' or ''session save-all''.
If ''every'' is specified, the setting is evaluated in the current context
and the resulting value is used in every scope. This overrides the value
bound to the key everywhere.
Tengo una aplicación simple para ejecutar.
$ sbt run
[info] Set current project to fork-testing (in build file:/C:/dev/sandbox/fork-testing/)
[info] Running Hello
[info] hello
Con la configuración de envVars
modificada en la línea de comando, la salida cambiará de la siguiente manera:
$ sbt ''set envVars := Map("msg" -> "Hello, Chad")'' run
[info] Set current project to fork-testing (in build file:/C:/dev/sandbox/fork-testing/)
[info] Defining *:envVars
[info] The new value will be used by *:runner, compile:run::runner and 1 others.
[info] Run `last` for details.
[info] Reapplying settings...
[info] Set current project to fork-testing (in build file:/C:/dev/sandbox/fork-testing/)
[info] Running Hello
[info] Hello, Chad
runMain
no es diferente de run
en este caso.
$ sbt ''set envVars := Map("msg" -> "Hello, Chad")'' ''runMain Hello''
[info] Set current project to fork-testing (in build file:/C:/dev/sandbox/fork-testing/)
[info] Defining *:envVars
[info] The new value will be used by *:runner, compile:run::runner and 1 others.
[info] Run `last` for details.
[info] Reapplying settings...
[info] Set current project to fork-testing (in build file:/C:/dev/sandbox/fork-testing/)
[info] Running Hello
[info] Hello, Chad
Si está tratando de establecer las propiedades de SBT, como la configuración del complemento, entonces lo anterior no funcionará (AFAICT) a partir de 0.13+
en mi experiencia. Sin embargo, lo siguiente sí funcionó, al tratar de pasar la configuración de Liquibase, como la contraseña, desde nuestros marcos CI.
En tu build.sbt
Feo, pero proporciona los valores predeterminados y, opcionalmente, toma de System.properties . De esta forma, tiene cubiertos sus casos predeterminados y de anulación.
def sysPropOrDefault(propName:String,default:String):String = Option(System.getProperty(propName)).getOrElse(default)
liquibaseUsername := sysPropOrDefault("liquibase.username","change_me")
liquibasePassword := sysPropOrDefault("liquibase.password","chuck(/)orris")
Desde la línea de comando
Ahora solo anule via -Dprop=value
como lo haría con Maven u otros programas de JVM. Nota accesorios aparecen antes tarea SBT.
sbt -Dliquibase.password="shh" -Dliquibase.username="bob" liquibase:liquibase-update