scala - 命令行参数不适用于 sbt 程序集 jar

标签 scala sbt sbt-assembly typesafe-config

我正在尝试将命令行参数传递给使用 sbt-assemble 创建的 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 中加载新配置。我怎样才能让它完全从外部加载(绝对路径不起作用)?

最佳答案

(从评论中提取答案)

JVM 选项(例如 -D)必须位于 -jar 之前

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

关于scala - 命令行参数不适用于 sbt 程序集 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31276537/

相关文章:

scala - 在 Scala 中,如何获取 XML 节点的文本而不获取其子节点的文本?

依赖自身构建的sbt插件

scala - 如何检测当前项目是否是 sbt 动态任务内部的根项目?

scala - 如何在最终的 sbt 程序集插件中排除 jar

scala - 如何在Scala中将takeWhile与迭代器一起使用

scala - SBT 集成测试设置

deployment - 如何使用 sbt 和 sbt-release 发布胖 JAR(具有依赖项的 JAR)?

scala - sbt 排除 'exclude' 的工件

scala - Liftweb - 访问获取/发布参数

java - 如何将 google-api-services-datastore-protobuf 与 SBT 或 Maven 一起使用?