【问题标题】:Passing Command-Line Arguments to SBT for Setting TypeSafe Config Key-Value将命令行参数传递给 SBT 以设置 TypeSafe Config Key-Value
【发布时间】:2015-07-21 05:30:37
【问题描述】:

鉴于以下“主要”应用:

package net

import com.typesafe.config.ConfigFactory

object Main extends App {
    override def main(args: Array[String]) {
        val x = ConfigFactory.load().getString("app.bar")
        println(s"x: $x")
    }
}

application.conf:

app {
    bar = ${?BAR}
}

我可以通过以下方式传入命令行参数:

$sbt test:run -DBAR=bippy
[info] Set current project to typesafe_config_env_var 
    (in build file:.../typesafe_config_env_var/)
[info] Running net.Main 
x: bippy

我编写了这个简单的示例来尝试重现 problem 解析命令行参数。但是,如上面的输出所示,此测试成功。

这是在 sbt 中传递命令行参数的标准方式吗?

【问题讨论】:

标签: scala sbt


【解决方案1】:

取决于您对标准的含义。 AFAIK,这是传递参数的“标准”方式:

$ sbt "run --bippy"

您的示例基本上使用了类型安全配置中的一项功能,该功能将环境变量绑定到application.conf 定义。 Here's a tutorial

【讨论】:

  • 我可以使用这种方法来设置app.bar 每个我的application.conf 吗?如果是这样,你能告诉我吗?
  • Kevin,您的代码明确地从application.conf 读取。如果你想测试--bippy 的存在,那么你必须偷看args,比如if (args.exists(_ == "--blippy")) doStuff
  • 但是,我上面的例子不是表明,虽然我从类型安全配置中读取,app.bar 是基于命令行参数设置的,即$sbt test:run -DBAR=bippy 分配@987654332 @到bippy?
  • -DBAR=bippy 将环境变量BAR 设置为bippy,仅此而已。然后,在application.conf 中,bar = ${?BAR} 行将app.bar 设置为环境变量BAR 设置的任何值。您似乎在传递参数,而实际上您只是在做与export BAR=bippy && sbt test:run 等效的操作。
  • 你能想出命令行中忽略环境变量的任何原因吗?
猜你喜欢
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2017-10-22
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多