【问题标题】:How do you make flags for command line arguments in Java? [closed]如何在 Java 中为命令行参数制作标志? [关闭]
【发布时间】:2014-07-29 22:54:04
【问题描述】:

我有一个用于 25 个应用程序的枚举和一个用于某些环境的枚举。

现在使用我拥有的代码,我可以不传递任何参数,它会在所有环境中运行所有应用程序(这就是我想要的),或者我可以按照它运行的顺序传递一个应用程序和一个环境那。我需要能够通过执行以下操作来传递应用程序列表 -app app1 app2 app3 ... -env env1 env2...

我以前从未使用过标志,也从未尝试过解析命令数组。这是代码的一部分。我认为 if 很好,但 else 是我需要帮助的地方。

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; 

public static void main(String[] args) 
{
    // run tests and collect results
    if (args.length == 0)
    {
        LogIn.loginTest(testResults);
        DatabaseTest.testResults(testResults);
        LinkTest.linkTests(testResults);
    }
    else 
    {
            // First choose application, then choose environment
        Application.chooseAppTest(args);
    }

【问题讨论】:

标签: java command-line-arguments


【解决方案1】:

尽管这可能无法直接回答您的问题,但我强烈建议您为此使用库。一些广泛使用的选项:

  1. 公共 CLI - http://commons.apache.org/proper/commons-cli/
  2. JCommander - http://jcommander.org/
  3. JOpt-Simple - http://pholser.github.io/jopt-simple/
  4. ArgParse4J - http://argparse4j.sourceforge.net/

毕竟,“生命太短,无法解析命令行参数”。举个例子(使用JCommander),你只需要通过注解来定义你的参数:

//class MyOptions
@Parameter(names = { "-d", "--outputDirectory" }, description = "Directory")
private String outputDirectory;

然后使用以下方法解析您的 bean:

public static void main(String[] args){
    MyOptions options = new MyOptions();
    new JCommander(options, args);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 2013-06-22
    • 2021-03-14
    • 2011-07-05
    • 1970-01-01
    • 2020-09-21
    • 2013-04-14
    • 1970-01-01
    相关资源
    最近更新 更多