Picocli框架下的命令模式

引言

在开发命令行应用程序时,经常需要解析命令行参数,并根据这些参数执行不同的操作。命令模式是一种设计模式,它将请求封装为对象,从而允许用户使用不同的请求、队列或日志请求来参数化其他对象。Picocli是一个小型的Java框架,用于创建命令行界面应用程序。本文将介绍如何使用picocli框架来实现命令模式,以构建强大且灵活的CLI应用。

Picocli框架简介

Picocli是一个为Java应用程序构建命令行界面的库。它支持颜色输出、TAB补全和注解驱动。Picocli旨在使命令行参数的解析和验证变得简单快捷,同时提供强大的功能和灵活性,非常适合于实现命令模式。

命令模式概念

命令模式是一种设计模式,它允许将操作封装为对象。这种方式可以根据不同的请求对操作进行参数化、排队或记录,同时也支持可撤销的操作。在CLI应用中,命令模式使得每个命令都可以作为一个独立的对象处理,从而简化了命令的管理和扩展。

Picocli与命令模式

Picocli框架自然支持命令模式的实现。通过定义命令类并使用注解来指定命令的参数和选项,picocli能够自动解析命令行输入并触发相应的命令对象。这样的设计不仅减少了样板代码,还提高了代码的可读性和可维护性。

实现步骤

步骤1:环境设置

首先,需要在项目中加入picocli的依赖。如果你使用Maven,可以添加以下依赖到你的pom.xml文件中:

<dependency><groupId>info.picocli</groupId><artifactId>picocli</artifactId><version>4.6.1</version>
</dependency>

步骤2:创建命令类

创建一个Java类,并使用@Command注解来标记它作为一个命令。然后,使用@Option或@Parameters注解来标记命令的选项或参数。

import picocli.CommandLine.Command;
import picocli.CommandLine.Option;@Command(name = "echo", description = "Prints the input text to the console.")
public class EchoCommand implements Runnable {@Option(names = {"-t", "--text"}, description = "The text to echo.")private String text;@Overridepublic void run() {System.out.println(text);}
}

步骤3:编写主程序

在主程序中,创建CommandLine的实例,并将你的命令类的实例传递给它。然后调用execute方法,传递命令行参数。

import picocli.CommandLine;public class App {public static void main(String[] args) {int exitCode = new CommandLine(new EchoCommand()).execute(args);System.exit(exitCode);}
}

步骤4:打包与运行

使用Maven或Gradle将你的应用程序打包,然后从命令行运行它,传递所需的参数和选项。

示例代码

以下是一个简单的picocli应用程序,它实现了一个echo命令,用于打印用户输入的文本。

import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;@Command(name = "echo", description = "Prints the input text to the console.")
public class EchoCommand implements Runnable {@Option(names = {"-t", "--text"}, required = true, description = "The text to echo.")private String text;@Overridepublic void run() {System.out.println(text);}public static void main(String[] args) {int exitCode = new CommandLine(new EchoCommand()).execute(args);System.exit(exitCode);}
}

参考

Picocli官方文档: https://picocli.info
设计模式:命令模式: https://refactoring.guru/design-patterns/command

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/775198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

axios配置以及说明

import request from ‘//utils/request’; export function fetchList(query?: Object) {return request({url: /admin/audit/page,method: get,params: query,});request.ts import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from axios; import { Se…

Kimi和ChatGPT做古诗词阅读理解,谁更胜一筹?

前几天发过一篇Kimi整理会议的体验教程&#xff0c;没想到大家很感兴趣&#xff0c;这次再来拿Kimi做古诗词阅读理解看看&#xff0c;同时也对比下ChatGPT的效果。 ChatGPT是几乎家喻户晓的AI大模型&#xff0c;Kimi和它对比有哪些异同点呢&#xff1f; 首先它们都是基于对话…

【Flink架构】关于FLink BLOB的组织架构:FLIP-19: Improved BLOB storage architecture:官网解读

文章目录 一. BlobServer架构1.BlobClient2. BlobServer3. BlobCache4. LibraryCacheManager 二、BLOB的生命周期1. 分阶段清理2. BlobCache的生命周期3. BlobServer 三、文件上下载流程1. BlobCache 下载2. BlobServer 上传3. BlobServer 下载 四. Flink中支持的BLOB文件类型1…

win10 docker zookeeper和kafka搭建

好久没用参与大数据之类的开发了&#xff0c;近日接触到一个项目中使用到kafka&#xff0c;因此要在本地搭建一个简易的kafka服务。时间比较紧急&#xff0c;之前有使用docker的经验&#xff0c;因此本次就使用docker来完成搭建。在搭建过程中出现的一些问题&#xff0c;及时记…

uniapp流浪动物救助小程序Java宠物领养小程序springboot

uniapp流浪动物救助小程序Java宠物领养小程序springboot 代码40块&#xff0c;需要的私聊 前台基于uniapp小程序 后台管理基于springbootvue前后端分离项目 开发语言&#xff1a;Java 框架&#xff1a;springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xf…

VTK 示例 基本的流程-事件交互、球体、

流程可以总结如下&#xff1a; 导入所需的头文件&#xff1a; 首先&#xff0c;导入了一系列 VTK 头文件&#xff0c;这些文件包含了所需的类和函数声明。 创建对象&#xff1a; 创建了两个球体&#xff08;一个较大&#xff0c;一个较小&#xff09;&#xff0c;一个平面&…

