如何合并groovy个脚本形式的2个groovy个配置文件?
How to merge 2 groovy configuration files which are in the form of groovy scripts?
我想合并 2 个 groovy 配置文件。有没有办法写回 groovy 的配置文件?假设我创建了一个仅包含更改 (addition/modification) 的临时配置文件,然后附加它或更改目标配置文件(不确定 groovy 中是否有配置编写器来更改 groovy 配置文件。)
或者还有其他方法吗?请帮助
示例目标groovy配置文件
config {
name="agnis"
master {
name="Altis"
bitMode = 64
}
slave {
name="Geo"
bitMode = 64
}
}
datastore{
host="localhost"
port=12808
dbname="gcsapp"
users_collection="users"
}
defaultBookmarks{
track_url="http://apps1.alto.com/Scripts/Texcel/track.out"
vmware_url="https://example.com/ControlPanel/Configurations/AllConfigurations.aspx"
}
仅包含更改的示例临时配置文件
config {
master {
name="Ajanta"
bitMode = 32
}
slave {
name="Galileo"
bitMode = 32
}
}
工作代码
private boolean mergeFiles(def sourceFile, def targetFile) {
try {
def srcConfig = new ConfigSlurper().parse(new File(sourceFile).toURI().toURL())
def tgtConfig = new ConfigSlurper().parse(new File(targetFile).toURI().toURL())
ConfigObject mergedConfig = (ConfigObject) tgtConfig.merge(srcConfig)
def stringWriter = new StringWriter()
mergedConfig.writeTo(stringWriter)
def file = new File(targetFile)
file.write(stringWriter.toString())
} catch(Exception e) {
println e.printStackTrace()
return false
}
return true
}
假设您已经使用 ConfigSlurper
。结果 ConfigObject
有一个 merge
方法。所以你可以例如:
def c = new ConfigSlurper().parse("""\
config {
name="agnis"
master {
name="Altis"
bitMode = 64
}
slave {
name="Geo"
bitMode = 64
}
}
""")
assert c.config.master.name=="Altis"
assert c.config.slave.name=="Geo"
def u = new ConfigSlurper().parse("""\
config {
master {
name="Ajanta"
bitMode = 32
}
}
""")
c.merge(u) // XXX
assert c.config.master.name=="Ajanta" // XXX
assert c.config.slave.name=="Geo"
我想合并 2 个 groovy 配置文件。有没有办法写回 groovy 的配置文件?假设我创建了一个仅包含更改 (addition/modification) 的临时配置文件,然后附加它或更改目标配置文件(不确定 groovy 中是否有配置编写器来更改 groovy 配置文件。)
或者还有其他方法吗?请帮助
示例目标groovy配置文件
config {
name="agnis"
master {
name="Altis"
bitMode = 64
}
slave {
name="Geo"
bitMode = 64
}
}
datastore{
host="localhost"
port=12808
dbname="gcsapp"
users_collection="users"
}
defaultBookmarks{
track_url="http://apps1.alto.com/Scripts/Texcel/track.out"
vmware_url="https://example.com/ControlPanel/Configurations/AllConfigurations.aspx"
}
仅包含更改的示例临时配置文件
config {
master {
name="Ajanta"
bitMode = 32
}
slave {
name="Galileo"
bitMode = 32
}
}
工作代码
private boolean mergeFiles(def sourceFile, def targetFile) {
try {
def srcConfig = new ConfigSlurper().parse(new File(sourceFile).toURI().toURL())
def tgtConfig = new ConfigSlurper().parse(new File(targetFile).toURI().toURL())
ConfigObject mergedConfig = (ConfigObject) tgtConfig.merge(srcConfig)
def stringWriter = new StringWriter()
mergedConfig.writeTo(stringWriter)
def file = new File(targetFile)
file.write(stringWriter.toString())
} catch(Exception e) {
println e.printStackTrace()
return false
}
return true
}
假设您已经使用 ConfigSlurper
。结果 ConfigObject
有一个 merge
方法。所以你可以例如:
def c = new ConfigSlurper().parse("""\
config {
name="agnis"
master {
name="Altis"
bitMode = 64
}
slave {
name="Geo"
bitMode = 64
}
}
""")
assert c.config.master.name=="Altis"
assert c.config.slave.name=="Geo"
def u = new ConfigSlurper().parse("""\
config {
master {
name="Ajanta"
bitMode = 32
}
}
""")
c.merge(u) // XXX
assert c.config.master.name=="Ajanta" // XXX
assert c.config.slave.name=="Geo"