我正在尝试使用configslurper解析一些属性文件。
ENT.adminserver.nodenumber=1
ENT.managedserver.1.host=vserver04
ENT.managedserver.2.host=vserver05
ENT.managedserver.3.host=vserver08
ENT.managedserver.4.host=vserver07
表示属性文件。我正在尝试从属性中读取主机名。
Properties properties = new Properties()
File propertiesFile = new File('DomainBuild.properties')
propertiesFile.withInputStream {properties.load(it)}
def config = new ConfigSlurper().parse(properties)
def domainname="ENT" //will be passed through paremeters
def domain = config.get(domainname)
def managedServerFlow= {
println domain.managedserver
println domain.managedserver.keySet()
domain.managedserver.each {
println it.getClass()
println it.get("1")
}
for (server in domain.managedserver) {
println server.getClass()
println server
}
}
}
it.get(“1”)导致以下错误。
No signature of method: java.util.LinkedHashMap$Entry.get() is applicable for argument types: (java.lang.String) values: [1]
Possible solutions: getAt(java.lang.String), grep(), grep(java.lang.Object), wait(), getKey(), any()
我查看了java和groovy文档,花了几个小时没有解决。请帮忙。
答案 0 :(得分:0)
而不是
println it.get("1")
尝试
println it.'1'
或者
println it.getAt("1") // as the exception shows you
答案 1 :(得分:0)
考虑您正在使用的类型。 config
是ConfigObject
,您可以将其视为地图。它的子对象domain
和domain.managedserver
也是ConfigObjects。当您在each
上调用domain.managedserver
并向其传递一个不带参数的闭包时,它会为您提供一组条目。因此,您无法调用it.get("1")
,因为Entry
没有名为“1”的属性。它有key
和value
。所以你可以println "$it.key: $it.value"
或
domain.managedserver.each { key, value ->
println value.getClass()
println "$key: $value"
}
或者如果您想直接获取密钥“1”的值:
println domain.managedserver.'1'