Groovy脚本用Picocli遇注解错误:@Option不可用于局部变量
解决Picocli在Groovy脚本中交互式密码提示的注解错误
@picocli.CommandLine$Option不允许用于LOCAL_VARIABLE元素这个错误的原因很直接:Groovy脚本中未添加@Field注解的变量会被默认视为局部变量,而Picocli的@Option注解仅能作用于类字段,无法识别局部变量。
只需要给密码变量补充@Field注解,将其声明为脚本类的字段,就能让Picocli正确识别这个选项配置。修正后的完整代码如下:
import static picocli.CommandLine.* import groovy.transform.Field import java.security.MessageDigest @Command(name = 'checksum', mixinStandardHelpOptions = true, version = 'checksum 4.0', description = 'Prints the checksum (SHA-256 by default) of a file to STDOUT.') @picocli.groovy.PicocliScript @Parameters(index = '0', description = 'The file whose checksum to calculate.') @Field File file @Option(names = ['-a', '--algorithm'], description = 'MD5, SHA-1, SHA-256, ...') @Field String algorithm = 'SHA-256' @Option(names = [ '-p','--password'], description = "Passphrase", interactive = true) @Field char[] password; println MessageDigest.getInstance(algorithm).digest(file.bytes).encodeHex().toString()
执行你原本的命令即可正常触发交互式密码提示:
groovy PicocliTest.groovy findClassPath.groovy -p
内容的提问来源于stack exchange,提问作者Withnoe
相关产品推荐
相关产品推荐

