标签: picocli

Picocli 需要根据主要选项选择选项

我想用 picocli 按以下格式解析选项:

application -mode CLIENT -c aaaa -d bbbb
application -mode SERVER -e xxxx -f yyyy
Run Code Online (Sandbox Code Playgroud)

mode是一个enum有价值观的人{ CLIENT, SERVER }

  • 如果mode == CLIENT,-c-d选项是强制性的,并且-e,-f不得使用。
  • 如果mode == SERVER,-e-f选项是强制性的,并且-c,-d不得使用。

换句话说,我想根据一个关键选项来选择所需的选项。这在 picocli 中可能吗?

java parsing command-line-arguments picocli

4
推荐指数
1
解决办法
3069
查看次数

让 Picocli 与 Springboot 应用程序一起使用

我必须将大型 Spring boot 应用程序转换为灵活的 CLI 工具,其中 Spring boot 应用程序发送的请求(除其他外)由命令行中的用户输入确定。我决定使用 picocli 来实现命令行功能,但是我不知道如何做一些简单的事情,例如如果用户传递给定的选项标志,将一些文本打印到 stdout,Spring boot 只是像平常一样运行。我应该如何写这个以便 picocli 可以与 Spring boot 一起运行(并最终控制所有 Spring boot 的东西)

java spring maven spring-boot picocli

4
推荐指数
2
解决办法
4173
查看次数

CLI 与 Picocli:在调用子命令之前调用主命令

由于子命令支持(和基于注释的声明),我从 Apache Commons CLI 切换到 Picocli。

考虑一个像 这样的命令行工具git,带有像 这样的子命令push。Git 有一个主开关--verbose-v用于在所有子命令中启用详细模式。如何实现在任何子命令之前执行的主开关?

这是我的测试

@CommandLine.Command(name = "push",
        description = "Update remote refs along with associated objects")
class PushCommand implements Callable<Void> {
    @Override
    public Void call() throws Exception {
        System.out.println("#PushCommand.call");

        return null;
    }
}

@CommandLine.Command(description = "Version control", subcommands = {PushCommand.class})
public class GitApp implements Callable<Void> {
    @CommandLine.Option(names = {"-h", "--help"}, usageHelp = true, description = "Display this help message.")
    private boolean usageHelpRequested; …
Run Code Online (Sandbox Code Playgroud)

java command-line-interface picocli

3
推荐指数
1
解决办法
3454
查看次数

Picocli:如何使子命令成为必需的

我有一个带有子命令的命令。在我的应用程序中,我希望用户强制指定子命令。我该怎么做?

(另请参阅https://github.com/remkop/picocli/issues/529

command-line-arguments subcommand picocli

3
推荐指数
1
解决办法
3008
查看次数

Picocli - java.lang.NumberFormatException

@Parameters(index = "0")
private Double min_c_re;

@Parameters(index = "1")
private Double min_c_im;

@Parameters(index = "2")
private Double max_c_re;

@Parameters(index = "3")
private Double max_c_im;

@Parameters(index = "4")
private Integer max_n;

@Parameters(index = "5")
private Integer width;

@Parameters(index = "6")
private Integer height;

@Parameters(index = "7")
private Integer divisions;

@Parameters(index = "8", arity = "1..*")
private List<URL> hosts;

@Override
public void run() {
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
    List<SubDivider.SubDivision> subDividedImages = new SubDivider(divisions, divisions).divide(image);

    ExecutorService threadPool = Executors.newCachedThreadPool();
    double …
Run Code Online (Sandbox Code Playgroud)

java command-line picocli

3
推荐指数
1
解决办法
111
查看次数

具有类似选项的子命令的Java命令行解析器

我们开发了一个Java Cli应用程序,它具有带有类似选项的子命令.这就像svn:

svn commit -m messsage --username ARG --password ARG
svn checkout -r HEAD --username ARG --password ARG
Run Code Online (Sandbox Code Playgroud)

我的意思是每个子命令都有特殊的参数,我们也有全局参数,并且我们有一些参数对于某些子命令是相关的,但并不适用于所有子命令.

哪个命令行参数解析器支持该要求?

谢谢.

java command-line-arguments picocli

2
推荐指数
1
解决办法
644
查看次数

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

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

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

如果有一种更方便的方法来检测用户是否指定了这样的共享选项,那就太好了。

(另请参阅https://github.com/remkop/picocli/issues/580

shell command-line command picocli

2
推荐指数
1
解决办法
2007
查看次数

使用 Picocli,如何需要位置参数,然后根据位置参数的值需要可选参数

我遇到一种情况,我需要三个强制参数(field1field2和 )field3。然后我希望用户输入 a command name(强制,值可以是createlist等)。命令名称必须输入,并且必须是单数(只能是其中之一)可以输入它们)。

有些命令会有参数,有些则没有。我该如何处理?

我尝试了以下操作,但出现错误:

ArgGroup has no options or positional parameters, and no subgroups
Run Code Online (Sandbox Code Playgroud)
public class CliParserArgs {
    @Option(names = {"--field1"}, required = true)
    private String field1;

    @Option(names = {"--field2"}, required = true)
    String field2;

    @Option(names={"--field3"}, required = true)
    String field3;

    @Option(names = {"-h", "--help"}, usageHelp = true) boolean help;

    class Create {
        private final String val;
        public Create(final String val) {
            this.val = val;
        } …
Run Code Online (Sandbox Code Playgroud)

java command-line-arguments picocli

2
推荐指数
1
解决办法
896
查看次数

测试 pico cli 命令,Java

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

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

提前致谢

java command-line-interface picocli

2
推荐指数
1
解决办法
743
查看次数

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

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

manager -u <user> -p <pass> [list|create|delete] # run and exit
manager -u <user> -p <pass> @script              # run and exit
manager -u <user> -p <pass>                      # run shell
Run Code Online (Sandbox Code Playgroud)

需要用户名-u和密码,三个命令( 、和)各有不同的选项和参数。-plistcreatedelete

java picocli

2
推荐指数
1
解决办法
1553
查看次数

如何将外部 application.yml 加载到 Micronaut Picocli 开发的应用程序中?

  • Java:11.0.7
  • 微博:2.1.2
  • Micronaut 个人资料:cli-app

我在 cli-app 配置文件中有一个使用 micronaut 框架开发的应用程序。我的应用程序使用Hibernate和GORM包,所以application.yml中有相关配置

在默认配置中,micronaut 从 src/main/resources 加载 application.yml。

如果我希望我的应用程序从如下参数中加载 application.yml:

java -Dmicronaut.config=/etc/fooApp/application.yml -jar fooApp.jar
Run Code Online (Sandbox Code Playgroud)

我应该怎么做 ?谢谢

picocli micronaut

2
推荐指数
1
解决办法
564
查看次数

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

public class Starter  {
    public static void main(String[] args) {
        new Starter(args);
    }

    public Starter(String[] args) {
        app = ApplicationPropertiesProvider.getInstance();
        CommandLine.run(app, args);
        //then kick off the business logic …
Run Code Online (Sandbox Code Playgroud)

picocli

1
推荐指数
1
解决办法
180
查看次数

picocli:为什么这个 JUnit 测试失败?

尝试运行 JUnit 测试错误时,测试将无法正确运行

package picocli;

import picocli.CommandLine.Option;

public class ComparatorRunnerConfig {

      @Option(names = {"-rc", "--report-class"}, required = false,
              description = "define report")
      private String report;

      public String getReport() {
            return report;
      }
}
Run Code Online (Sandbox Code Playgroud)

我的 JUnit 测试:

package picocli;

import static org.junit.Assert.*;
import org.junit.Test;

public class ConfigurationTest {

    @Test
    public void testBasicConfigOptions() {
        String args = "-rc BlahBlah";
        ComparatorRunnerConfig mfc = new ComparatorRunnerConfig();
        new CommandLine(mfc).parse(args);

        String myTestValue = mfc.getReport();
        assertEquals(myTestValue, "BlahBlah");
    }
}
Run Code Online (Sandbox Code Playgroud)

测试失败。

java picocli

-2
推荐指数
1
解决办法
823
查看次数