问题标签 [picocli]

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 回答
622 浏览

command-line-arguments - PicoCli 中的自定义帮助显示?

我有一个用例,我需要以指定格式发布 CLI 的整个帮助。我找到了一种使用以下方法的方法:

如果用户输入 -h 或 --help,帮助会以我想要的格式打印出来,如果他们不输入 -h 或 -H 则不会。

有一个更好的方法吗?

如果我们将来添加其他命令,那么添加它们的人必须记住更新帮助字符串。

0 投票
1 回答
130 浏览

picocli - 如何在运行时提高命令性能?

我有一个带有使用 picocli 3.9.6 的内部命令行的库。这些命令之一是log命令,它像大多数记录器一样工作,采用日志级别和消息以及其他几个选项。在一些使用该库的应用程序中,它会被大量调用,我们注意到从一次性实现此命令与切换到 picocli 时相比,性能大幅下降。即使日志级别设置为没有任何有趣的事情发生也是如此。两个版本的核心代码相同。

因此,我们怀疑 picocli 正在使用反射来处理每个命令实例。我们怎样才能提高性能?我注意到 picocli 4.x 包含一个注释处理器,但让我们的用户使用 Graal 对我们来说是不现实的。由于注释不会跨实例更改,也许它们可以被缓存?

log命令的代码可以在这里找到:

https://github.com/soartech/jsoar/blob/maven/jsoar-core/src/main/java/org/jsoar/kernel/commands/LogCommand.java

testPerformance在这里添加了一个单元测试:https ://github.com/soartech/jsoar/blob/maven/jsoar-core/src/test/java/org/jsoar/kernel/commands/LogCommandTest.java

在我的机器上运行单元测试会产生约 3 秒的时间。如果我回到提交2bc4d39549eeb4ad69fd45e97f9607475e6426d9(2018 年 10 月 30 日),就在log命令转换为 picocli 之前,并将测试放在那里(你可以用较新的版本替换整个单元测试文件),我得到了 ~ 0.03 秒。

0 投票
1 回答
1201 浏览

java - 测试 pico cli 命令,Java

我开发了一个 Java API,并构建了一个命令行界面来使用PicoCli使用它

测试我的 pico 命令的正确方法是什么?

提前致谢

0 投票
1 回答
298 浏览

groovy - 使用 Picocli 在 Groovy 中创建 CLI 工具

我正在将 Picocli 与 Groovy 一起使用来创建 CLI 工具,我按照此处的示例进行操作: https ://picocli.info/picocli-2.0-groovy-scripts-on-steroids.html

这个例子效果很好。但是无法在 Groovy 中获得多个子命令的简单工作示例。我想从 jar 中执行它,例如: java -jar picapp -count [number of times] java -jar picapp -names[List of name/s]

所以:

我想我正在尝试以这种格式实现功能: https ://github.com/remkop/picocli/blob/master/picocli-examples/src/main/java/picocli/examples/subcommands/SubCmdsViaMethods.java

下面的 Groovy 代码无法编译:

0 投票
1 回答
259 浏览

picocli - 如何自动打印子命令结果?

我有基于cliche库的 Java CLI 应用程序,我想将它迁移到 picocli。

我的应用程序基于陈词滥调,所以我有很多带有 asg.cliche.Command 注释的方法,它们返回一些结果。cliche 会自动打印命令方法的结果,因此结果是在命令行中打印的。我用 picocli.CommandLine.Command 替换了 asg.cliche.Command 注释,我看到 picocli 不打印命令方法的结果。我有以下课程:

当我打电话时,java -cp myJar.jar Foo sayHello sayGoodbye我没有看到任何输出。我看到三个解决方案: 1.修改每个方法以打印结果而不是返回结果。

我对这个解决方案不满意。我不喜欢修改我的方法。

  1. 执行后检索结果。

我发现此解决方案存在一些问题。主要问题是格式。执行结果可以是null、array、collection。第二个问题是在执行所有子命令后打印结果。如果第二个子命令抛出异常,那么我首先会看到异常堆栈跟踪,然后我会看到第一个子命令的结果。

  1. 在stackoverflow上询问是否有更好的解决方案。我不相信 picocli 中没有任何配置选项可以启用结果打印。
0 投票
1 回答
51 浏览

command-line-interface - 无法创建具有特定概要的 CLI - 带有 Picocli 的 CLI

我想用以下概要在 picocli 中创建一个 CLI

我尝试创建嵌套组,但没有成功。有什么帮助吗?

提前致谢

0 投票
1 回答
625 浏览

java - PicoCLI:混合的依赖和排他参数

我正在尝试使用 PicoCLI 实现以下目标:

  • 选项 0(帮助,详细)
  • 选项 A
    • 从属选项 A-1
    • 从属选项 A-2
    • 从属选项 A-3
  • 选项 B
    • 需要选项 A
    • 但不允许任何选项 A-*

我不知道我是否可以使用 PicoCLI 工具进行此设置,或者我是否只是在使用自定义代码解析后进行检查。

在此状态下,选项 A 位于需要选项 A 的 ArgGroup 中,但不需要选项 A-*。选项 B 位于不同的 ArgGroup 中。我试图设置一些独占的东西,但我不知道如何让 ArgGroup/Exclusive 的东西按预期工作......

有什么提示吗?

0 投票
1 回答
60 浏览

java-8 - 重置 picocli 选项字段

我正在尝试提高此处描述的许多命令的性能。该解决方案的一部分是重用相同的Commandline对象,该对象包装其字段包含 picocli 注释的对象。在某些情况下,此对象需要在使用之间“重置”,因为并非每个字段都由每个命令设置,并且如果某些字段具有前一个实例的旧值,则会导致错误的行为。我尝试使用注释的defaultValue属性@Option,但似乎没有在每次调用时重置字段值。

我是否必须编写自己的reset()方法,或者有没有办法用 picocli 来完成?

请注意,我仍在使用 picocli 3.9.6,但我确实计划升级到 4.x,所以如果这是解决方案的一部分,那很好。

0 投票
1 回答
228 浏览

java - picocli 异常行为改变了吗?

我正在从 picocli 3.9.6 更新到 4.2.0,在用新版本替换旧的不推荐使用的调用时遇到了问题。

在我的原始版本中,我有一个这样的代码块:

ExceptionHandler处理参数和执行异常——两者都被重新抛出,但参数异常将帮助文本添加到异常文本中。在某些情况下,例如,一个命令被赋予了错误的参数,catch 就会被击中。catch 将确保在 UI 中打印错误。

我试图像这样更新它:

在这个新版本中,异常会像以前一样被抛出,但在被ExceptionHandler. 我怎样才能捕捉到这些异常?

0 投票
2 回答
138 浏览

java - Picocli - java.lang.NumberFormatException

当我运行命令时java -jar target/cli-1.0.0.jar -1 -1.5 2 1.5 1024 10000 10000 4 http://localhost:8080

我得到这个例外:

使用 picocli 版本 2.3.0