找回密码
 立即注册
首页 业界区 安全 [CLI/Java] 基于 Java 构建 CLI 命令行工具的解决方案 ...

[CLI/Java] 基于 Java 构建 CLI 命令行工具的解决方案

彼瞄 7 天前
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:
  1. <dependency>
  2.   <groupId>info.picocli</groupId>
  3.   picocli</artifactId>
  4.   <version>4.7.6</version>
  5. </dependency>
复制代码
Step2 创建命令类


  • 使用注解定义命令和选项:
  1. import picocli.CommandLine;
  2. import picocli.CommandLine.Command;
  3. import picocli.CommandLine.Option;
  4. @Command(name = "example", mixinStandardHelpOptions = true, description = "示例 CLI 工具")
  5. public class ExampleCLI implements Runnable {
  6.         @Option(names = {"-n", "--name"}, description = "用户名称")
  7.         private String name;
  8.         @Override
  9.         public void run() {
  10.                 System.out.println("Hello, " + (name != null ? name : "World") + "!");
  11.         }
  12.         public static void main(String[] args) {
  13.                 int exitCode = new CommandLine(new ExampleCLI()).execute(args);
  14.                 System.exit(exitCode);
  15.         }
  16. }
复制代码
Step3 运行程序


  • 编译并运行程序:
  1. 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:
  1. <dependency>
  2.   <groupId>commons-cli</groupId>
  3.   commons-cli</artifactId>
  4.   <version>1.9.0</version>
  5. </dependency>
复制代码
Step2 定义和解析选项


  • 使用 Options 和 CommandLineParser 定义和解析参数:
  1. import org.apache.commons.cli.*;
  2. public class ExampleCLI {
  3.         public static void main(String[] args) {
  4.                 Options options = new Options();
  5.                 options.addOption("n", "name", true, "用户名称");
  6.                 options.addOption("h", "help", false, "显示帮助信息");
  7.                 CommandLineParser parser = new DefaultParser();
  8.                 HelpFormatter formatter = new HelpFormatter();
  9.                 try {
  10.                         CommandLine cmd = parser.parse(options, args);
  11.                         if (cmd.hasOption("help")) {
  12.                                 formatter.printHelp("example", options);
  13.                                 return;
  14.                         }
  15.                         String name = cmd.getOptionValue("name", "World");
  16.                         System.out.println("Hello, " + name + "!");
  17.                 } catch (ParseException e) {
  18.                         System.out.println(e.getMessage());
  19.                         formatter.printHelp("example", options);
  20.                 }
  21.         }
  22. }
复制代码
Step3 运行程序


  • 编译并运行程序:
  1. 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        【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!   

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册