java - 为什么 picocli 不能从命令行识别我的选项?

标签 java command-line-interface picocli

我正在尝试使用 PICOCLI 在 Java 中构建 CLI,但我在一个非常基本的点上陷入困​​境。我根本无法让我的应用程序向消费者提供一个选项和它的值(value)。这是我的课:

package com.example.demo;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import picocli.CommandLine;

@SpringBootApplication

@CommandLine.Command(name = "Greet", header = "%n@|green Hello world demo|@")
class DemoApplication implements Runnable {

    @CommandLine.Option(names = {"-u", "--user"}, required = true, description = "The user name.")
    String userName;

    public void run() {
        System.out.println("Hello, " + userName);
    }

    public static void main(String... args) {
        CommandLine.run(new DemoApplication(), System.err, args);
    }
}

然后我做了一个 mvn package , cd targetjava -jar demo-1.0.jar Greet -u pico但我只遇到过这个:
Unmatched argument at index 0: 'Greet'

Hello world demo
Usage: Greet -u=<userName>
  -u, --user=<userName>   The user name.
我已经没有耐心试图打印一条简单的消息了!我不知道还有什么办法解决这个问题。请帮忙!

最佳答案

如果您使用 java 调用命令, 不需要指定命令名 Greet ,只需指定命令行选项:

java -jar demo-1.0.jar -u pico
你可以这样想:java -jar demo-1.0.jarGreet命令。
您可能想使用 Application Assembler Maven Plugin创建启动器脚本,并命名该启动器脚本 Greet .
这样,您的程序的用户可以使用以下命令在命令行上调用它:
Greet -u pico
AppAssembler 的 maven 配置应如下所示:
<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>appassembler-maven-plugin</artifactId>
        <version>1.10</version>
        <configuration>
          <programs>
            <program>
              <mainClass>com.example.demo.DemoApplication</mainClass>
              <id>Greet</id>
            </program>
          </programs>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

更新:我在 how to run picocli-based applications 上的用户手册中添加了一个部分.

更新2:我建议升级到最新版本的picocli; 4.0 版引入了新的 execute API更好地支持退出代码和错误处理。
在您的示例中,它看起来像这样:

public static void main(String... args) {
  int exitCode = new CommandLine(new DemoApplication()).execute(args);
  System.exit(exitCode);
}

关于java - 为什么 picocli 不能从命令行识别我的选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62963202/

相关文章:

java - 解析谷歌日历时SAX解析异常

java - 测试 pico cli 命令,Java

java - CLI 与 Picocli : Call main command before sub command get called

java - 调用 dispose 方法后访问模式对话框变量

java - ListView 中的自定义行

windows - Windows是否有docker日志查看器或 Debug模式?

php - 如果从 CLI 运行,如何绕过 PHP 脚本中的安全检查?

java - 如何将 picoCLI 项目变成命令?

java - 将 org.w3c.dom.Document 转换为 org.apache.html.dom.HTMLDocumentImpl

jenkins - Openshift CLI - 使用模板和 oc new-app 更新应用程序