【发布时间】:2017-03-21 21:58:59
【问题描述】:
我正在使用 grails 3.2.6。我正在编写一个自定义 grails 命令。这是一个命令而不是脚本,因为我需要在命令中访问 spring 应用程序上下文中的对象。我希望我的命令接受具有“名称”、“组”和“ID”等值的命令行参数。例如,我希望能够像这样运行命令:
grails run-command process-group --name=foo --group=bar --id=2
但是,当我这样做时,我的命令实现类似乎无法访问任何这些参数(名称、组或 ID)。我尝试通过来自 GrailsApplicationCommand 特征的 args 属性访问它们,但它是空的。我还尝试通过 CommandLine 对象的各种方法访问它,该对象可通过 executionContext.commandLine 对象访问,该对象也来自 GrailsApplicationCommand 特征。然而,那里的一切似乎也是空的(未声明的选项是空的,剩余的参数是空的,rawArguments 只是我的命令名称是“进程组”等)。如果我像这样从参数名称中删除前导“--”:
grails run-command process-group name=foo group=bar id=2
那么 args 属性包含 3 个条目:["name=foo"、"group=bar" 和 "id=2"]。我想我可以以这种方式实现我的命令(命令参数上没有前导“--”),但这有点难看,这也意味着我必须自己解析参数。 grails 文档 (http://docs.grails.org/latest/guide/single.html#creatingCustomCommands) 说,“从 Grails 3.2.0 开始,命令在检索参数、模板生成、文件访问和模型构建方面具有与脚本类似的能力。”我对该语句的 retrieving arguments 部分感兴趣。脚本(不是命令)文档中显示的示例显示 (http://docs.grails.org/latest/guide/single.html#creatingCustomScripts) 如何声明脚本将从命令行获取的参数。例如,此命令行应该与为 generate-all 自定义脚本声明“force”参数的自定义脚本一起工作:
grails generate-all MyClass --force
这一切似乎都与脚本中 description() 方法的使用有关:
description( "Generates a controller that performs CRUD operations and the associated views" ) {
usage "grails generate-all <<DOMAIN CLASS>>"
flag name:'force', description:"Whether to overwrite existing files"
argument name:'Domain Class', description:'The name of the domain class'
}
但是,似乎没有可用于自定义命令的 description() 方法,因为有自定义脚本。我只是对 grails 文档如何声明 retrieving arguments 现在应该对自定义脚本和自定义命令同样工作感到困惑,但我似乎无法像我一样从自定义命令中检索参数从自定义脚本。有没有一种方法可以检索自定义命令的参数,就像检索自定义脚本一样?
【问题讨论】:
标签: grails