3

我正在编写一个需要特定设置的插件: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://..../..."
4

1 回答 1

9

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

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

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

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

(根据您的外壳的需要引用)。将此值拉入设置:

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

"<default>"如果未设置系统属性,则要使用的值在哪里。如果你采取这种Option方法,

MyPlugin.configUrl := 
  for(u <- Option(System.getProperty("config.url"))) yield
    url(u)
于 2013-06-06T16:31:06.053 回答