[CLI/Java] 基于 Java 构建 CLI 命令行工具的解决方案
1 需求背景[*]排查项目中的各类数据问题,测试人员和开发人员都耗费大量时间,不如将这部分排查工作所需的程序工具化。
[*]为此,稍微调研了一下cli命令行构建框架。
[*]综合之下,目前笔者选择的 picocli 框架。感觉其框架的易用性更好。
[*]cli 命令行工具与业务工程模块的区别在于:
[*]参数/请求的功能、输入数据,来源于使用者及其电脑本地。
参数和数据的识别,是一个需要考虑的问题。
[*]部署位置:电脑本地
[*]使用人员:后台支持人员,而非最终的平台用户(这种情况极少)。
2 需求描述
[*]在 Java 项目中实现 CLI(命令行工具)可以通过使用框架如 Picocli 或 Apache Commons CLI 来快速完成。
这些框架提供了强大的功能来解析命令行参数、生成帮助信息等。
3 解决方案: 使用 Picocli 框架
[*]Picocli 是一个功能强大且易用的命令行工具开发框架,支持注解驱动开发。
[*]URL
[*]https://mvnrepository.com/artifact/info.picocli/picocli
[*]https://mvnrepository.com/artifact/info.picocli/picocli
实现步骤
Step1 添加依赖
[*]在 Maven 的 pom.xml 文件中引入 Picocli:
<dependency>
<groupId>info.picocli</groupId>
picocli</artifactId>
<version>4.7.6</version>
</dependency>Step2 创建命令类
[*]使用注解定义命令和选项:
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
@Command(name = "example", mixinStandardHelpOptions = true, description = "示例 CLI 工具")
public class ExampleCLI implements Runnable {
@Option(names = {"-n", "--name"}, description = "用户名称")
private String name;
@Override
public void run() {
System.out.println("Hello, " + (name != null ? name : "World") + "!");
}
public static void main(String[] args) {
int exitCode = new CommandLine(new ExampleCLI()).execute(args);
System.exit(exitCode);
}
}Step3 运行程序
[*]编译并运行程序:
java -jar example.jar --name=John4 解决方案: 使用 Apache Commons CLI
[*]Apache Commons CLI 是一个轻量级库,适合处理简单的命令行参数。
[*]URL
[*]https://commons.apache.org/proper/commons-cli/
[*]https://mvnrepository.com/artifact/commons-cli/commons-cli
实现步骤
Step1 添加依赖
[*]在 Maven 的 pom.xml 文件中引入 Apache Commons CLI:
<dependency>
<groupId>commons-cli</groupId>
commons-cli</artifactId>
<version>1.9.0</version>
</dependency>Step2 定义和解析选项
[*]使用 Options 和 CommandLineParser 定义和解析参数:
import org.apache.commons.cli.*;
public class ExampleCLI {
public static void main(String[] args) {
Options options = new Options();
options.addOption("n", "name", true, "用户名称");
options.addOption("h", "help", false, "显示帮助信息");
CommandLineParser parser = new DefaultParser();
HelpFormatter formatter = new HelpFormatter();
try {
CommandLine cmd = parser.parse(options, args);
if (cmd.hasOption("help")) {
formatter.printHelp("example", options);
return;
}
String name = cmd.getOptionValue("name", "World");
System.out.println("Hello, " + name + "!");
} catch (ParseException e) {
System.out.println(e.getMessage());
formatter.printHelp("example", options);
}
}
}Step3 运行程序
[*]编译并运行程序:
java -jar example.jar -n JohnZ 最佳实践
[*]选择框架:Picocli 更适合复杂场景的 CLI 工具开发,而 Apache Commons CLI 更适合简单场景。
[*]生成可执行文件:结合 GraalVM 的 native-image 工具,可以将 Java 程序编译为跨平台的可执行文件。
[*]提供帮助信息:确保工具支持 --help 参数,方便用户了解使用方法。
Y 推荐文献
[*]用 Java 做个命令行程序,太简单了!-腾讯云开发者社区 - 腾讯云
[*]java - Apache Commons CLI:构建命令行应用的利器 - Segmentfault
[*]怎么基于Java编写一个CLI工具_native-image class - CSDN
X 参考文献
本文作者: 千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]