如何在groovy中使用CliBuilder而不使用选项?

ecfdbz9o  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(247)

我正在编写一个简单的groovy脚本,我希望它的命令行像这样简单-

./someTask.groovy task-profile

此外,脚本应该有一个--help-h选项,用于指定task-profile可以采用的所有不同值。
task-profile可以采用以下值-

  • task-1
  • task-2
  • task-3

--help选项应该告诉用户所有可用的task-profile值,以及如何使用它们。
我搜索了很多,但只找到了有选项的例子(例如-a-b-c等)
如何写一个没有选项,只有位置参数的脚本,我可以用switch语句硬编码,但我想学习使用CliBuilder。任何帮助都将不胜感激。

qzlgjiam

qzlgjiam1#

CliBuilder在Groovy 2.5中进行了更新,增加了对picocli支持的实现(groovy.cli.picocli.CliBuilder)的支持。This article显示了CliBuilder中现在可用的新特性的许多细节。
但是,即使在此版本的CliBuilder中,公共API也只支持位置参数列表,该列表只有一个描述。

@Unparsed(description = 'positional parameters')
List positionals

遗憾的是,CliBuilder API目前不提供在应用程序的使用帮助消息中显示单独的位置参数(带有单独的描述)的方法。
如果您的目标是拥有单独的位置参数(可能具有单独的类型、单独的默认值等),并让用法帮助消息为每个位置参数显示单独的描述,那么您可能需要考虑在Groovy脚本或Groovy应用程序中直接使用picocli(不使用CliBuilder)。
picocli用户手册中有很多Groovy示例,并有专门的章节介绍如何在Groovy应用程序和Groovy脚本中使用picocli。本文(Groovy Scripts on Steroids)可能也很有用。
下面是一个示例task-profile Groovy脚本,它包含三个位置参数:

// task-profile.groovy
@Grab('info.picocli:picocli-groovy:4.6.3')
@GrabConfig(systemClassLoader=true)
@Command(name = "task-profile", version = "task-profile 1.0",
        mixinStandardHelpOptions = true, // add --help and --version options
        description = "Task Profile")
@picocli.groovy.PicocliScript2
import groovy.transform.Field
import static picocli.CommandLine.*

@Parameters(index = "0", description = "The first task")
@Field String task1;

@Parameters(index = "1", description = "The second task")
@Field String task2;

@Parameters(index = "2", description = "The third task")
@Field String task3;

// PicocliBaseScript2 prints usage help or version if requested by the user

println "hi, the selected tasks are $task1, $task2 and $task3"

相关问题