2015-07-20 31 views
2

考慮下面的「主」應用程序:傳遞命令行參數到SBT的設置類型安全配置鍵值

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中傳遞命令行參數的標準方式嗎?

+0

[SBT:啓動非默認項目的主類的命令行'run']的可能重複(http://stackoverflow.com/questions/7674615/sbt-start-a-command-line-運行一個非默認項目的主類) –

+0

但我不知道如何通過'-Dkey = value'命令行設置'app.bar'爲一個值論據。 @ChrisMartin可以用這種方法嗎? –

回答

2

取決於你的意思與標準。據我所知,這是傳遞參數「標準」的方式:

$ sbt "run --bippy" 

你的例子基本上都採用了來自結合環境變量application.conf定義類型安全配置功能。 Here's a tutorial

+0

我可以使用這種方法來爲我的'application.conf'設置'app.bar'嗎?如果是這樣,你能告訴我嗎? –

+0

Kevin,你的代碼明確地從'application.conf'中讀取。如果你想測試'--bippy'的存在,那麼你必須偷看'args',比如'if(args.exists(_ ==「--blippy」))doStuff'。 –

+0

但是,是不是我上面的示例顯示,雖然我從類型安全配置閱讀,app.bar'是基於命令行參數設置,即$ sbt測試:運行-DBAR = bippy'將'app.bar'分配給'bippy'? –