# Eclipse: filtered resources generation for .project file

**URL:** <https://discuss.gradle.org/t/eclipse-filtered-resources-generation-for-project-file/538>\
**Category:** Old Forum Archive\
**Created:** [October 3, 2012, 8:39am UTC](https://discuss.gradle.org/t/eclipse-filtered-resources-generation-for-project-file/538 "2012-10-03T08:39:00Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Gyorgy\_Abraham](https://avatars.discourse-cdn.com/v4/letter/g/e68b1a/32.png) [@Gyorgy\_Abraham](https://discuss.gradle.org/u/Gyorgy_Abraham)\
**Post date:** [October 3, 2012, 8:39am UTC](https://discuss.gradle.org/t/eclipse-filtered-resources-generation-for-project-file/538/1 "2012-10-03T08:39:00Z")

</div>

Gradle (yet?) lacks the functionality of generating the Eclipse filtered resource definitions from the build script. It would be awesome. Unfortunately it is not trivial. Example:

```gradle
<id>org.eclipse.ui.ide.multiFilter</id>
<arguments>1.0-projectRelativePath-matches-false-false-build</arguments>

```

The implementation process must start by understanding the id and arguments nodes.

---

<div class="post-metadata">

**Author:** ![Sergey\_Alaev](https://avatars.discourse-cdn.com/v4/letter/s/9fc348/32.png) [@Sergey\_Alaev](https://discuss.gradle.org/u/Sergey_Alaev)\
**Post date:** [January 14, 2015, 8:10pm UTC](https://discuss.gradle.org/t/eclipse-filtered-resources-generation-for-project-file/538/2 "2015-01-14T20:10:00Z")

</div>

You can always modify .project file manually. My solution (excludes all folders): `tasks[‘eclipse’].doLast {`

def xml = new XmlParser().parse(new File(project.rootDir, ‘.project’))

xml.append(

new XmlParser().parseText("""

\<filter\>

\<id\>1421264300269\</id\>

\<name\>\</name\>

\<type\>26\</type\>

\<matcher\>

\<id\>org.eclipse.ui.ide.multiFilter\</id\>

\<arguments\>1.0-name-matches-false-false-\*\</arguments\>

\</matcher\>

\</filter\>

\</filteredResources\>""")

)

def pw = new PrintWriter(new FileWriter(new File(project.rootDir, ‘.project’)))

pw.println(’\<?xml version="1.0" encoding="UTF-8"?\>’)

def p = new XmlNodePrinter(pw)

p.preserveWhitespace = true

p.print(xml) }``

---

<div class="post-metadata">

**Author:** ![Lance](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/lance/32/787_2.png) [@Lance](https://discuss.gradle.org/u/Lance)\
**Post date:** [January 15, 2015, 1:58pm UTC](https://discuss.gradle.org/t/eclipse-filtered-resources-generation-for-project-file/538/3 "2015-01-15T13:58:00Z")

</div>

Possibly better to use the withXml hook:

```gradle
eclipse.project.file.withXml { XmlProvider -> provider
    def node = new XmlParser().parseText("""
        <filter>
            <id>1421264300269</id>
            <name></name>
            <type>26</type>
            <matcher>
                <id>org.eclipse.ui.ide.multiFilter</id>
                <arguments>1.0-name-matches-false-false-*</arguments>
            </matcher>
        </filter>
    """)
    def filteredResources = provider.asElement().getElementsByTagName("filteredResources")[0]
    filteredResources.appendChild(node)
}

```

---

<div class="post-metadata">

**Author:** ![Kevin5](https://avatars.discourse-cdn.com/v4/letter/k/bbce88/32.png) [@Kevin5](https://discuss.gradle.org/u/Kevin5)\
**Post date:** [January 20, 2015, 11:39pm UTC](https://discuss.gradle.org/t/eclipse-filtered-resources-generation-for-project-file/538/4 "2015-01-20T23:39:00Z")

</div>

How would you choose to generate the id value?

---

<div class="post-metadata">

**Author:** ![Sergey\_Alaev](https://avatars.discourse-cdn.com/v4/letter/s/9fc348/32.png) [@Sergey\_Alaev](https://discuss.gradle.org/u/Sergey_Alaev)\
**Post date:** [January 21, 2015, 5:51am UTC](https://discuss.gradle.org/t/eclipse-filtered-resources-generation-for-project-file/538/5 "2015-01-21T05:51:00Z")

</div>

AFAIK it does not matter

---

<div class="post-metadata">

**Author:** ![Kevin5](https://avatars.discourse-cdn.com/v4/letter/k/bbce88/32.png) [@Kevin5](https://discuss.gradle.org/u/Kevin5)\
**Post date:** [January 21, 2015, 4:32pm UTC](https://discuss.gradle.org/t/eclipse-filtered-resources-generation-for-project-file/538/6 "2015-01-21T16:32:00Z")

</div>

I tried using values that are generated when I perform the exclude by hand, and Eclipse is complaining about it.

---

<div class="post-metadata">

**Author:** ![Kevin5](https://avatars.discourse-cdn.com/v4/letter/k/bbce88/32.png) [@Kevin5](https://discuss.gradle.org/u/Kevin5)\
**Post date:** [January 21, 2015, 5:04pm UTC](https://discuss.gradle.org/t/eclipse-filtered-resources-generation-for-project-file/538/7 "2015-01-21T17:04:00Z")

</div>

In fact, since the manually generated values looked very much like a milliseconds epoch time, I tried auto-generating the value using System.getCurrentTime, but I get the same problem:

[![](https://sea1.discourse-cdn.com/gradle/uploads/default/1598/12aca62253716cea.png)](https://d2r1vs3d9006ap.cloudfront.net/s3_images/1145313/eclipseProblem.png?1421859833)

---

<div class="post-metadata">

**Author:** ![Sergey\_Alaev](https://avatars.discourse-cdn.com/v4/letter/s/9fc348/32.png) [@Sergey\_Alaev](https://discuss.gradle.org/u/Sergey_Alaev)\
**Post date:** [January 21, 2015, 5:57pm UTC](https://discuss.gradle.org/t/eclipse-filtered-resources-generation-for-project-file/538/8 "2015-01-21T17:57:00Z")

</div>

Ah, i know this error. It is due to XML formatting. id line must look exactly like:

\<id\>1421264300269\</id\>

no spaces or CRLF.

p.preserveWhitespace = true

this line is IMPORTANT

---

<div class="post-metadata">

**Author:** ![Kevin5](https://avatars.discourse-cdn.com/v4/letter/k/bbce88/32.png) [@Kevin5](https://discuss.gradle.org/u/Kevin5)\
**Post date:** [January 21, 2015, 9:16pm UTC](https://discuss.gradle.org/t/eclipse-filtered-resources-generation-for-project-file/538/9 "2015-01-21T21:16:00Z")

</div>

Thanks. That was it. I _had_ copied that line exactly, but I forgot there was another existing “eclipse.doLast” later that was re-writing it again without the preserveWhitespace. I fixed those other unrelated .project XmlNodePrinters and then the spacing was coming out correctly.
