如何禁用Scopt的"未知选项"异常?

wro*_*ame 1 scala command-line-arguments scopt

我有一个基本的Config案例类,它被用作几个不同脚本的Configs的通用部分.我希望能够为解析此基本配置的OptionParsers停止复制粘贴代码(例如,每个脚本都需要--cluster,--port因此我希望单个基础OptionParser始终处理这个问题),并让最小的自定义OptionParser处理每个脚本独有的选项(例如--asdf).

问题是,如果我要求基本解析器解析包含的参数--asdf,Scopt抱怨:

[error] Error: Unknown option --asdf
[error] Usage: Config [options]
[error]
[error]   -c <value> | --cluster <value>
[error]         Cluster the machine is part of
[error]   -p <value> | --port <value>
[error]         Port to listen on
...
[error] Exception in thread "main" java.util.NoSuchElementException: None.get
Run Code Online (Sandbox Code Playgroud)

有没有办法让它忽略未知的参数?

wro*_*ame 6

定义自定义时OptionParser,只需添加一个

override def errorOnUnknownArgument = false
Run Code Online (Sandbox Code Playgroud)

进入定义.例如,

def optionParser = new OptionParser[CustomConfig]("Config") {
    override def errorOnUnknownArgument = false

    opt[String]('a', "asdf") optional () action { (x, c) =>
      c.copy(asdf = x)
    } text "Do something custom"
    ...
  }
Run Code Online (Sandbox Code Playgroud)