提问人:Asif Kamran Malick 提问时间:11/13/2023 最后编辑:Asif Kamran Malick 更新时间:11/14/2023 访问量:31
属性“requiredOptionMarker”的类型应为“java.lang.Character”;但发现类型为“java.lang.String”
Attribute 'requiredOptionMarker' should have type 'java.lang.Character'; but found type 'java.lang.String'
问:
在 Groovy 3.0.19 中运行脚本失败,但在 Groovy 4.0.15 中通过
我正在尝试遵循特定于 groovy 脚本的 picocli 文档说明:第 30.1.2 节。Groovy 脚本
有一个名为 Command 的特定注释,它具有 requiredOptionMarker 属性。请参阅第 14.4.4 节。Required-Option Marker requiredOptionMarker 接受字符。
在我的脚本中,当我尝试将“*”分配给requiredOptionMarker时,我的脚本无法编译。
@Command(name = "sampleScript",
mixinStandardHelpOptions = true,
requiredOptionMarker = '*')
我收到错误:
Attribute 'requiredOptionMarker' should have type 'java.lang.Character'; but found type 'java.lang.String' in @picocli.CommandLine$Command
@ line 63, column 32.
requiredOptionMarker = '*',
^
1 error
尝试了各种建议,例如,.似乎没有任何效果。(char) '*'
'*' as char
在寻找它时,我最接近的是这张 jira 票 GROOVY-3278
任何帮助都非常感谢。
编辑1:开始
以防万一有人想玩,我有一个 MCVE
https://github.com/akmalick/sample-picocli/blob/requiredOptionMarker/sample-picocli.groovy
master 分支包含将 PASS 的脚本
requiredOptionMarker 分支包含重新创建问题的脚本,并在包含更改时失败。requiredOptionMarker = '*'
编辑1:结束
编辑2:开始
处理逗号后,如
sortOptions = false,
requiredOptionMarker = ((char)'*') //---->>>>> This DOES"T WORK
在没有编译 tatic 的情况下运行我得到这样的东西
>groovy sample-picocli.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
C:\ws\sample-picocli.groovy: 35: Expected '(char) *' to be an inline constant of type char in @picocli.CommandLine$Command
@ line 35, column 32.
requiredOptionMarker = ((char)'*') //---->>>>> This DOES"T WORK
^
C:\ws\picocli\sample-picocli.groovy: 35: Attribute 'requiredOptionMarker' should have type 'java.lang.Character'; but found type 'java.lang.Object' in @picocli.CommandLine$Command
@ line 35, column 32.
requiredOptionMarker = ((char)'*') //---->>>>> This DOES"T WORK
^
C:\ws\picocli\sample-picocli.groovy: 35: Expected '(char) *' to be an inline constant of type char in @picocli.CommandLine$Command
@ line 35, column 32.
requiredOptionMarker = ((char)'*') //---->>>>> This DOES"T WORK
^
C:\ws\picocli\sample-picocli.groovy: 35: Attribute 'requiredOptionMarker' should have type 'java.lang.Character'; but found type 'java.lang.Object' in @picocli.CommandLine$Command
@ line 35, column 32.
requiredOptionMarker = ((char)'*') //---->>>>> This DOES"T WORK
^
4 errors
编辑2:结束
答:
您是否尝试过此处介绍的解决方案?https://stackoverflow.com/a/33020020/1446916
基本上在你的脚本中做一个硬性转换:
@Command(
…
requiredOptionMarker = ((char) '*'))
请注意,您需要将整个事情括起来:,只是可能不起作用。((char) '*')
(char) '*'
评论
requiredOptionMarker = '*'
评论