如何使用Dropwizard接受自定义命令行参数

时间:2015-12-06 16:20:24

标签: java dropwizard

我正在尝试让我的Dropwizard应用程序接受自定义命令行参数。文档似乎不足,只有一半解释了该怎么做。考虑到我是新手,我需要一个从代码到命令行使用的非常明确的例子。

有人愿意分享吗?我查看了this个问题,但它没有明确解释,我也无法解决问题。

请不要询问我尝试过的代码示例。相信我,我已经尝试了很多,我不确定要发布什么,因为大多数代码都消失了。如果你知道如何做到这一点,不应该花很长时间来回答。感谢。

2 个答案:

答案 0 :(得分:6)

我正在使用手册中所述的示例。如果需要实现以下输出,可以使用提供的代码执行此操作。如果您需要更具体的信息,请告诉我。

Input: java -jar <your-jar> hello -u conor
Output: Hello conor

我不确定您使用的是哪种版本的dropwizard。这是0.9.1

的一个

主类

public class MyApplication extends Application<MyConfiguration> {
  public static void main(String[] args) throws Exception {
    {
      new MyApplication().run(args);
    }
  }

  @Override
  public void initialize(Bootstrap<DropwizardConfiguration> bootstrap) {
    bootstrap.addCommand(new MyCommand());
  }

  @Override
  public void run(ExampleConfiguration config,
                  Environment environment) {
  }
}

MyCommand.java

public class MyCommand extends Command {
  public MyCommand() {        
    super("hello", "Prints a greeting");
  }

  @Override
  public void configure(Subparser subparser) {
    // Add a command line option
    subparser.addArgument("-u", "--user")
      .dest("user")
      .type(String.class)
      .required(true)
      .help("The user of the program");
  }

  @Override
  public void run(Bootstrap<?> bootstrap, Namespace namespace) throws Exception {
    System.out.println("Hello " + namespace.getString("user"));
  }
}

参考:http://www.dropwizard.io/0.9.1/docs/manual/core.html#man-core-commands

答案 1 :(得分:0)

公共类TestCommand扩展Command {

public TestCommand() {
    super("commandName", "CommandDesc");
}

@Override
public void configure(Subparser subparser) {
    subparser.addArgument("-ct", "--commandTest").dest("Dest").type(String.class).required(true)
            .help("command test");
}

@Override
public void run(Bootstrap<?> bootstrap, Namespace namespace) throws Exception {
    System.out.println("command to test -> " + namespace.getString("Dest"));
}

}

运行代码: commandName -ct dwizard 作为args
输出:要测试的命令 - &gt; dwizard

如果您编写了一个扩展“Command”类或类似类的类,那么以下命令应该可以工作 commandName {command} {command arg}