Sat*_*ian 5 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 = "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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我做了一个mvn package,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.
Run Code Online (Sandbox Code Playgroud)
我已经没有耐心尝试打印一条简单的消息了!我不知道还有什么办法解决这个问题。请帮忙!
如果使用 调用命令java,则不需要指定命令名称Greet,只需指定命令行选项:
java -jar demo-1.0.jar -u pico
Run Code Online (Sandbox Code Playgroud)
你可以这样想:java -jar demo-1.0.jar 就是命令Greet。
您可能想要使用应用程序组装器 Maven 插件来创建启动器脚本,并将该启动器脚本命名为Greet。
这样,程序的用户就可以使用以下命令在命令行上调用它:
Greet -u pico
Run Code Online (Sandbox Code Playgroud)
AppAssembler 的 Maven 配置应如下所示:
java -jar demo-1.0.jar -u pico
Run Code Online (Sandbox Code Playgroud)
更新:我在用户手册中添加了关于如何运行基于 picocli 的应用程序的部分。
更新2:我建议升级到picocli的最新版本;4.0 版引入了新的执行 API,更好地支持退出代码和错误处理。
在你的例子中,它看起来像这样:
Greet -u pico
Run Code Online (Sandbox Code Playgroud)