如何合并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"