Я использую Picocli с Groovy для создания инструмента CLI. Я последовал примеру здесь: https://picocli.info/picocli-2.0-groovy-scripts-on-steroids.html
Этот пример работает хорошо. Но не могу получить простой рабочий пример нескольких подкоманд в Groovy. Я хочу выполнить его из банки: 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);
}
}
}