问题标签 [apache-commons-cli]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
195 浏览

java - Commons CLI 不支持我的命令行设置

在此处使用Apache Commons CLI 1.2。我有一个需要 2 个运行时选项的可执行 JAR,fizz并且buzz;两者都是需要参数/值的字符串。我希望如果可能的话)我的应用程序像这样执行:

java -jar myapp.jar -fizz "好吧,那么!" -buzz “现在保重,那么再见!”

在这种情况下,fizz选项的值将是“ Alrighty,then! ”等。

这是我的代码:

当我运行它时,我得到以下输出:

嘶嘶声是:空

我需要对我的代码做些什么,以便我的应用程序可以按我想要的方式调用?或者我最接近它的地方是什么?

加分:OptionBuilder如果有人可以向我解释'swithArgName(...)和参数之间的区别withLongOpt(...)create(...)因为我为它们传递了相同的值,如下所示:

0 投票
2 回答
2616 浏览

java - Java:Apache commons-cli 如何处理相互依赖的选项

我对 Apache commons-cli v1.3 有点苦恼,但我还没有找到解决以下问题的实用解决方案:

我有一个命令行工具 - 根据指定的参数 - 创建一个字符串(或从本地文件中读取它),可能对其进行内联编辑,并可选择显示、将所述字符串写入本地文件或通过 HTTP 请求发送它到服务器。

所以我有选项“c”代表“create”,“r”代表“read”,“e”代表“edit”(通过 cli),“d”代表显示,“w”代表“write”,以及“ p”代表“推送到服务器”

显然,一些组合是可能的。例如,应该可以创建此字符串并推送它,而无需从文件读取或写入它。此外,应该可以在不推送的情况下创建和编写,等等......

所以参数的语义是:

显然,当 String 被“c”读取时,它一定不能被“r”读取。当“c”reating 时,我会使用来自 cli-parser 的交互式输入。当“r”阅读时,我想允许用户通过 cli 的交互式输入“e”dit。其余参数是可选的。

下一个:“r”阅读时,需要指定文件名/路径。此外,在“写作”时,这是必要的。无论如何,应该可以指定要读取的文件和要写入的第二个文件。所以文件名会有两个参数,它们都是可选的。

生成的语法如下所示:

等等。

我在这里有点迷路了。如何将 commons-cli 配置为具有两个文件名参数,根据指定的参数(选项)需要这些参数?这甚至可能吗?

0 投票
1 回答
567 浏览

shell - apache commons-cli 如何解析 \\t 字符

我需要在 commons-cli 中将 tab 作为参数传递。当我将参数设为“\\t”时,命令行解析器会将其解析为“\t”字符本身,而不是 TAB ( ) 空格。我怎样才能做到这一点?

编辑 :

正如@centic 所建议的,用我如何调用应用程序来更新问题。我在 Unix 中使用命令行调用,其中反斜杠被检测为转义字符。

更准确地说,我在提交 hadoop 流作业时使用它,如果这有帮助的话。例如:

hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar -D stream.map.output.field.separator="\t" -file mapper.py -mapper mapper.py -file reducer.py -reducer reducer.py -input /in -output /out

Apache Hadoop 使用 Apache Commons-cli 作为命令行实用程序。所以我假设“\\t”解析为“\t”并作为选项传递。但是当我通过调试 hadoop 源代码打印它时,它不是 TAB 空格字符,而是打印为“\t”(字符串文字)本身。

0 投票
1 回答
5511 浏览

java - Apache commons CLI 的条件命令行选项

我目前正在使用 Apache 的通用 CLI 库来解析命令行选项,我想知道是否有一种简单的方法来满足条件要求。

例如,在下面的示例中,我有两个必需选项-a-b一个 optional -h,它应该显示一些描述。解析器现在的工作方式是,只要缺少一个必需的选项,它就会抛出 ParserException。到目前为止,一切都很好。我的问题是是否有办法在-h指定时不寻找所需的选项。由于这很常见,-h应该只打印帮助而不实际启动我的应用程序,我想跳过检查其他命令行选项。

0 投票
0 回答
256 浏览

java - 如何从 UNIX 执行实现 Apache CLI 的 JAR

我使用 Apache CLI 库创建了一个可执行的 jar 文件。我在eclipse中开发了这个程序,它运行得很好。但是,我需要在 UNIX (solaris) 环境中执行此操作,但似乎没有任何效果。这是我使用的命令

$cPath 有我需要的所有 jar 的路径。

当我尝试执行此操作时,我收到一条错误消息,指出它找不到 Apache CLI 的 JAR。所以,这是我的问题

在尝试在 UNIX 中实现 CLI 时,我有正确的语法吗?

我是否正确设置了所需 JAR 的路径?

请指教。

编辑

好的,这就是我尝试过的。我为我的 jar 执行了主类

这行得通!但是,当我将所有文件 jar 并尝试执行时

这会引发异常

所以基本上,它找不到我猜的cli jar。我还尝试在我创建的 jar 文件中包含我需要的所有库,但我仍然得到同样的错误。

请指教。

编辑 2

另一个更新。

这行得通

但我不想提供主类的名称。我已经在清单文件中定义了它。

请指教。

0 投票
4 回答
16918 浏览

java - ClassNotFoundException:org.apache.commons.cli.ParseException 与 maven

我正在尝试从 linux 的命令行运行一个 java 项目:

$ java -jar 目标/my-app.jar -csv test.csv

并得到了这个错误

我正在使用 maven-3,这里是我的构建 maven 配置:

还有我的 commons-cli 依赖声明

如果我将代码和依赖项删除到我的类中,我不会再收到错误。

谢谢 !

0 投票
2 回答
3272 浏览

java - java.lang.IllegalAccessError 在调用 CommandLineParser#parser 时使用 org.apache.commons.cli

我正在尝试使用 Apache Commons CLI 库来解析 Eclipse 项目中的命令行选项,大致遵循其使用场景中的示例

我将该commons-cli-1.3.1文件夹添加到libEclipse 项目根目录中的文件夹中。

我将此添加到我的导入中:

这是我最重要的main

它编译没有错误,但是当它运行parser.parse调用时会产生这个错误:

此时我没有使用任何类加载器。

这个错误是什么意思?如何解决错误并解析参数?

0 投票
2 回答
6317 浏览

java - Java Apache CLI 可选命令行参数不起作用

尝试Apache Commons Command Line Interface 1.3.1 从这里使用 它对于必需的参数效果很好,但似乎删除了任何可选参数。谁能发现我下面的代码有问题?

上述代码的输出是:

为什么“mysecondarg”没有被捕获?如果我将 .optionalArg(true) 行更改为 .hasArg(true),则会捕获第二个参数,但整个想法是能够有选择地忽略第二个参数。

0 投票
1 回答
1379 浏览

java - 命令行中的 Commons CLI 空选项

我不明白如何在 Commons CLI 中Options申请DefaultParser

创建CommandLine对象时,assignedOptions始终为空。

下面的代码块是我解释 Commons CLI 文档的方式:

为什么它line.getOptions()是空的,以及如何正确应用选项?

0 投票
1 回答
695 浏览

java - Java Apache Commons CLI 找不到 setArgs()

我正在尝试将多个参数传递给 java 程序。Apache Commons CLI 界面已正确设置并且可以正常工作。但是,当我尝试使用

setArgs(Option.UNLIMITED_VALUES),它给了我一个错误

The method setArgs(int) is undefined for the type Options.

我的代码如下所示: