2016-08-06 46 views
2

Wenn in Sbt, ist es möglich, eine andere Konfigurationsdatei zu übergeben?Wie übergibt man eine andere Konfigurationsdatei während der Ausführung von sbt?

sbt run 

, dass die Standard-Konfigurationsdatei application.conf

Ich mag zwischen verschiedenen Konfigurationsdateien während der Entwicklung der Lage sein, wechseln verwenden, wie kann ich passiere dies als Argument, während im Innern des sbt.

+2

Wenn Sie die Parameter bedeuten vorbei, bevor sb läuft t, das wäre 'sbt" run -Dconfig.resource = application.test.conf "'. Wenn du meinst während du in der sbt Konsole bist, müsste ich mehr graben. –

Antwort

1

Sie können das Flag -D verwenden, um bestimmte Eigenschaften in Ihren Konfigurationsdateien zu überschreiben. Dies ist seit Version 1.0.1 afaik verfügbar. Beispiel:

sbt run -D akka.cluster.seed-nodes=["akka.tcp://[email protected]:2552", "akka.tcp://[email protected]:2552"]

Dies würde ersetzen, was Wert application.conf für gilt:

akka { 
    cluster { 
    seed-nodes = ["", "", /// etc] 
    } 
} 

Alternativ, wenn Sie die gesamte Konfiguration außer Kraft zu setzen, etwas zu tun wie folgt aus:

val runtimeMxBean = ManagementFactory.getRuntimeMXBean 
val arguments = runtimeMxBean.getInputArguments.asScala.toList 

val config = arguments.find(_.contains("config.path")) match { 
    case Some(value) => { 
    val opt = value.split("=") 
    if (Files.exists(opt.last)) { 
    ConfigFactory.load(opt.last) 
    } else { 
    ConfigFactory.load("application.conf") 
    } 
    case None => ConfigFactory.load("application.conf") 
} 
  • Übergeben Sie den Dateipfad Führen Sie Ihre Konfigurationsdatei mit -D, wie config.path=....
  • Wenn Sie die Konfiguration laden, müssen Sie z. B. prüfen, ob ein Laufzeitargument vorhanden ist, das den Dateipfad angibt, prüfen, ob die Datei vorhanden ist, und diese Datei stattdessen laden.
0

kann auch -D verwenden, um die externen resources Ordner in sbt, Beispiel (add in build.sbt, wenn die Verwendung Modul, das auch in dem Modul hinzugefügt werden soll) hinzuzufügen:

val myResourceDirectory = Option(System.getProperty("myResourceDirectory")).getOrElse("hello_world") 
unmanagedResourceDirectories in Compile += baseDirectory.value/myResourceDirectory 

add spezifische myResourceDirectory in unmanagedResourceDirectories, so dass die Nutzung vielleicht wie:

sbt -DmyResourceDirectory=myfolder/local //local 
sbt -DmyResourceDirectory=myfolder/dev //dev 
sbt -DmyResourceDirectory=myfolder/prod //prod 
+0

was meinst du wenn ich Modul benutze? – Blankman

+1

@Blankman, meine mein, wenn Sie Submodul in Ihrem Projekt verwenden, und Sie auch 'myResourceDirectory' in Ihrem Submodul anwenden möchten, müssen Sie' unmanagedResourceDirectories in Compile + = baseDirectory.value/myResourceDirectory' auch in Ihren Submoduleinstellungen hinzufügen. – chengpohi