首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Groovy中使用Picocli创建CLI工具

在Groovy中使用Picocli创建CLI工具
EN

Stack Overflow用户
提问于 2020-01-10 18:44:28
回答 1查看 262关注 0票数 1

我正在使用Picocli和Groovy来创建一个CLI工具,我遵循了下面的示例:https://picocli.info/picocli-2.0-groovy-scripts-on-steroids.html

这个例子运行得很好。但是在Groovy中无法获得多个子命令的简单工作示例。我想从jar执行它,如下所示: java -jar picapp -count次数java -jar picapp -namesList of name/s

所以:

代码语言:javascript
复制
java -jar picapp count 3 
outputs: 
hi, hi , hi

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

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

下面的Groovy代码无法编译:

代码语言:javascript
复制
@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);
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-22 09:24:39

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59680098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档