问题标签 [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.
picocli - Picocli:类属性填充和应用程序执行的单独职责
在使用 cli 之前,我将有一个启动类,它调用我的 ApplicationPropertiesProvider 类(它读取我的属性文件),然后启动业务逻辑。所以有一个分离,ApplicationPropertiesProvider 只做一份工作。
现在有了 picocli,指南/文档说明我必须使用 CommandLine.run(objectToPopulate, args) 或 CommandLine.call(objectToPopulate, args)。因此,使用 cli 参数 (ApplicationPropertiesProvider) 填充的类必须实现 Runnable 或 Callable。现在我可以将 Starter 类的启动代码粘贴到 run() 或 call() 方法中,然后放弃 Starter 类。但我不喜欢这样,我想将只持有属性的类和我的 Starter 类分开。
我想到并在下面的示例中显示的一种肮脏的解决方法是将参数从 main 方法传递给我的 Starter 类的构造函数,使用 CommandLine.run() 填充 ApplicationPropertiesProvider 但只实现一个空的 run() 或 call( ) 方法,因此它将立即返回到我的 Starter 类,然后我将在其中启动业务逻辑。这将是我要求(分离)的结果,但那样看起来真的很愚蠢。
还有一个刚刚出现的问题:如果我有多个包含业务代码的类以及它们自己的属性(而不是提供单个属性的类)的标准情况:是否可以使用一个 cli 调用填充多个不同的类,即调用“test.jar command --a --b”,其中参数“a”直接指向“X”类的实例,“b”指向“Y”的实例?
java - 使用 picocli 解析 Java 程序选项在 Spinnaker Run Job 阶段不起作用
我使用 gradle 应用程序插件的运行任务运行带有 args 的 java 主程序。该程序使用 picocli 解析命令行参数。当使用以下命令在我的开发环境中运行时,这可以正常工作:
当我 ssh 进入我的应用程序 docker 映像的 docker 容器时,它也运行良好。
但是,如果我在 Spinnaker 管道 Run Job 阶段使用相同的 docker 映像运行相同的 Gradle 运行任务,则它不起作用。日志语句显示参数被程序正确接收但没有被 picocli 处理。我猜这是因为 picocli 的代码生成器由于某种原因没有在 Spinnaker 管道的运行作业中运行。
任何建议如何解决这个问题。
shell - Picocli:如何在父命令和子命令之间共享选项
如何支持所有(或部分)命令和子命令的共享选项?例如,如果最终用户--stacktrace
在命令行参数中的任何位置提供,则打印的任何错误都将包括堆栈跟踪。
我们可以使用 Mixin 来定义一个布尔--stacktrace
选项,并将这个 Mixin 包含在所有(子)命令中,或者使用继承并让所有命令子类化一个定义布尔--stacktrace
选项的类,但无论哪种方式,都会定义一个单独的布尔选项每个命令。哪个选项为真取决于用户在 args 中放置的位置--stacktrace
,因此确定是否--stacktrace
提供了将意味着遍历所有父命令并查看是否有任何为真。
最好有一种更方便的方法来检测用户是否指定了这样的共享选项。
java - 如何处理 picocli 中的错误?
我尝试实现自己的 CLI,并希望使用 picocli 来解析命令的参数。这就是为什么我根本不希望 picocli 在控制台中写入。所以我创建了MyCommand
带有一些选项和参数注释的类。现在我希望能够做这样的事情:
前三行没有问题,但我不确定如何处理第四行。现在populateCommand
只是抛出所有异常,捕获它们不是一种选择,因为抛出的异常将停止我的管道计算。Picocli 文档建议对要存储的异常使用解析器宽松模式ParseResult
,但这意味着我必须使用commandLine.parseWithHandlers
难以满足我需求的方法。
我错过了什么吗?也许我可以使用populateCommand
并将异常存储在某个地方?
这是populateCommand
引发的异常之一的堆栈跟踪:
java - picocli 不适用于 cmd.exe 中的 jline3
我想将 picocli 与 jline3 一起使用。所以我用下面的 pom.xml 创建了一个项目:
现在我从picocli github 页面复制了一个类:
如果我在 Eclipse IDE 中运行代码,我可以在控制台中编写命令并得到答案。但是如果我用 maven 创建一个 jar 文件,它就不起作用。我收到以下错误:
错误:无法初始化主类 com.flaxel.picocli.App 原因:java.lang.NoClassDefFoundError: org/jline/reader/UserInterruptException
我使用 Eclipse 2018-09 和 Java 11。
scala - 用于 picocli graalvm 反射生成的 Sbt 任务?
在 picocli 中,他们给出了如何在构建 Maven 和 Gradle 期间生成 GraalVM 反射配置的示例。
摇篮示例
任务
我怎么能为 sbt 写一些等效的东西?
这是我到目前为止所得到的,但我不知道我是否朝着正确的方向前进。
编辑
在我最初的问题中,我有下面的代码,用我当前的代码问题解决了
groovy - 如何将 picocli groovy-grape 脚本转换为本机独立应用程序?
我用 picocli 制作了我的第一个 groovy CLI 应用程序。现在,我希望它可以在客户端机器上不安装任何 JVM 的情况下使用,也许可以使用 GraalVM。这是一个开源项目: https ://github.com/kchaitanya863/db2csv
picocli - 带有 picocli 的缺少参数的非零退出代码
我有一个简单Command
的强制性参数:
当我在没有参数的情况下从命令行调用它时,我得到了预期的消息:
但是:调用的返回码为java
0,表示一切正常。如果参数(或选项)丢失/不正确,有没有办法picocli
返回非零代码?
java - Picocli:如何处理没有参数和选项的情况
我正在使用 picocli java 命令行库来实现命令行应用程序。但是,我想知道 picocli 是否提供了一项功能,可以帮助处理命令行不接收任何参数或选项的情况(默认情况下)。
谢谢
positional-parameter - 完成picocli中位置参数的候选者
我正在尝试为位置参数提供补全。在某个地方我发现它们没有得到很好的支持,但目前我无法在规范中找到确切的位置,我不确定这真正意味着什么。
与此同时,我在来源中发现了 CompletionCandidatesTest.java,这表明它们以某种方式受到支持,或者至少准备支持它。
这就是为什么我想知道它们是否有效,如果有效,我做错了什么。目前我在 Groovy 中的代码如下所示:
我执行了如下所需的 bash 命令:
它就像一个选项的魅力。不幸的是,我无法使其适用于参数。我也试图:
- 删除 @Option 并仅保留 @Parameters
- 将索引放入参数