picocli:如果没有给出参数则显示帮助
picocli: show help if no parameter given
我想在 运行 我的 CLI 应用程序没有参数时自动显示帮助。
我已经看到这个问题在 Whosebug 上多次出现。我花了很多时间来解决这个问题,我已经阅读了 official document、已检查的文章,但仍然不清楚如何实现这一点。
这是我的:
主要class
@Command(
subcommands = {C1.class, C2.class}
)
public class HelloCli implements Callable<Integer> {
@Option(names = {"?", "-h", "--help"},
usageHelp = true,
description = "display this help message")
boolean usageHelpRequested;
@Override
public Integer call() throws Exception {
System.out.println("wanna show the help here");
return 1;
}
public static void main(String... args) {
int exitCode = new CommandLine(new HelloCli()).execute(args);
System.exit(exitCode);
}
}
处理show-user函数的class:
@CommandLine.Command(name = "show-user",
aliases = "-show-user")
public class C1 implements Callable<Integer> {
@CommandLine.Option(names = {"?", "-h", "--help"},
usageHelp = true,
description = "display this help message")
boolean usageHelpRequested;
@CommandLine.Option(names = {"-p1"},
description = "show-user: param 1")
String p1;
@Override
public Integer call() throws Exception {
System.out.println("executing the 'show-user' business logic...");
System.out.println("param 1: " + p1);
return 4;
}
}
class处理create-user命令:
@CommandLine.Command(name = "create-user",
aliases = "-create-user")
public class C2 implements Callable<Integer> {
@CommandLine.Option(names = {"?", "-h", "--help"},
usageHelp = true,
description = "display this help message")
boolean usageHelpRequested;
@CommandLine.Option(names = {"-p1"},
description = "create-user: another param 1")
String p1;
@Override
public Integer call() throws Exception {
System.out.println("executing the 'create-user' business logic...");
System.out.println("param 1: " + p1);
return 5;
}
}
案例 1:当我使用 -h
调用此应用程序时,帮助会正常显示:
Usage: <main class> [?] [COMMAND]
?, -h, --help display this help message
Commands:
show-user, -show-user
create-user, -create-user
案例 2:显示第一个函数的帮助,调用 show-user -h
:
Usage: <main class> show-user [?] [-p1=<p1>]
?, -h, --help display this help message
-p1=<p1> show-user: param 1
案例三:为第一个函数调用帮助,调用create-user -h
:
Usage: <main class> create-user [?] [-p1=<p1>]
?, -h, --help display this help message
-p1=<p1> create-user: another param 1
案例 4:在没有参数的情况下调用我的应用显示:
wanna show the help here
我的问题很简单:
当我 运行 我的 CLI 工具没有参数 (Case 4
) 时如何显示帮助?
我想我需要将自定义代码添加到 HelloCli.call()
方法中,其中包含一个循环,该循环从实现函数的两个 class 中收集帮助文本。但不确定如何。我还没有找到这个流行用例的任何示例代码。
我的附加问题与第一个问题类似:
我能以某种方式显示 Case 2
和 Case 3
中所有内容一起显示的完整帮助吗?
这在子命令部分中有记录,Making Subcommands Required。
基本上,不要在顶级命令中实现Callable 或Runnable。这使得最终用户必须指定子命令。手册有例子。
关于你的第二个问题,如何自定义使用帮助信息,请查看picocli GitHub项目的picocli-examples模块。许多示例都是关于自定义帮助的。
例如,this one 在顶级命令的使用帮助中显示子命令(和子子命令)的完整层次结构。
我想在 运行 我的 CLI 应用程序没有参数时自动显示帮助。 我已经看到这个问题在 Whosebug 上多次出现。我花了很多时间来解决这个问题,我已经阅读了 official document、已检查的文章,但仍然不清楚如何实现这一点。
这是我的:
主要class
@Command(
subcommands = {C1.class, C2.class}
)
public class HelloCli implements Callable<Integer> {
@Option(names = {"?", "-h", "--help"},
usageHelp = true,
description = "display this help message")
boolean usageHelpRequested;
@Override
public Integer call() throws Exception {
System.out.println("wanna show the help here");
return 1;
}
public static void main(String... args) {
int exitCode = new CommandLine(new HelloCli()).execute(args);
System.exit(exitCode);
}
}
处理show-user函数的class:
@CommandLine.Command(name = "show-user",
aliases = "-show-user")
public class C1 implements Callable<Integer> {
@CommandLine.Option(names = {"?", "-h", "--help"},
usageHelp = true,
description = "display this help message")
boolean usageHelpRequested;
@CommandLine.Option(names = {"-p1"},
description = "show-user: param 1")
String p1;
@Override
public Integer call() throws Exception {
System.out.println("executing the 'show-user' business logic...");
System.out.println("param 1: " + p1);
return 4;
}
}
class处理create-user命令:
@CommandLine.Command(name = "create-user",
aliases = "-create-user")
public class C2 implements Callable<Integer> {
@CommandLine.Option(names = {"?", "-h", "--help"},
usageHelp = true,
description = "display this help message")
boolean usageHelpRequested;
@CommandLine.Option(names = {"-p1"},
description = "create-user: another param 1")
String p1;
@Override
public Integer call() throws Exception {
System.out.println("executing the 'create-user' business logic...");
System.out.println("param 1: " + p1);
return 5;
}
}
案例 1:当我使用 -h
调用此应用程序时,帮助会正常显示:
Usage: <main class> [?] [COMMAND]
?, -h, --help display this help message
Commands:
show-user, -show-user
create-user, -create-user
案例 2:显示第一个函数的帮助,调用 show-user -h
:
Usage: <main class> show-user [?] [-p1=<p1>]
?, -h, --help display this help message
-p1=<p1> show-user: param 1
案例三:为第一个函数调用帮助,调用create-user -h
:
Usage: <main class> create-user [?] [-p1=<p1>]
?, -h, --help display this help message
-p1=<p1> create-user: another param 1
案例 4:在没有参数的情况下调用我的应用显示:
wanna show the help here
我的问题很简单:
当我 运行 我的 CLI 工具没有参数 (Case 4
) 时如何显示帮助?
我想我需要将自定义代码添加到 HelloCli.call()
方法中,其中包含一个循环,该循环从实现函数的两个 class 中收集帮助文本。但不确定如何。我还没有找到这个流行用例的任何示例代码。
我的附加问题与第一个问题类似:
我能以某种方式显示 Case 2
和 Case 3
中所有内容一起显示的完整帮助吗?
这在子命令部分中有记录,Making Subcommands Required。
基本上,不要在顶级命令中实现Callable 或Runnable。这使得最终用户必须指定子命令。手册有例子。
关于你的第二个问题,如何自定义使用帮助信息,请查看picocli GitHub项目的picocli-examples模块。许多示例都是关于自定义帮助的。 例如,this one 在顶级命令的使用帮助中显示子命令(和子子命令)的完整层次结构。