3.10 Including and Excluding Files

3.10.1 Problem

You want to include and/or exclude certain files and directories from a build.

3.10.2 Solution

Use Ant patterns along with <include> and <exclude> tags, or includes and excludes attributes.

3.10.3 Discussion

Ant uses a simple pattern syntax for selecting files, which you have undoubtedly seen in other examples throughout this chapter. Here is how you can use this syntax to include all .java files in a particular directory:

includes="src/com/oreilly/util/*.java"

Because Java projects are typically divided into numerous packages and subdirectories, you frequently use the ** wildcard to scan all subdirectories:

includes="src/**/*.java"

This tells Ant to locate all files ending with .java in the src directory and any subdirectories.

In the Ant pattern language, "*" matches any number of characters and "?" matches one character. So you can locate Test1.java and Test2.java as follows:

includes="Test?.java"

Because "?" matches a single character, TestABC.java is not matched by the preceding pattern.

Patterns can be combined. Table 3-2 shows some additional pattern examples.

Table 3-2. Ant pattern-matching examples

Pattern

Matches

Does not match

*.java

Person.java

Person.class

Person*.java

Person.java, PersonA.java, PersonBoss.java

P.java, BossPerson.java

Test?.java

TestA.java

Test.java, TestOne.java

**/*.txt

a.txt, src/a.txt, src/com/oreilly/b.txt

Files not ending in .txt

src/**/*.java

src/A.java, src/com/oreilly/File.java

B.java, src/com/oreilly/C.class

**/a/**

a (if `a' is a filename), build/File.txt, src/a/File.txt

a.java, src/b/C.class

3.10.4 See Also

Search for "Directory Based Tasks" in the Ant user manual for a discussion of Ant's pattern matching syntax.