# Use replacetokens with map

**URL:** <https://discuss.gradle.org/t/use-replacetokens-with-map/15045>\
**Category:** Help/Discuss\
**Created:** [March 9, 2016, 4:36am UTC](https://discuss.gradle.org/t/use-replacetokens-with-map/15045 "2016-03-09T04:36:23Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![wizzble](https://avatars.discourse-cdn.com/v4/letter/w/7ab992/32.png) [@wizzble](https://discuss.gradle.org/u/wizzble)\
**Post date:** [March 9, 2016, 4:36am UTC](https://discuss.gradle.org/t/use-replacetokens-with-map/15045/1 "2016-03-09T04:36:23Z")

</div>

Hi, I am looking for how to use ant’s replacetoken method with map.

```
// build.gradle
ext {
    conf = [
      ENV: "foo",
      VERSION: "bar"
  ]
}

processResources {
    conf.each {k, v ->
        filter(ReplaceTokens, tokens : [k : "${v}"])
    }
}

// properties file in the resource directory
test.value=@ENV@
test.value=@VERSION@

```

Though there is no error message, looks no change in the properties file.  
I checked of course the following works. Does anyone know the way to solve this issue?

```
processResources {
    filter(ReplaceTokens, tokens : [ENV: "foo"])
    filter(ReplaceTokens, tokens : [VERSION: "bar"])
}
```

---

<div class="post-metadata">

**Author:** ![Lance\_Java](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/lance_java/32/787_2.png) [@Lance\_Java](https://discuss.gradle.org/u/Lance_Java)\
**Post date:** [March 9, 2016, 11:21am UTC](https://discuss.gradle.org/t/use-replacetokens-with-map/15045/2 "2016-03-09T11:21:20Z")

</div>

A few points

1.The ReplaceTokens filter takes a map so I’m not sure why you’re trying to split it into separate filter instances. It seems you can achieve your goal with a single filter

2.I doubt you’ll want to run the filter over all resources so you’ll likely want to restrict the filter (otherwise image binaries etc may be corrupted)

```gradle
processResources {
   filesMatching('**/*.properties') {
      filter(ReplaceTokens, tokens: conf) 
   } 
} 

```

3.I personally dislike include / exclude by file patterns and prefer separate directories. So I’d put my filtered resources in `src/main/resource-templates`

```gradle
processResources {
   from('src/main/resource-templates') {
      filter(ReplaceTokens, tokens: conf) 
   } 
} 

```

---

<div class="post-metadata">

**Author:** ![wizzble](https://avatars.discourse-cdn.com/v4/letter/w/7ab992/32.png) [@wizzble](https://discuss.gradle.org/u/wizzble)\
**Post date:** [March 9, 2016, 12:57pm UTC](https://discuss.gradle.org/t/use-replacetokens-with-map/15045/3 "2016-03-09T12:57:15Z")

</div>

Thank you for your advise.  
I didn’t know that we can set map directly to tokens…  
I could confirm now it works.

Also, though there are only properties files in my resources, as you told me, I will move those resources which needs filter to a directory so that I can restrict the filter to it.

It is amazing that I can solve this issue so quickly! Thank you so much!!
