命令行参数不适用于sbt-assembly jar

时间:2015-07-07 18:28:09

标签: scala sbt sbt-assembly typesafe-config

我正在尝试将命令行参数传递给使用sbt-assembly创建的JAR。这些都不是-Dconfig.file=application.conf也不是-Dconfig.trace=loads

我的确切命令是

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

这是我的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")

修改

事实证明,将参数放在-jar之前会有所不同。这现在有效:

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

但现在加载表明应用程序正在尝试从JAR中加载新配置。如何让它完全从外部加载(绝对路径不起作用)?

1 个答案:

答案 0 :(得分:14)

(从评论中提取答案)

-D之类的JVM选项必须在-jar

之前

config.file是一个外部文件,config.resource是类路径上的资源。