我试图遍历一个地图,为每个键读取一些属性文件,使用过滤器来替换一些标记。我的问题是,循环发生了。最后,我没有5个文件夹,而是在配置中只有1个文件夹。在进入下一个之前,是否需要关闭文件/输入流等资源?
task copyResByHost(type: Copy) {
java.util.HashMap hostMap = new HashMap();
hostMap.put("devserver01","env_dev.properties");
hostMap.put("devserver02","env_dev.properties");
hostMap.put("devserver03","env_dev.properties");
hostMap.put("devserver04","env_dev.properties");
hostMap.put("devserver05","env_dev.properties");
hostMap.each { key, value ->
from "$projectDir/resources/templates"
into("build/config/${key}")
def myProps = new Properties()
file("$projectDir/resources/properties/${value}").withInputStream {
myProps.load(it);
}
file("$projectDir/resources/properties/${key}.properties").withInputStream {
myProps.load(it);
}
filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: myProps)
}
}
你能让我知道我在哪里犯了一个错误,导致只创建了1个文件夹而不是5个内部配置? 感谢您的指导。
答案 0 :(得分:0)
每次都会被覆盖,导致只创建一个文件夹。
所以代码应该按如下方式更改:
hostMap.each { key, value ->
println "Creating configs for $key"
//inputs.dir '$projectDir/resources/templates'
// outputs.dir 'build/config/${key}'
doLast {
copy {
from("$projectDir/resources/templates")
into("build/config/${key}")
def myProps = new Properties()
new File("$projectDir/resources/properties/${value}").withInputStream { stream ->
myProps.load(stream);
}
new File("$projectDir/resources/properties/${key}.properties").withInputStream { stream ->
myProps.load(stream);
}
filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: myProps)
}
}
}
来自&进入,文件流一切都应该出现在封闭doLast {copy {}}
中