【问题标题】:Command Line Parsing: Commons CLI alternatives? [closed]命令行解析:Commons CLI 替代方案? [关闭]
【发布时间】:2011-03-19 13:33:03
【问题描述】:

对于Java 中的命令行解析,我通常使用Apache Commons CLI。 有人可以推荐任何替代库吗?

【问题讨论】:

  • 如果您要寻求通常使用的替代品,如果您说出您正在寻找的常规选项无法提供的东西,那将很有用。跨度>
  • 老实说,我并没有特别想到缺少的功能。诚然,Apache Commons CLI 是“久经考验的”,但它也相当冗长。我只是想知道是否有人在这方面提出了任何新想法。在这个类别中,我想我会仔细看看下面的 JCommander 建议。
  • 至少对我而言,Commons CLI 存在许多架构问题。它的 OptionBuilder 并不是真正的 Builder,不真正支持树状命令,也不支持用户定义的类型。

标签: java command-line


【解决方案1】:

这个答案有帮助吗? How to parse command line arguments in Java?

【讨论】:

  • 我很欣赏这些替代框架的链接,我不得不承认我没有注意到这个非常相似的问题。不过,我希望能接触到那些实际尝试过不同替代方案并且能够推荐其中一种方案的人。
  • 恕我直言,这就是我要找的那种文章:furiouspurpose.blogspot.com/2008/07/…谢谢!
【解决方案2】:

我看到这里列出了一些 command line interpreters

【讨论】:

    【解决方案3】:

    java-source.net,您可以找到至少 4 个 Apache Commons CLI 的其他替代库。

    【讨论】:

      【解决方案4】:

      getopt-1.0.11 是一个简单易用的轻量级库,我曾经用于命令行参数解析

      【讨论】:

        【解决方案5】:

        JCommander 听起来是一种非常简单有趣的方法来解析带有注释的命令行参数(来自 TestNG 的创建者):

        您使用选项描述注释字段:

        import com.beust.jcommander.Parameter;
        
        public class JCommanderTest {
          @Parameter
          public List<String> parameters = Lists.newArrayList();
        
          @Parameter(names = { "-log", "-verbose" }, description = "Level of verbosity")
          public Integer verbose = 1;
        
          @Parameter(names = "-groups", description = "Comma-separated list of group names to be run")
          public String groups;
        
          @Parameter(names = "-debug", description = "Debug mode")
          public boolean debug = false;
        }
        

        然后你只需让 JCommander 解析:

        JCommanderTest jct = new JCommanderTest();
        String[] argv = { "-log", "2", "-groups", "unit", "a", "b", "c" };
        new JCommander(jct, argv);
        
        Assert.assertEquals(jct.verbose.intValue(), 2);
        

        【讨论】:

        【解决方案6】:

        我使用并且喜欢

        http://martiansoftware.com/jsap/

        它的开源,简单。它不活跃,我认为作者在火中还有其他熨斗。

        【讨论】:

          【解决方案7】:

          我个人在https://github.com/kohsuke/args4j使用kohsuke的args4J

          【讨论】:

          • 这也是我个人的喜好。 args4j 比 JCommander 更灵活。原理相同,但使用和区分参数和选项更直观。
          【解决方案8】:

          你可以试试commandline(我知道这个名字很匿名)

          它使用注释将命令行参数映射到对象模型中。几个解析 模式和一组可以以各种方式组合的注释允许您创建非常高级的命令行选项规则。

          虽然它允许您将命令行参数直接映射到您的域模型, 您应该考虑为命令行参数使用单独的类。

          【讨论】:

            猜你喜欢
            • 2023-03-22
            • 2014-09-08
            • 2011-04-25
            • 1970-01-01
            • 1970-01-01
            • 2016-05-11
            • 2012-07-27
            • 2018-09-09
            • 2012-10-08
            相关资源
            最近更新 更多