【问题标题】:Specify arguments in grails command在 grails 命令中指定参数
【发布时间】: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


    【解决方案1】:

    使用 -D 选项设置属性:

    -Dsample.message=foo
    

    使用以下代码获取系统属性:

    System.properties['sample.message']
    

    链接到我找到这个例子的地方:

    Passing Properties

    【讨论】:

    • 是的,我曾想过这样做,而且会奏效。但是,我真正想要的是让 grails 自定义命令像 grails 自定义脚本一样处理参数的能力(并且文档似乎表明这也应该有效)。正如我所指出的,如果我不使用“--”参数,则可以获得命令参数。使用系统属性有一点优势,因为键和值将为我解析到系统属性映射中。但是,我真的很想使用自定义 grails 命令参数,就像在自定义 grails 脚本中一样。这可能吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多