2012-04-14 11 views
15

Ich benutze eine ziemlich neue Version von SBT (scheint schwer herauszufinden, was die Version ist). Ich möchte mit sbt run Systemeigenschaften auf meine Anwendung zu übergeben, wie folgt:Einstellen der Systemeigenschaften mit "sbt run"

sbt -Dmyprop=x run 

Wie könnte ich das tun?

Antwort

16

Der SBT-Runner erstellt normalerweise keine neuen Prozesse, daher müssen Sie ihm dies auch mitteilen, wenn Sie die übergebenen Argumente festlegen möchten. Sie können so etwas zu Buildeinstellungen hinzufügen:

fork := true 

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

Es genauer ist auf Prozesse in the SBT documentation gabeln.

+0

Wie könnten Sie tun dies in der Befehlszeile w/den Fahrbefehl? –

+1

Tschad hat dies als eine separate Frage über http://StackOverflow.com/Questions/21389392/ –

8

fand ich die beste Art und Weise, diese zu build.sbt wird:

// 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") 
} 

ähnliche Werke: Wenn dies tut die Typesafe-Konfiguration zu ändern, (mein Anwendungsfall) geladen wird, muss man auch manuell den Standard gehört zu Konfig. Dafür war die empfohlene include "application" Typesafe Konfiguration nicht genug aber include classpath("application.conf") arbeitete. Dachte daran zu erwähnen, da einige andere vielleicht genau aus dem gleichen Grund die Systemeigenschaften übersteuern wollen.

Quelle: discussion auf der sbt Mailingliste

+0

gestellt Stellt sich heraus, dass "einige andere" ich selbst war, nur 8 Tage später. Hatte es irgendwie geschafft, den 'classpath()' Teil verloren zu haben. Grund # 1 für StackOverflow-Einträge soll als Erinnerung für uns selbst dienen ... – akauppi

+1

Hinweis: Aus irgendeinem Grund funktioniert das nicht mehr, wenn man es separat für 'in Test' an anderer Stelle in build.sbt definieren will. Alles in allem scheint die Verwendung von 'initialize' im besten Fall halb-dokumentiert zu sein, also gehe ich zu dem 'fork: = true'-Ansatz, den Luke Taylor vorschlägt. – akauppi

+0

das ist eine Schande, wie ich Ihren Ansatz bevorzugt. Forkest du nach dem Setzen von 'javaOptions' noch eine separate JVM? –

4

Dank für den Zeiger, dies tatsächlich half mir etwas verwandtes Problem zu lösen mit Scala-Tests.

Es stellte sich heraus, dass sbttut die Tests Gabel, wenn es Teilprojekte (siehe meine code) und einige der Tests fehlschlagen, die Systemeigenschaft aufzuheben.

So in sbt -Dsomething="some value" test, würden einige der Tests fehlschlagen, wenn andernfalls something in den Systemeigenschaften zu finden (die meine DB URI, so dass es irgendwie wichtig! Passiert sein)

Dies wurde mich verrückt, so dass ich Ich dachte, ich würde es hier für die zukünftige Referenz für andere posten (wie @akauppi richtig angemerkt hat, sind die Chancen hoch, dass "andere" mir vielleicht in ein paar Wochen sein werden!).

Das Update war folgendes build.st hinzuzufügen:

fork in Test := false

Verwandte Themen