问题标签 [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 投票
0 回答
226 浏览

picocli - picocli :将标准输出和标准错误重定向到记录器

.execute()将输出(out/err)从或重定向.parseArgs()到记录器( )的正确/最简单的方法是什么org.slf4j.Logger

(生产过程通常由调度程序执行,并输出到特定于应用程序的日志文件。如果没有重定向,stdout/err 会被转储到调度程序/服务器日志中 - 这是不合适的。因此这个问题。)

我有这样的事情:

LoggerWriter课程的灵感来自这里

0 投票
1 回答
633 浏览

java - 解析多个 picocli(子)命令和 shell

如何构建一个Spring Boot 2.3多命令 CLI 应用程序,该应用程序可以使用单个命令、@script 并在picocli中以交互方式运行?它的行为应该是这样的:

用户名-u和密码-p是必需的,三个命令(listcreatedelete)各有不同的选项和参数。

0 投票
1 回答
466 浏览

java - 两个带有 Apache Commons CLI 的专有 OptionGroup

我正在构建命令行 Java 应用程序,但在使用 Apache Commons CLI 解析命令行参数时遇到问题。

我试图涵盖我的场景,其中我需要两个具有长 (- -abc) 和短 ( -a) 参数的专有命令行参数组。

用例 1

  • 短参数:-d oracle -j jdbc:oracle:thin:@//host:port/databa
  • 相同但参数长:-dialect oracle -jdbcUrl jdbc:oracle:thin:@//host:port/databa

用例 2:

  • 短参数:-d oracle -h host -p 1521 -s database -U user -P pwd
  • 相同但参数长:-dialect oracle -host host -port 1521 -sid database -user user -password pwd

所以我OptionGroup用正确的Option项目创建了两个:

第二组:

然后我以Options这种方式构建对象:

但这不起作用,因为它希望定义这两个组。

方言Option是这样定义的:

Option除了这个属性之外,其他强制性定义看起来相似:

结果:

  • -d oracle:缺少必需的选项:[-j ...]、[-h ...、-p ...、-s ...、-U ...、-P ...]
  • -d oracle -jdbcUrl xxx:缺少必需的选项:[-h ...,-p ...,-s ...,-U ...,-P ...]
  • -d oracle -h yyy:缺少必需选项:[-j ...]

但我想要的是以下内容:如果提供了 JDBC URL,则不需要主机、端口等参数,或者相反。

0 投票
1 回答
1183 浏览

java - 为什么 picocli 不能从命令行识别我的选项?

我正在尝试使用 PICOCLI 在 Java 中构建 CLI,但我在一个非常基本的点上遇到了困难。我根本无法将我的应用程序提供给消费者一个选项和它的价值。这是我的课:

然后我做了一个mvn package,但我只遇到了这个:cd targetjava -jar demo-1.0.jar Greet -u pico

我已经没有耐心尝试打印一条简单的消息了!我不知道如何解决这个问题。请帮忙!

0 投票
1 回答
99 浏览

spring-boot - 如何将相对路径参数与 Spring Boot/picocli 可执行 jar 一起使用?

我有一个命令行应用程序,它使用 Spring Boot 和 picocli。可以传递参数,它是一个路径,例如myApp.jar /path/to/file,它将对该文件执行某些操作。我想在系统范围内使用这个应用程序,所以我将可执行文件.jar放入/usr/bin/并将其重命名为myApp.

现在,当我将它与绝对路径一起使用时:myApp /home/user/file它工作正常,但我想传递相对路径,例如,当我在时,/home/user/我希望它是myApp ./file. 问题是它尝试使用相对路径/usr/bin/file而不是/home/user/file.

我目前使用的解决方法是这样的:myApp $(pwd)/file.

你知道如何解决这个问题吗?

0 投票
1 回答
146 浏览

java - 如何从字符串选项中转义字符

我有一个简单的 java 应用程序,带有一个命令和几个选项。对于我想传递带有单引号和空格的字符串的选项之一。可能吗?

我使用 picocli 4.5.0。以下是我想要实现的

我设置trimQuotesfalse,但出现错误

是否可以转义整个字符串/选项?

0 投票
1 回答
263 浏览

java - 将基于 picocli 的 CLI 使用输出解析为结构化数据

我有一组基于 picocli 的应用程序,我想将使用输出解析为结构化数据。到目前为止,我已经编写了三个不同的输出解析器,但我对其中任何一个都不满意(脆弱性、复杂性、扩展困难等)。关于如何干净地解析这种类型的半结构化输出有什么想法吗?

使用输出通常如下所示:

我想将程序名称和描述、选项、参数和参数组及其描述捕获到agent

程序名称taker-mvo-2和(可能是多行的)描述在(可能是多行的)参数列表之后:

选项(在方括号中)应该被解析为:

解析选项的 JSON 是:

同样对于应该解析成的参数:

和参数组,它们被包围(并且)...应该被解析为:

我编写的第一个手写解析器遍历缓冲区,在数据处理过程中捕获数据。它工作得很好,但看起来很可怕。而且扩展很可怕。第二个手写解析器在遍历缓冲区时使用正则表达式。比第一个更好看,但仍然丑陋且难以扩展。第三个解析器使用正则表达式。可能是这群人中最好看的,但仍然丑陋且难以管理。

我认为手动解析此文本非常简单,但现在我想知道 ANTLR 是否可能是一个更好的工具。有什么想法或替代想法吗?

0 投票
1 回答
414 浏览

java - 在 Intellij maven 项目中使用模块设置 picocli 注释处理器

我不知道如何在基于 maven 的 intellij 项目中设置 picocli Anotation 处理器。

考虑以下主要 pom:

picocli 代码位于核心模块中。但是,只要我在编译器插件中添加配置,我的所有 IntlliJ 配置都会变得无效。我将 pico 配置放在主模块还是核心中都没关系,两者都不起作用。核心模块 pom 仅用于测试和打包。

该代码仍可编译并可用作 jar(无编译时错误检查),但不能在 IntelliJ 中使用。该示例有效。但它不使用模块。

我该怎么做才能在intelliJ中修复它?

0 投票
1 回答
171 浏览

java - 使用 picocli 时如何通过命令行参数配置 lightbend/typesafeConfig

在我们的项目中,我们使用Lightbend Config / TypesafeConfig。

我可以运行我的程序java -jar。我的程序的配置也可以使用命令行参数来完成。

例子:

现在我介绍了https://picocli.info/以便为我的应用程序提供更好的命令行处理。

我现在面临的问题是,picocli 不允许在标准配置中使用 -D... 参数。

这怎么能改变?

0 投票
1 回答
71 浏览

command-line-interface - 文本格式不适用于 CLI - 使用 PICOCLI java

我一直在尝试在CLI上显示格式化文本。我尝试了picocli docs (doc link)中提供的完全相同的代码,但似乎没有应用格式。

请帮助我找出我的错误。

预期产出

格式化示例

我的代码

我的输出(未应用格式)

我的输出

PS。我使用picocli v 4.5.2,将项目导出为可运行 jar,并使用Launch4j将其构建为.exe。在 Windows 10 的命令提示符下执行结果exe