Apache Common CLI:如何添加参数?

2024-03-05

我正在将 Common CLI 用于个人项目。我从文档中没有找到的一件事是如何强制呈现某个参数。

为了澄清我的问题,我可以定义参数和选项之间的区别,命令:

    mycommand file.txt -b 2

mycommand is the command, 
file.txt is the argument
-b 2 is the option where 2 is the option value

使用 Common CLI,我可以添加 -b 2 作为选项,如下所示:

    options.addOption( "b", true, "Some message" );

并使用以下方法解析参数:

CommandLineParser commandParser = new GnuParser();
CommandLine result = commandParser.parse(options, args)

但我如何指定 file.txt 也是必需的?

非常感谢


编辑:我没有意识到你的意思是使目标(而不是选项)成为必需的。

如果使用完整解析方法CommandLineParser.parse(Options, String[], boolean)将可选标志设置为 false,则解析器将跳过未知参数。

您可以稍后通过该方法检索它们getArgs()返回一个 String[]

然后您可以检查这些字符串以确保有一个名为 file.txt 的字符串

Options options = new Options();

options.addOption("b", true, "some message");

String[] myArgs = new String[]{"-b","2", "file.txt"};
CommandLineParser commandParser = new GnuParser();

CommandLine commandline = commandParser.parse(options, myArgs, false);

System.out.println(Arrays.toString(commandline.getArgs()));

会打印[file.txt]到屏幕上。

因此,您添加一个额外的检查来搜索该数组以查找任何所需的目标:

boolean found=false;
for(String unparsedTargets : commandline.getArgs()){
    if("file.txt".equals(unparsedTargets)){
        found =true;
    }
}
if(!found){
    throw new IllegalArgumentException("must provide a file.txt");
}

我同意这很混乱,但我不认为 CLI 提供了一种干净的方法来做到这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache Common CLI:如何添加参数? 的相关文章

