使用文件和过滤器进行Gradle问题

时间:2018-03-07 21:24:06

标签: gradle

我试图遍历一个地图,为每个键读取一些属性文件,使用过滤器来替换一些标记。我的问题是,循环发生了。最后,我没有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个内部配置? 感谢您的指导。

1 个答案:

答案 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 {}}