我正在编写一个简单的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.任何帮助都将不胜感激.

推荐答案

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示例,其中有一节专门介绍using picocli in Groovy applications and Groovy scripts.本文(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"

Java相关问答推荐

无法运行Java(已解决)

使用log 4j2格式的Hibernate 显示SQL日志(log)

Annotation @ Memphier无法正常工作,并表示:class需要一个bean,但找到了2个bean:

Java自定义ThreadPool—暂停任务提交并取消当前排队任务

AlarmManager没有在正确的时间发送alert

Java中如何根据Font.canDisplay方法对字符串进行分段

如何创建同一类的另一个对象,该对象位于变量中?

具有阻塞方法的开源库是否应该为执行提供异步选项?

如何使用SpringBoot中的可分页对整数作为字符串存储在数据库中时进行排序

格式中的特定回录键-值对

继续收到错误SQLJDBC EXCEPTION执行";org.springframework.dao.InvalidDataAccessResourceUsageException:&

如何在JUNIT测试中覆盖ExecutorService?

从LineChart<;字符串、字符串和gt;中删除数据时出现特殊的ClassCastException;

IntelliJ IDEA依赖项工具窗口丢失

向Java进程发送`kill-11`会引发NullPointerException吗?

Spring Validator批注不起作用

为什么这种递归会有这样的行为?

Java集合:NPE,即使没有添加空值

让标签占用JavaFX中HBox的所有可用空间

窗口启动后不久,从java.awt.Graphics disapear创建的矩形