我使用的是Grails 3.2.6。我正在编写自定义grails命令。它是一个命令而不是脚本,因为我需要在命令中的spring应用程序上下文中访问对象。我希望我的命令接受命令行参数,其值为" name"和"组"和" id"。例如,我希望能够像这样运行命令:
grails run-command process-group --name=foo --group=bar --id=2
但是,当我这样做时,我的命令实现类似乎无法访问任何这些参数(名称,组或id)。我已经尝试通过来自GrailsApplicationCommand特性的args属性访问它们,但这是空的。我也尝试通过CommandLine对象的各种方法访问它,该方法可以通过来自GrailsApplicationCommand特性的executionContext.commandLine对象访问。但是,所有内容似乎都是空的(undeclaredOptions是空的,remainingArgs是空的,rawArguments只有我的命令名是"进程组"等等)。如果我删除了领先" - "从我的论点这样的名字:
grails run-command process-group name=foo group=bar id=2
然后args属性包含3个条目:[" name = foo"," group = bar"," id = 2"]。我想我可以用这种方式实现我的命令(没有前导" - "关于命令参数),但它有点难看,这也意味着我必须解析参数我。 grails docs(http://docs.grails.org/latest/guide/single.html#creatingCustomCommands)表示,"自Grails 3.2.0起,命令在检索参数,模板生成,文件访问和模型构建方面具有与脚本类似的能力。"我对该声明的检索参数部分感兴趣。脚本(而非命令)文档中显示的示例显示(http://docs.grails.org/latest/guide/single.html#creatingCustomScripts)如何声明脚本将从命令行获取的参数。例如,此命令行应该使用自定义脚本来声明" force" generate-all自定义脚本的参数:
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文档如何声明检索参数现在应该对自定义脚本和自定义命令的工作原理相同而感到困惑,但我似乎无法从自定义命令中检索参数我可以从自定义脚本。有没有办法可以检索自定义命令的参数,就像可以为自定义脚本完成一样?
答案 0 :(得分:1)
使用-D选项设置属性:
-Dsample.message=foo
使用以下代码获取系统属性:
System.properties['sample.message']
链接到我找到这个例子的地方: