Как вы анализируете аргументы для Java-программы?

Я делаю Java-программу Selenium WebDriver. У меня 25 приложений и 4 среды. Мне нужно иметь возможность передать что-то вроде -app app1 app2 app3... appn -env env1 env2 envn

Я должен быть в состоянии передать ни один, ни один или оба аргумента. Прямо сейчас у меня есть возможность передавать одно приложение и один env в этом порядке, но я должен быть в состоянии сделать это в любом порядке и с возможностью ни одного, ни обоих. Вот что у меня так далеко. При этом я могу либо не передавать аргументы и запускать каждое приложение для каждой среды (что я и хочу), либо я могу выбрать app1 env1 в указанном порядке для этого конкретного теста.

 public static Application chooseAppTest(String[] args) 
    {
        Application application = null;

        switch (Application.valueOf(args[0]))
        {
        case ACCOUNTINVENTORY:
            new AccountInventory(Environment.valueOf(args[1]));
            AccountInventory.accountInventoryDatabaseTests(testResults);
            break;

if (args.length == 0)
    {
       LogIn.loginTest(testResults);
       DatabaseTest.testResults(testResults);
       LinkTest.linkTests(testResults);
    }
    else 
    {
            // First choose application, then choose environment
        Application.chooseAppTest(args);
    }

3 ответа

Я не думаю, что рекурсия необходима. Вы можете сделать что-то вроде этого:

public static void main (String[] args)
{
    List<String> apps = new LinkedList<>();
    List<String> envs = new LinkedList<>();
    List<String> current = null;
    // parse arguments
    for (String arg : args)
    {
        if (arg.equals("-app")) current = apps;
        else if (arg.equals("-env")) current = envs;
        else if (current != null) // add argument
            current.add(arg);
    }
    // parsing finished
    Application.doSomethingWith(apps, envs);
}

Как прокомментировал Эллиотт, вы смотрели на Apache Commons CLI? Это анализатор командной строки.

Нет необходимости или выгодно использовать рекурсию. Вы можете прочитать все аргументы в массив и обработать их оттуда. Кроме этого, я не уверен, как вы поступите. С аргументами, организованными таким образом, как вы узнаете, какая среда подходит к какому приложению?

Другие вопросы по тегам