当前位置: 首页 > news >正文

Picocli 命令行框架

官方文档
https://picocli.info/
官方提供的快速入门教程
https://picocli.info/quick-guide.html

使用 Picocli 创建命令行应用程序

Picocli 是一个用于构建 Java 命令行应用的强大框架,它简化了参数解析和帮助消息生成的过程。
下面是如何使用 Picocli 构建简单命令行程序的方法。

安装依赖项

对于 Maven 用户来说,可以在 pom.xml 文件里加入如下配置

<!-- https://picocli.info -->
<dependency><groupId>info.picocli</groupId><artifactId>picocli</artifactId><version>4.7.5</version>
</dependency>

编写主类

import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
import picocli.CommandLine.Parameters;
// some exports omitted for the sake of brevity@Command(name = "ASCIIArt", version = "ASCIIArt 1.0", mixinStandardHelpOptions = true) 
public class ASCIIArt implements Runnable { @Option(names = { "-s", "--font-size" }, description = "Font size") int fontSize = 19;@Parameters(paramLabel = "<word>", defaultValue = "Hello, picocli", description = "Words to be translated into ASCII art.")private String[] words = { "Hello,", "picocli" }; @Overridepublic void run() { // The business logic of the command goes here...// In this case, code for generation of ASCII art graphics// (omitted for the sake of brevity).}public static void main(String[] args) {int exitCode = new CommandLine(new ASCIIArt()).execute(args); System.exit(exitCode); }
}
  • 创建一个实现 Runnable 或 callable 的类。这是您的命令。
  • 为类添加 @command 注解并为其命名。mixinstandardHelpOptions 属性将 --help 和 --version 选项添加到您的应用程序中。
  • 对于应用程序中的每个选项,添加 @Option 注解。此示例显示了如何为选项提供名称和描述,还有许多其他属性。
  • 对于每个位置的参数,添加 @Parameters 注解。
  • Picocli 会将命令行参数转换为强类型值,并将这些值注入到带注解的字段中。
  • 在类的 run 或者 call 方法中定义业务逻辑。解析成功完成后,将调用该方法。
  • 在类的main 方法中,使用方法CommandLine.execute 执行程序。 这将解析命令行、处理错误、处理使用和版本帮助请求,并调用业务逻辑。
  • CommandLine.execute System.exit 方法返回退出代码。您的应用程序可以使用此退出代码进行调用,以向调用进程发出成功或失败的信号。

相关文章:

Picocli 命令行框架

官方文档 https://picocli.info/ 官方提供的快速入门教程 https://picocli.info/quick-guide.html 使用 Picocli 创建命令行应用程序 Picocli 是一个用于构建 Java 命令行应用的强大框架&#xff0c;它简化了参数解析和帮助消息生成的过程。 下面是如何使用 Picocli 构建简单命…...

spring-cloud-starter-gateway 使用中 KafkaAppender的问题

公司需要将应用日志上报到kafka&#xff0c;以供分析与查看。 结合logback可以完成此功能&#xff0c;大致配置如下&#xff1a; <appender name"KafkaAppender" class"com.github.danielwegener.logback.kafka.KafkaAppender"><encoder class&…...

【全套】基于分类算法的学业警示预测信息管理系统

【全套】基于分类算法的学业警示预测信息管理系统 【摘 要】 随着网络技术的发展基于分类算法的学业警示预测信息管理系统是一种新的管理方式&#xff0c;同时也是现代学业预测信息管理的基础&#xff0c;利用互联网的时代与实际情况相结合来改变过去传统的学业预测信息管理中…...

Elasticsearch Python 客户端是否与自由线程 Python 兼容?

作者&#xff1a;来自 Elastic Quentin_Pradet 在这篇文章中&#xff0c;我们将进行一些实验&#xff0c;看看 Python Elasticsearch 客户端是否与新的 Python 3.13 自由线程&#xff08;free-threading&#xff09;版本兼容&#xff0c;其中 GIL 已被删除。 介绍 但首先&…...

基于大语言模型的组合优化

摘要&#xff1a;组合优化&#xff08;Combinatorial Optimization, CO&#xff09;对于提高工程应用的效率和性能至关重要。随着问题规模的增大和依赖关系的复杂化&#xff0c;找到最优解变得极具挑战性。在处理现实世界的工程问题时&#xff0c;基于纯数学推理的算法存在局限…...

#CSS混合模式:解决渐变背景下的文字可见性问题

在现代网页设计中&#xff0c;渐变背景的使用越来越普遍。然而&#xff0c;当我们在渐变背景上放置文字时&#xff0c;常常会遇到一个问题&#xff1a;文字在某些背景颜色下可能变得难以阅读。今天&#xff0c;我们将探讨一个优雅的解决方案&#xff1a;使用CSS混合模式。 问题…...

Vue2+OpenLayers给标点Feature添加信息窗体(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、代码实现 3.1、信息窗体DOM元素 3.2、创建Overlay 3.3、创建一个点 3.4、给点初始化点击事件 3.5、完整代码 四、Gitee源码 一、案例截图 二、安装OpenLayers库 npm install ol 三、代码实现 初始化变量&#xff1a; d…...

实战threeJS数字孪生开源 数字工厂

threeJS数字孪生 数字工厂 设备定位 基于three.js的数字工厂开源项目介绍 一、项目概述 本项目是一款基于three.js的数字工厂项目&#xff0c;旨在通过3D可视化技术&#xff0c;为工业制造领域提供一个直观、高效、智能的生产监控与管理平台。该项目结合了现代前端技术栈&…...

【Python基础篇】——第3篇:从入门到精通:掌握Python数据类型与数据结构

第3篇&#xff1a;数据类型与数据结构 目录 Python中的数据类型概述列表&#xff08;List&#xff09; 创建列表列表的基本操作列表方法列表推导式 元组&#xff08;Tuple&#xff09; 创建元组元组的基本操作元组的不可变性 字典&#xff08;Dictionary&#xff09; 创建字典…...

算法3(力扣83)-删除链表中的重复元素

1、题目&#xff1a;给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 2、实现&#xff08; 因为已排序&#xff0c;所以元素若重复&#xff0c;必然在其下一位&#xff09;&#xff08;这里为在vscod…...

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载,Scroll滚动到顶部

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载 效果展示 使用方法 import LoadingText from "../components/LoadingText" import PageToRefresh from "../components/PageToRefresh" import FooterBar from "../components/…...

.NET8.0多线程编码结合异步编码示例

1、创建一个.NET8.0控制台项目来演示多线程的应用 2、快速创建一个线程 3、多次运行程序&#xff0c;可以得到输出结果 这就是多线程的特点 - 当多个线程并行执行时&#xff0c;它们的具体执行顺序是不确定的&#xff0c;除非我们使用同步机制&#xff08;如 lock、信号量等&am…...

SpringBoot项目中解决CORS跨域资源共享问题

在Spring Boot项目中解决CORS&#xff08;跨域资源共享&#xff09;问题&#xff0c;可以通过以下几种方法&#xff1a; 1. 使用CrossOrigin注解 这是最简单的方法&#xff0c;适用于单个控制器或控制器方法级别的跨域配置。你可以在控制器类或具体的方法上使用CrossOrigin注…...

Android string.xml中特殊字符转义

项目中要在string.xml 中显示特殊符号 空格&#xff1a; &#xff08;普通的英文半角空格但不换行&#xff09; 窄空格&#xff1a;  &#xff08;中文全角空格 &#xff08;一个中文宽度&#xff09;&#xff09; &#xff08;半个中文宽度&#xff0c;但两个空格比一个中文…...

解析传统Workflow、AI Workflow与AI Agent概念,并通过Coze案例探讨利用AI工作流构建应用的实践流程

传统工作流 工作流入门这篇就够了 BPMN.JS中文教程 BPMN 工作流引擎解析 定义&#xff1a;工作流是在计算机支持下业务流程的自动或半自动化&#xff0c;其通过对流程进行描述以及按一定规则执行以完成相应工作。 应用&#xff1a;随着计算机技术的发展以及工业生产、办公自动…...

光谱相机的光谱分辨率可以达到多少?

多光谱相机 多光谱相机的光谱分辨率相对较低&#xff0c;波段数一般在 10 到 20 个左右&#xff0c;光谱分辨率通常在几十纳米到几百纳米之间&#xff0c;如常见的多光谱相机光谱分辨率为 100nm 左右。 高光谱相机 一般的高光谱相机光谱分辨率可达 2.5nm 到 10nm 左右&#x…...

android Recyclerview viewholder统一封装

Recyclerview holder 统一封装 ViewHolder类 import android.annotation.SuppressLint import android.content.Context import android.graphics.Color import android.graphics.drawable.GradientDrawable import android.os.Build import android.os.CountDownTimer import…...

Windows部署NVM并下载多版本Node.js的方法(含删除原有Node的方法)

本文介绍在Windows电脑中&#xff0c;下载、部署NVM&#xff08;node.js version management&#xff09;环境&#xff0c;并基于其安装不同版本的Node.js的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法&#xff08;https://blog.csdn.net/zhebushibiaoshi…...

51单片机入门基础

目录 一、基础知识储备 &#xff08;一&#xff09;了解51单片机的基本概念 &#xff08;二&#xff09;掌握数字电路基础 &#xff08;三&#xff09;学习C语言编程基础 二、开发环境搭建 &#xff08;一&#xff09;硬件准备 &#xff08;二&#xff09;软件准备 三、…...

老centos7 升级docker.io为docker-ce 脚本

旧的centos7 之前安装的是docker.io 由于一些原因,像docker compose 等版本变化,以及docker.io源受限等,我们要更新到docker-ce 并使用国内阿里云的源怎么处理?下面直接上脚本,upgrade-docker.sh #!/bin/bashset -e# 创建临时目录 TEMP_DIR"./tmp" mkdir -p "…...

别再只改yaml了!深入理解YOLOv5检测头:从P2到P5,如何根据你的目标大小选择最优组合?

深入解析YOLOv5多尺度检测头&#xff1a;从理论到实践的选择艺术 在计算机视觉领域&#xff0c;目标检测一直是核心任务之一。YOLO系列算法以其高效的检测速度和良好的精度表现&#xff0c;成为工业界和学术界的热门选择。然而&#xff0c;很多开发者在使用YOLOv5时&#xff0c…...

3步实现视频硬字幕精准提取:本地化多语言解决方案如何解决你的字幕难题

3步实现视频硬字幕精准提取&#xff1a;本地化多语言解决方案如何解决你的字幕难题 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字幕区…...

实战避坑:在Windows上用C++/WinRT搞定双模蓝牙(EDR+Ble)通信的完整流程

实战避坑&#xff1a;在Windows上用C/WinRT搞定双模蓝牙&#xff08;EDRBle&#xff09;通信的完整流程 蓝牙技术在现代设备中无处不在&#xff0c;但对于开发者而言&#xff0c;实现Windows桌面应用与双模蓝牙设备&#xff08;同时支持经典蓝牙EDR和低功耗蓝牙BLE&#xff09;…...

Serilog:从结构化日志认知到 .NET 工程落地

MySQL 中的 count 三兄弟&#xff1a;效率大比拼&#xff01; 一、快速结论&#xff08;先看结论再看分析&#xff09; 方式 作用 效率 一句话总结 count(*) 统计所有行数 最高 我是专业的&#xff01;我为统计而生 count(1) 统计所有行数 同样高效 我是 count(*) 的马甲兄弟…...

实战指南:基于快马平台与Touchgal,从零开发移动端手写绘图应用

今天想和大家分享一个实战项目&#xff1a;基于Touchgal开发移动端手写绘图应用。这个项目特别适合需要复杂手势交互的场景&#xff0c;比如绘图软件、地图导航等。下面我会详细介绍整个开发流程和关键实现点。 项目初始化与环境搭建 首先需要创建一个基础的HTML5项目结构。画…...

基于博途1200PLC + HMI的交通灯控制系统仿真:打造灵活交通指挥中枢

基于博途1200PLCHMI交通灯/红绿灯控制系统仿真(时间可设置) 程序&#xff1a; 1、任务&#xff1a;PLC.人机界面控制交通灯 2、系统说明&#xff1a; 系统设有手动模式、自动模式、黄闪模式、红绿灯时间可设置、各灯可单独手动模式、故障模拟模式、数码管显示等模式运行 交通灯…...

嵌入式C语言状态机编程实践与优化

1. 状态机编程基础概念在嵌入式系统开发中&#xff0c;状态机(State Machine)是一种极其重要的编程范式。它通过定义系统可能处于的状态集合、状态之间的转换条件以及状态转换时执行的动作&#xff0c;来清晰地描述系统的行为逻辑。状态机之所以在嵌入式领域广泛应用&#xff0…...

无需本地安装,用快马平台5分钟搭建git操作可视化原型

最近在准备一个Git入门教学项目时&#xff0c;发现很多新手卡在环境配置这一步。传统方式需要先安装Git客户端、配置SSH密钥、设置全局参数&#xff0c;光是这些前置操作就能劝退不少人。于是尝试用InsCode(快马)平台的云端开发环境&#xff0c;意外发现能跳过所有安装步骤直接…...

软件实施交付转运维学习第三天:Linux系统命令基础(部分)

从实施到运维的蜕变之路&#xff0c;掌握命令就是掌握Linux的灵魂写在前面作为一名从软件实施交付转向运维的工程师&#xff0c;我深刻体会到&#xff1a;Linux命令不仅仅是简单的指令&#xff0c;更是与操作系统对话的语言。当我们站在实施和运维的交界处&#xff0c;掌握Linu…...

ANIMATEDIFF PRO教学创新:Jupyter Notebook交互式教程

ANIMATEDIFF PRO教学创新&#xff1a;Jupyter Notebook交互式教程 让AI动画学习变得像玩游戏一样有趣&#xff0c;实时调整参数&#xff0c;即刻看到效果变化 1. 引言&#xff1a;为什么需要交互式动画教学&#xff1f; 传统的AI动画教学有个痛点&#xff1a;学生写了一大段代…...