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=John
复制代码 4 解决方案: 使用 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 John
复制代码 Z 最佳实践
- 选择框架: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 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |