【问题标题】:Create CLI tool in Groovy with Picocli使用 Picocli 在 Groovy 中创建 CLI 工具
【发布时间】:2020-01-10 10:44:28
【问题描述】:

我正在使用 Picocli 和 Groovy 来创建一个 CLI 工具,我按照这里的示例进行操作: https://picocli.info/picocli-2.0-groovy-scripts-on-steroids.html

这个例子效果很好。 但是无法在 Groovy 中获得多个子命令的简单工作示例。我想从 jar 中执行它,例如: java -jar picapp -count [次数] java -jar picapp -names[名称列表]

所以:

java -jar picapp count 3 
outputs: 
hi, hi , hi

java -jar picapp names bob john
outputs:
hi bob
hi john

我想我正在尝试以这种格式实现功能: https://github.com/remkop/picocli/blob/master/picocli-examples/src/main/java/picocli/examples/subcommands/SubCmdsViaMethods.java

下面的 Groovy 代码无法编译:

@Grab('info.picocli:picocli:2.0.3')
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Model.CommandSpec;
import picocli.CommandLine.Parameters;
import picocli.CommandLine.ParameterException;
import picocli.CommandLine.Spec;
import java.util.Locale;
@Command(name = "hi", subcommands = { CommandLine.HelpCommand.class },
        description = "hi")

public class picapp implements Runnable {

    @Command(name = "count", description = "count")
    void country(@Parameters(arity = "1..*", paramLabel = "count",
            description = "count") int count) {
        count.times {
            println("hi $it...")
        }
    }
    @Command(name = "names", description = "names")
    void language(@Parameters(arity = "1..*", paramLabel = "names",
            description = "name") String[] names) {
        println 'CmdLineTool says \n\tWelcome:'
        names.each {
            println '\t\t' + it
        }
    }

    @Override
    public void run() {
        throw new ParameterException(spec.commandLine(), "Specify a subcommand");
    }

    public static void main(String[] args) {
        CommandLine cmd = new CommandLine(new SubCmdsViaMethods());
        if (args.length == 0) {
            cmd.usage(System.out);
        }
        else {
            cmd.execute(args);
        }
    }
}

【问题讨论】:

  • 请在您的 picapp.jar 中添加相关代码
  • 您好,我没有构建 jar 甚至在 groovy 中编译的示例,我添加了一个链接,其中包含我试图在 Groovy 而不是 Java 中实现的结构。
  • 您有一个工作示例和另一个显示其工作原理的示例,现在您希望其他人为您尝试吗?请添加您的代码您尝试过的内容以及失败的原因,以便我们对其进行改进。
  • 我添加了我的尝试,希望它有所帮助,因为我说它无法编译。
  • 您是否尝试过更新版本的 picocli? 2.0.3 版本很旧,不支持execute 方法。请尝试使用 4.1.4 版本。

标签: groovy picocli


【解决方案1】:

问题是picocli 2.0.3版本太旧了,不支持execute方法。在 picocli 4.0 中引入了execute 方法。

建议始终使用最新的 picocli 版本。 (考虑使用dependabot 等工具自动升级。)

【讨论】:

    猜你喜欢
    • 2020-06-10
    • 2021-09-25
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多