Как я могу отключить исключение Scopt "Неизвестные параметры"?

У меня есть базовый класс дел Config, который используется как общая часть конфигураций нескольких разных скриптов. Я хотел бы иметь возможность остановить копирование кода вставки для OptionParsers, которые анализируют эту базовую конфигурацию (например, каждый сценарий нуждается --cluster а также --port поэтому я хотел бы, чтобы один базовый OptionParser всегда позаботился об этом), и позволил минимальному настраиваемому OptionParser позаботиться о параметрах, уникальных для каждого сценария (например, --asdf).

Проблема в том, что если я попрошу базовый парсер проанализировать аргументы, содержащие --asdfСкопт жалуется:

[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

Есть ли способ заставить его игнорировать неизвестные аргументы?

2 ответа

Решение

При определении кастома OptionParserПроще говоря лишний

override def errorOnUnknownArgument = false

в определение. Например,

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"
    ...
  }

На всякий случай, если вы используете OParser

      // define a setup
val setup: OParserSetup = new DefaultOParserSetup {
  override def errorOnUnknownArgument: Boolean = false
}
// then pass setup to parse function
OParser.parse(parser, args, YourConfig(), setup)
Другие вопросы по тегам