将Groovy 3 YamlBuilder与包含连字符的Yaml一起使用
我正在尝试编写一个Groovy3脚本,它使用yamlbuilder编写一个yaml文件。我有它的工作,几乎一切除了将Groovy 3 YamlBuilder与包含连字符的Yaml一起使用,groovy,yaml,Groovy,Yaml,我正在尝试编写一个Groovy3脚本,它使用yamlbuilder编写一个yaml文件。我有它的工作,几乎一切除了 execution: set-props: url:http://myhouse.net port:8000 如何编写允许在名称中使用连字符的映射?继我以前的工作之后,我愚蠢地尝试了 def setprops=[:] setprops=(["url":"http://myhouse.net","port":"8000"]) execution.set-prop
execution:
set-props:
url:http://myhouse.net
port:8000
如何编写允许在名称中使用连字符的映射?继我以前的工作之后,我愚蠢地尝试了
def setprops=[:]
setprops=(["url":"http://myhouse.net","port":"8000"])
execution.set-props=setprops
这给了我一个错误“赋值的LHS应该是变量或字段”
如果我只使用execution.setprops,那么它可以正常工作,但是从yaml(execution)得到的yaml当然是无效的
我认为如果设置道具是一个键/值对,那么它可以进入报价,一切都会很好。但是因为它是结构的一部分,我不知道需要做什么。您可以使用字符串作为“方法”,生成器将创建您的
它们的中间结构:
import groovy.yaml.YamlBuilder
def b = new YamlBuilder()
b.execution {
"set-props"(
url: "..."
)
}
println b
或者继续您的示例:您可以创建整个映射,并使用is作为参数,在其中您希望包含该内容
def setprops=["set-props": [url:"..."]]
b.execution(setprops)
两者都会导致:
---
执行:
设置道具:
网址:“…”
注意,第一个版本通过传递的闭包嵌套,然后在映射中传递。第二位只是传递一个嵌套映射。Ah,因此这在代码的前面就改变了我的方法。对我来说,我定义了一个Groovy映射,其中包含相关的映射/列表,这取决于yaml需要什么。但您首先使用yamlbuilder而不是地图,然后将地图传递给它。我将从yamlbuilder开始尝试同样的方法,但是如果b是映射而不是yamlbuilder,您的解决方案将如何改变?