问题标签 [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.
command-line-arguments - PicoCli 中的自定义帮助显示?
我有一个用例,我需要以指定格式发布 CLI 的整个帮助。我找到了一种使用以下方法的方法:
如果用户输入 -h 或 --help,帮助会以我想要的格式打印出来,如果他们不输入 -h 或 -H 则不会。
有一个更好的方法吗?
如果我们将来添加其他命令,那么添加它们的人必须记住更新帮助字符串。
picocli - 如何在运行时提高命令性能?
我有一个带有使用 picocli 3.9.6 的内部命令行的库。这些命令之一是log
命令,它像大多数记录器一样工作,采用日志级别和消息以及其他几个选项。在一些使用该库的应用程序中,它会被大量调用,我们注意到从一次性实现此命令与切换到 picocli 时相比,性能大幅下降。即使日志级别设置为没有任何有趣的事情发生也是如此。两个版本的核心代码相同。
因此,我们怀疑 picocli 正在使用反射来处理每个命令实例。我们怎样才能提高性能?我注意到 picocli 4.x 包含一个注释处理器,但让我们的用户使用 Graal 对我们来说是不现实的。由于注释不会跨实例更改,也许它们可以被缓存?
该log
命令的代码可以在这里找到:
我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 秒。
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 代码无法编译:
picocli - 如何自动打印子命令结果?
我有基于cliche库的 Java CLI 应用程序,我想将它迁移到 picocli。
我的应用程序基于陈词滥调,所以我有很多带有 asg.cliche.Command 注释的方法,它们返回一些结果。cliche 会自动打印命令方法的结果,因此结果是在命令行中打印的。我用 picocli.CommandLine.Command 替换了 asg.cliche.Command 注释,我看到 picocli 不打印命令方法的结果。我有以下课程:
当我打电话时,java -cp myJar.jar Foo sayHello sayGoodbye
我没有看到任何输出。我看到三个解决方案: 1.修改每个方法以打印结果而不是返回结果。
我对这个解决方案不满意。我不喜欢修改我的方法。
- 执行后检索结果。
我发现此解决方案存在一些问题。主要问题是格式。执行结果可以是null、array、collection。第二个问题是在执行所有子命令后打印结果。如果第二个子命令抛出异常,那么我首先会看到异常堆栈跟踪,然后我会看到第一个子命令的结果。
- 在stackoverflow上询问是否有更好的解决方案。我不相信 picocli 中没有任何配置选项可以启用结果打印。
command-line-interface - 无法创建具有特定概要的 CLI - 带有 Picocli 的 CLI
我想用以下概要在 picocli 中创建一个 CLI
我尝试创建嵌套组,但没有成功。有什么帮助吗?
提前致谢
java - PicoCLI:混合的依赖和排他参数
我正在尝试使用 PicoCLI 实现以下目标:
- 选项 0(帮助,详细)
- 选项 A
- 从属选项 A-1
- 从属选项 A-2
- 从属选项 A-3
- 选项 B
- 需要选项 A
- 但不允许任何选项 A-*
我不知道我是否可以使用 PicoCLI 工具进行此设置,或者我是否只是在使用自定义代码解析后进行检查。
在此状态下,选项 A 位于需要选项 A 的 ArgGroup 中,但不需要选项 A-*。选项 B 位于不同的 ArgGroup 中。我试图设置一些独占的东西,但我不知道如何让 ArgGroup/Exclusive 的东西按预期工作......
有什么提示吗?
java-8 - 重置 picocli 选项字段
我正在尝试提高此处描述的许多命令的性能。该解决方案的一部分是重用相同的Commandline
对象,该对象包装其字段包含 picocli 注释的对象。在某些情况下,此对象需要在使用之间“重置”,因为并非每个字段都由每个命令设置,并且如果某些字段具有前一个实例的旧值,则会导致错误的行为。我尝试使用注释的defaultValue
属性@Option
,但似乎没有在每次调用时重置字段值。
我是否必须编写自己的reset()
方法,或者有没有办法用 picocli 来完成?
请注意,我仍在使用 picocli 3.9.6,但我确实计划升级到 4.x,所以如果这是解决方案的一部分,那很好。
java - picocli 异常行为改变了吗?
我正在从 picocli 3.9.6 更新到 4.2.0,在用新版本替换旧的不推荐使用的调用时遇到了问题。
在我的原始版本中,我有一个这样的代码块:
ExceptionHandler
处理参数和执行异常——两者都被重新抛出,但参数异常将帮助文本添加到异常文本中。在某些情况下,例如,一个命令被赋予了错误的参数,catch 就会被击中。catch 将确保在 UI 中打印错误。
我试图像这样更新它:
在这个新版本中,异常会像以前一样被抛出,但在被ExceptionHandler
. 我怎样才能捕捉到这些异常?
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