FANUC机器人KAREL语言程序结构(入门)

一、karel语言程序结构 FANUC机器人keral语言编程结构如下图所示&#xff1a; Keral指令对应的基础用法如下所示&#xff1a; 二、创建一个简单的写屏程序 依照对应的karel语法写写入下列程序 运行对应的程序进行测试&#xff1a;

【Python进阶】einops库的总:张量重排,重复,堆叠操作利器 | rearrange reduce repeat stack

深度学习中&#xff0c;往往需要大量的形状改变&#xff0c;我见到的最多的便是rearrange 他其实是属于einops这个库的&#xff0c;这个库的更多使用方式整理如下 文章目录 1 rearrange函数 重排2 reduce 计算平均值3 repeat和stack einops 是一个用于重新排列和重塑张量的库&…

南网科研院携手百度智能云,入选信通院AI原生应用优秀案例

为呈现AI原生研发和应用成效&#xff0c;提供AI原生相关技术、服务、部署、运营、基础设施等选型参考&#xff0c;近期&#xff0c;中国信息通信研究院发布了AI原生技术及应用优秀案例&#xff0c;由南方电网公司输配电部牵头、南方电网科学研究院有限责任公司&#xff08;以下…

Web安全攻防世界01 fileinclude(宜兴网信办)

<html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /></head> //规定 HTML 文档的字符集<br /> <b>Notice</b>: Undefined index: language in <b>/var/www/html/index.ph…

Docket常见的软件部署1

1 安装MySQL # 查看MySQL镜像 docker search mysql # 拉起镜像 docker pull mysql:5.7 # 创建MySQL数据映射卷&#xff0c;防止数据不丢失 mkdir -p /hmoe/tem/docker/mysql/data/ # 启动镜像 docker run -d --name mysql -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -v /home…

牛客NC79 丑数【中等 堆、优先级队列 Java,Go,PHP Go和PHP中我自己实现了优先级队列】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b 思路 注意&#xff1a; 数据范围&#xff1a;0≤n≤2000&#xff0c; 2000肯定到不了&#xff0c;最多到1690&#xff0c;相同题目链接&#xff1a;https://www.lintcode.com…

Dockerfile:自定义镜像

Dockerfile 是一个文本文件&#xff0c;其中包含了一系列用于自动化构建Docker镜像的指令。通过编写Dockerfile&#xff0c;开发者能够明确地定义一个软件应用及其运行环境应该如何被封装进一个可移植、可重复构建的Docker镜像中。 第一步&#xff1a;在/tmp文件下新建docker…

HTTPS握手解析

TLS握手过程 HTTP 由于是明文传输&#xff0c;所谓的明文&#xff0c;就是说客户端与服务端通信的信息都是肉眼可见的&#xff0c;随意使用一个抓包工具都可以截获通信的内容。 存在的风险 窃听风险&#xff0c;比如通信链路上可以获取通信内容&#xff0c;用户号容易没。 篡…

hadoop 查询hdfs资源信息的方式

hdfs dfsadmin -report &#xff3b;-live&#xff3d;&#xff3b;-dead&#xff3d;&#xff3b;-decommissioning&#xff3d;

二分练习题——晾衣服

晾衣服 题目分析 这里出现了“最小化干燥的总时间”&#xff0c;那么可以考虑用二分去做。 第一阶段二段性分析 假设当前需要耗费的时间为mid分钟&#xff0c;如果mid分钟内可以烘干这些衣服&#xff0c;那么我们可以确定右边界大于mid的区间一定也可以。但是此时我需要找的…

前缀和算法(1)

目录 一维前缀和[模板] 一、题目描述 二、思路解析 三、代码 二维前缀和[模板] 一、题目描述 二、思路解析 三、代码 724.寻找数组的中心下标 一、题目描述 二、思路解析 三、代码 238.除自身以外数组的乘积 一、题目描述 二、思路解析 三、代码 一维前缀和[模…

SQLynx发布3.0.0版本:带来更流畅便捷的SQL开发体验

作为新一代的一站式数据库管理开发工具&#xff0c; SQLynx自发布上线以来&#xff0c;一直受到广大用户的好评与鼓励。 为了给用户提供更高效、更便捷、更可靠的数据库管理开发体验&#xff0c;SQLynx今日正式发布3.0.0版本&#xff0c;同步在麦聪软件官网上线&#xff0c;全…

centos 安装 netstat

要在CentOS系统上安装netstat命令&#xff0c;您需要安装名为net-tools的软件包&#xff0c;因为netstat是该包中包含的一个工具。以下是使用系统自带的软件包管理器进行安装的步骤&#xff1a; 对于使用yum的CentOS&#xff08;如CentOS 6或7&#xff09;&#xff1a; # 更新…

【AIGC】阿里云ecs部署stable diffusion

文章目录 安装anaconda安装cudagit 加速配置虚拟环境挂载oss端口开放启动服务其他controlnet显卡使用监控 参考资料 安装anaconda 安装Python、wget、git sudo apt install python3 python3-pip python3-virtualenv wget git 安装前置依赖 sudo apt-get install libgl1-mesa-…