2015-07-07 10 views
5

Ich versuche, Befehlszeilenargumente an meine mit sbt-assembly erstellte JAR zu übergeben. Keines dieser -Dconfig.file=application.conf noch -Dconfig.trace=loadsBefehlszeilenargumente, die nicht für sbt-assembly jars funktionieren

Mein genaue Befehl ist

java -jar googleScraper-assembly-0.0.1.jar -Dconfig.trace=loads -Dconfig.resource=application.conf

Das ist mein build.sbt

lazy val googleScraper = project.in(file("google-data-scraper")) 
    .settings(commonSettings:_*) 
    .settings(
    version := "0.0.1", 
    assemblyMergeStrategy in assembly := { 
     case m if m.toLowerCase.endsWith("manifest.mf") => MergeStrategy.discard 
     case m if m.toLowerCase.matches("meta-inf.*\\.sf$") => MergeStrategy.discard 
     case "log4j.properties" => MergeStrategy.discard 
     case m if m.toLowerCase.startsWith("meta-inf/services/") => MergeStrategy.filterDistinctLines 
     case "reference.conf" => MergeStrategy.concat 
     case "application.conf" => MergeStrategy.concat 
     case _ => MergeStrategy.first 
    }, 
    libraryDependencies ++= Seq(
     "com.typesafe" % "config" % "1.3.0", 
     "com.typesafe.play" % "play_2.11" % "2.3.9", 
     "com.typesafe.play" % "play-ws_2.11" % "2.3.9", 
     "com.ning" % "async-http-client" % "1.8.15" 
    ), 
    fork in run := true 
) 
    .dependsOn("util") 
    .dependsOn("core") 

bearbeiten

So stellt sich heraus, dass das Argument setzen bevor der -jar einen Unterschied macht. Dies funktioniert jetzt:

java -Dconfig.trace=loads -Dconfig.resource=blah.conf -jar googleScraper-assembly-0.0.1.jar

aber nun das Laden zeigt an, dass die App versucht, die neue Konfiguration aus dem JAR zu laden. Wie kann ich es komplett extern laden lassen (absoluter Pfad hat nicht funktioniert)?

+0

Was ist die genaue Befehlszeile, die Sie verwenden, um das auszuführen? Wenn es nicht funktioniert, woher weißt du (was wird ausgegeben?) Wie sieht der Code zum Laden der Config in der App aus (ConfigFactory.load() ohne Parameter oder etwas Komplexeres?) –

+0

meinst du? config.resource statt config.file vielleicht? –

+0

Danke! Hinzugefügt die genaue Befehlszeile. Die Ausgabe ist entweder, dass sie die Ressourcendatei nicht findet (wenn ich sie ausschließe), oder sie verwendet nicht die Überschreibungen, wenn ich eine in das Jar eingebettet habe. Ich bekomme keine Trace-Nachrichten. Mein Ladecode ist nur faul ConfigFactory.load(). Ich habe sowohl config.file und config.resource ausprobiert, aber keinen Unterschied machen –

Antwort

14

(Extrahieren Antwort aus den Kommentaren)

JVM-Optionen wie -D muss vor -jar

config.file eine externe Datei und config.resource ist eine Ressource auf dem Classpath.

+1

Ehrfürchtig. java -Dconfig.file = blah.conf -jar googleScraper-assembly-0.0.1.jar hat funktioniert! –

+0

Dank dieser Antwort viel Zeit gespart! –

+0

Ich habe die gleichen Probleme! Selbst nachdem ich genau das getan habe, was hier gesagt wurde, konnte ich das nicht funktionieren! Hier ist, was ich tue: http://stackoverflow.com/questions/43983335/scala-standalone-jar-with-a-conf-folder – sparkr

Verwandte Themen