Аргументы командной строки не работают для банок sbt-assembly

Я пытаюсь передать аргументы командной строки в свой JAR, созданный с помощью sbt-assembly. Ни один из этих -Dconfig.file=application.conf и -Dconfig.trace=loads

Моя точная команда

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

Это моя сборка.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")

Изменить

Получается, что размещение аргумента перед -jar приводит к другому результату. Теперь это работает:

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

но теперь загрузка указывает на то, что приложение пытается загрузить новую конфигурацию из JAR. Как я могу загрузить его полностью извне (абсолютный путь не работает)?


person Greg R    schedule 07.07.2015    source источник
comment
какую именно командную строку вы используете для запуска? Когда это не работает, как узнать (что выводится?) Как выглядит код для загрузки конфигурации внутри приложения (ConfigFactory.load() без параметров или что-то более сложное?)   -  person Havoc P    schedule 07.07.2015
comment
вы имеете в виду config.resource вместо config.file, может быть?   -  person Havoc P    schedule 07.07.2015
comment
Спасибо! Добавлена ​​точная командная строка. Вывод: либо он не находит файл ресурсов (когда я его исключаю), либо не использует переопределения, когда он встроен в банку. Я не получаю никаких сообщений трассировки. Мой код загрузки — просто ленивый ConfigFactory.load(). Я пробовал и config.file, и config.resource, но ничего не изменилось.   -  person Greg R    schedule 07.07.2015
comment
попробуйте -Dconfig.trace=loads (проверьте ридми, чтобы убедиться, что я правильно понял), возможно, чтобы увидеть, что он загружает   -  person Havoc P    schedule 08.07.2015
comment
Я уже это включаю. Он не передается. Я не вижу сообщений трассировки.   -  person Greg R    schedule 08.07.2015
comment
о, может быть, переместите -D перед -jar   -  person Havoc P    schedule 08.07.2015
comment
Ха, круто. Не могу поверить, что это сработало. Но теперь есть сообщение об ошибке. Я обновил свой исходный вопрос, чтобы включить его.   -  person Greg R    schedule 08.07.2015
comment
У меня те же проблемы. Ваш файл JAR упакован с файлами conf внутри?   -  person joesan    schedule 15.05.2017


Ответы (1)


(извлечение ответа из комментариев)

Опции JVM, такие как -D, должны стоять перед -jar

config.file — внешний файл, а config.resource — ресурс в пути к классам.

person Havoc P    schedule 08.07.2015
comment
Потрясающий. java -Dconfig.file=blah.conf -jar googleScraper-assembly-0.0.1.jar заработал! - person Greg R; 09.07.2015
comment
У меня такие же проблемы! Даже после того, как я сделал именно то, что было сказано здесь, я не мог заставить это работать! Вот что я делаю: stackoverflow.com/questions/43983335/ - person joesan; 15.05.2017
comment
Это отлично работает для меня. Если я не передам файл конфигурации, он предполагает, что он существует внутри банки. - person Mário Meyrelles; 08.08.2017