在构建中没有定义默认值时,在命令行上设置设置值?

时间:2013-06-05 12:07:34

标签: sbt

我正在编写一个需要特定设置的插件:configUrl

如果我在build.conf中指定该设置,它将如下所示:

MyPlugin.configUrl := "http://..../..."

然后我可以使用命令行执行此操作:

sbt 'set MyPlugin.configUrl := "http://..../..."' performAction

是否有更好的方法可以让我在构建中没有这个设置?

如果我在没有该设置的情况下启动sbt,则会收到以下错误:

[error] Reference to undefined setting: 
[error] 
[error]   *:config-url from *:application-configuration

我搜索了谷歌但无法找到在命令行上提供设置的方法,如下所示:

sbt config-url="http://..../..."

1 个答案:

答案 0 :(得分:9)

如果设置具有默认值,则应在插件中设置该默认值。如果没有,则类型应为Option[...],默认值为None。通常,构建不应该要求从命令行传递参数以便加载。

最后,如果它主要是您不喜欢的set语法,则可以使用系统属性并从您的设置中读取系统属性。但是,这仅限于字符串,因此您将失去类型安全性。

系统属性可以在命令行上由-Dkey=value设置(直接或在启动脚本中):

sbt -Dconfig.url=http://...

(根据你的shell引用)。要将此值拉入设置:

MyPlugin.configUrl := 
  url(System.getProperty("config.url", "<default>"))

其中"<default>"是未设置系统属性时要使用的值。如果采用Option方法,

MyPlugin.configUrl := 
  for(u <- Option(System.getProperty("config.url"))) yield
    url(u)