问题标签 [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 回答
211 浏览

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”的实例?

0 投票
1 回答
283 浏览

java - 使用 picocli 解析 Java 程序选项在 Spinnaker Run Job 阶段不起作用

我使用 gradle 应用程序插件的运行任务运行带有 args 的 java 主程序。该程序使用 picocli 解析命令行参数。当使用以下命令在我的开发环境中运行时,这可以正常工作:

当我 ssh 进入我的应用程序 docker 映像的 docker 容器时,它也运行良好。

但是,如果我在 Spinnaker 管道 Run Job 阶段使用相同的 docker 映像运行相同的 Gradle 运行任务,则它不起作用。日志语句显示参数被程序正确接收但没有被 picocli 处理。我猜这是因为 picocli 的代码生成器由于某种原因没有在 Spinnaker 管道的运行作业中运行。

任何建议如何解决这个问题。

0 投票
1 回答
942 浏览

shell - Picocli:如何在父命令和子命令之间共享选项

如何支持所有(或部分)命令和子命令的共享选项?例如,如果最终用户--stacktrace在命令行参数中的任何位置提供,则打印的任何错误都将包括堆栈跟踪。

我们可以使用 Mixin 来定义一个布尔--stacktrace选项,并将这个 Mixin 包含在所有(子)命令中,或者使用继承并让所有命令子类化一个定义布尔--stacktrace选项的类,但无论哪种方式,都会定义一个单独的布尔选项每个命令。哪个选项为真取决于用户在 args 中放置的位置--stacktrace,因此确定是否--stacktrace提供了将意味着遍历所有父命令并查看是否有任何为真。

最好有一种更方便的方法来检测用户是否指定了这样的共享选项。

(另见https://github.com/remkop/picocli/issues/580

0 投票
1 回答
1265 浏览

java - 如何处理 picocli 中的错误?

我尝试实现自己的 CLI,并希望使用 picocli 来解析命令的参数。这就是为什么我根本不希望 picocli 在控制台中写入。所以我创建了MyCommand带有一些选项和参数注释的类。现在我希望能够做这样的事情:

前三行没有问题,但我不确定如何处理第四行。现在populateCommand只是抛出所有异常,捕获它们不是一种选择,因为抛出的异常将停止我的管道计算。Picocli 文档建议对要存储的异常使用解析器宽松模式ParseResult,但这意味着我必须使用commandLine.parseWithHandlers难以满足我需求的方法。
我错过了什么吗?也许我可以使用populateCommand并将异常存储在某个地方?
这是populateCommand引发的异常之一的堆栈跟踪:

0 投票
2 回答
1099 浏览

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。

0 投票
2 回答
210 浏览

scala - 用于 picocli graalvm 反射生成的 Sbt 任务?

在 picocli 中,他们给出了如何在构建 Maven 和 Gradle 期间生成 GraalVM 反射配置的示例。

摇篮示例

任务

我怎么能为 sbt 写一些等效的东西?

这是我到目前为止所得到的,但我不知道我是否朝着正确的方向前进。

编辑

在我最初的问题中,我有下面的代码,用我当前的代码问题解决了

0 投票
3 回答
154 浏览

groovy - 如何将 picocli groovy-grape 脚本转换为本机独立应用程序?

我用 picocli 制作了我的第一个 groovy CLI 应用程序。现在,我希望它可以在客户端机器上不安装任何 JVM 的情况下使用,也许可以使用 GraalVM。这是一个开源项目: https ://github.com/kchaitanya863/db2csv

0 投票
1 回答
526 浏览

picocli - 带有 picocli 的缺少参数的非零退出代码

我有一个简单Command的强制性参数:

当我在没有参数的情况下从命令行调用它时,我得到了预期的消息:

但是:调用的返回码为java0,表示一切正常。如果参数(或选项)丢失/不正确,有没有办法picocli返回非零代码?

0 投票
1 回答
784 浏览

java - Picocli:如何处理没有参数和选项的情况

我正在使用 picocli java 命令行库来实现命令行应用程序。但是,我想知道 picocli 是否提供了一项功能,可以帮助处理命令行不接收任何参数或选项的情况(默认情况下)。

谢谢

0 投票
1 回答
304 浏览

positional-parameter - 完成picocli中位置参数的候选者

我正在尝试为位置参​​数提供补全。在某个地方我发现它们没有得到很好的支持,但目前我无法在规范中找到确切的位置,我不确定这真正意味着什么。

与此同时,我在来源中发现了 CompletionCandidatesTest.java,这表明它们以某种方式受到支持,或者至少准备支持它。

这就是为什么我想知道它们是否有效,如果有效,我做错了什么。目前我在 Groovy 中的代码如下所示:

我执行了如下所需的 bash 命令:

它就像一个选项的魅力。不幸的是,我无法使其适用于参数。我也试图:

  • 删除 @Option 并仅保留 @Parameters
  • 将索引放入参数