彼瞄 发表于 2025-8-27 21:00:42

[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]
查看完整版本: [CLI/Java] 基于 Java 构建 CLI 命令行工具的解决方案