随机推荐

  • 让 Flex 容器采用内容的宽度,而不是宽度 100%

    在下面的示例中 我有一个具有以下样式的按钮 button flexbox approach other button styles display flex justify content center align items center
  • 如何使用 Windows api 更改时区设置

    我需要在我的应用程序中通过 API 更改 DST 和时区 我在以下链接末尾修改并复制了 GetTimeZoneInformation 用法的示例并运行了它 http msdn microsoft com en us library wind
  • 来自 gstatic 的 PhantomJS JavaScript 错误,但浏览器中没有错误

    我最近通过 PhantomJS 测试套件运行我们的网站 遇到了无法在浏览器中手动重现的 JavaScript 错误 这些错误是在 Google 地图 api 中发现的 Capybara 返回的文本如下 TypeError Unable to
  • 如何连接多个queryDSL表

    我有一些表 我想使用 queryDSL 连接获取结果 但没有找到任何使用 queryDSL 进行多个连接的示例 我有这些表 账户表 accountId PK 电子邮件 密码 account profile 表 accountId PK fk
  • 为什么我可以在模式匹配中将 :: 运算符与 Seq 一起使用,但在其他地方却不能

    所以我对 Scala 中 Seq 的这种行为感到非常困惑 使用模式匹配时 我可以使用 or 运算符 它们似乎可以互换 val s Seq 1 2 3 s match case x l gt 但是当我尝试使用时 在不同的情况下像这样 val
  • 如何使用 dnotify /inotify 命令持续监控目录

    我是 dnotify inotify 命令的新手 任何人都可以帮助我如何编写一个脚本 以便它持续监视目录并指示它有一些更改或修改 Inotify 本身是一个内核模块 可以通过调用来访问 例如一个 C 程序 https linux die n
  • 更新 AWS S3 对象密钥(密钥名称)

    我需要重命名 AWS S3 存储桶中存储的大量文件 每个文件 对象将单独重命名 基于特定标准 没有通用的 前缀 后缀 我想出了 current filename 和 new filename 的列表 它们可以作为 bat 文件 队列在 CL
  • 与 ANT 模式语法的混淆和可能的变化

    我正在开发 ANT 模式解析器 作为大型服务器项目的一部分 这篇文章的答案中有一些很好的 ANT 模式示例 如何使用 Nant Ant 命名模式 https stackoverflow com questions 69835 how do
  • Android 12 - 致命异常:android.content.res.Resources$NotFoundException

    我在 Android 12 设备上收到以下错误 Fatal Exception android content res Resources NotFoundException Resource ID 0x20c0025 at android
  • 将成员对象的引用添加到指针数组

    我有一个类 其中包含一些包含对象的私有成员和一个动态指针数组 我想用指向其中一些成员对象的指针填充该数组 class NextionTest public NextionDisplay private NexText lblText Nex
  • Sequelize 和 Postgres 按距点的距离排序

    我在搜索时遇到问题 包括按距某个点的距离排序 这是我的代码以及我正在尝试做的事情 感谢帮助 const Sequelize require sequelize var Flat db define flat id type Sequeliz
  • React 中的事件驱动方法?

    我想在一个组件中 触发一个事件 并让其他组件 订阅 该事件并在 React 中执行一些工作 例如 这是一个典型的 React 项目 我有一个模型 从服务器获取数据 并使用该数据呈现多个组件 interface Model id number
  • Android,在网络共享和连接到接入点时检测 WiFi 的本地 IP 和子网掩码

    我需要检测本地IP地址和子网掩码在 WiFi 网络上 在 Android 设备上 为了严格计算本地子网的 UDP 广播地址 当设备连接到接入点时 以下功能正常工作 Only works when NOT tethering WifiMana
  • Nuxt不会自动从嵌套目录导入组件

    在我的 nuxt 应用程序中 嵌套目录中的组件不会按预期自动导入 对于我的一些组件 我有如下内容 vue 2 6 12 nuxt 2 15 0 components 目录结构 TopArea SomeComponent vue
  • WPF 用户控件而非数据绑定

    在我的用户控件中 我有一个不是数据绑定的依赖属性 我查看了几篇堆栈溢出帖子 但我无法弄清楚我做错了什么 永远不会调用属性更改方法 到目前为止我的代码 我的用户控件基本上是一个增强的组合框 DP 位于用户控件内部 我正在数据网格内使用此用户控
  • 如何使用python将一幅图像的相位和不同图像的幅度组合成一幅图像

    我想将一幅图像的相位谱和不同图像的幅度谱组合成一幅图像 我得到了图像A和图像B的相位谱和幅度谱 这是代码 f np fft fft2 grayA fshift1 np fft fftshift f phase spectrumA np an
  • 数据库设计 - 一个表中的列引用两个表

    这是我所拥有的一个示例 以 Stack Overflow 为例 我有2张桌子 Questions and Answers 我也有一个Comments桌子 评论表将引用问题和答案 我应该如何设置数据库 评论中有 2 列 即 QuestionI
  • HTTP 响应中标头的顺序重要吗?

    标题的顺序是否有意义 A 1 B 2 vs B 2 A 1 我试图弄清楚是否可以使用字典来存储标题列表 或者它是否需要是某种列表或有序字典 不 具有不同名称的标头并不重要 看RFC 2616 https www rfc editor org
  • 使用 Q Promise 进行串行执行

    我想我误解了如何Q https github com kriskowal q承诺工作 我希望我的第一个承诺在下一个承诺开始之前得到解决 但这并没有发生 这是我的代码 var Q require q function doWork taskN
  • Apache Common CLI:如何添加参数?

    我正在将 Common CLI 用于个人项目 我从文档中没有找到的一件事是如何强制呈现某个参数 为了澄清我的问题 我可以定义参数和选项之间的区别 命令 mycommand file txt b 2 mycommand is the comm