Java 为什么';picocli能从命令行识别我的选项吗?

Java 为什么';picocli能从命令行识别我的选项吗?,java,command-line-interface,picocli,Java,Command Line Interface,Picocli,我正在尝试使用PICOCLI在Java中构建CLI,但我停留在一个非常基本的点上。我根本无法让我的应用程序给消费者一个选项和它的价值。这是我的班级: package com.example.demo; import org.springframework.boot.autoconfigure.SpringBootApplication; import picocli.CommandLine; @SpringBootApplication @CommandLine.Command(name

我正在尝试使用PICOCLI在Java中构建CLI,但我停留在一个非常基本的点上。我根本无法让我的应用程序给消费者一个选项和它的价值。这是我的班级:

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包
cd-target
java-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.
索引0处的参数不匹配:“Greet”
你好世界演示
用法:Greet-u=
-u、 --user=用户名。

我已经没有耐心打印一条简单的消息了!我不知道如何解决这个问题。请帮忙

如果使用
java
调用命令,则无需指定命令名
Greet
,只需指定命令行选项:

java -jar demo-1.0.jar -u pico
您可以这样想:
java-jardemo-1.0.jar
Greet
命令

您可能希望使用创建启动程序脚本,并将该启动程序脚本命名为
Greet

这样,程序的用户就可以使用以下命令在命令行上调用它:

Greet -u pico
AppAssembler的maven配置应如下所示:


...
org.codehaus.mojo


更新2:我建议升级到picocli的最新版本;版本4.0引入了一个新版本,它更好地支持退出代码和错误处理

在您的示例中,看起来是这样的:


公共静态void main(字符串…参数){
int exitCode=new命令行(new DemoApplication()).execute(args);
系统退出(退出代码);
}

非常感谢您的支持!我不知道为什么“问候”不起作用!这非常有帮助!谢谢:)谢谢你提出来!它激励我改进手册,并添加了关于如何运行基于picocli的应用程序的新部分,以及手册的包装部分竖起大拇指: