Ant Datatype之patternset
一个文件集可以包含多个patternset(模式集),它限制了文件集中的文件,要求他们是否与指定的模式相匹配。
模式匹配规则如下:
*:匹配零个或多个字符
?:匹配一个单独的字符
**:匹配一个目录名,匹配从当前节点向下的所有目录,可以匹配零个或多个目录
以 /或\结尾意味着结尾是**。代表包含了所有子目录的目录。
根据不同平台目录分隔符会被转化为正确的形式。
其他的所有字符都被当作简单的文本处理。
模式集属性:
includes(嵌套模式为include):包含的文件模式列表,逗号分隔,被省略时包含所有文件。
excludes(嵌套模式为exclude):排除的文件模式列表,逗号分隔,被省略时不排除任何文件。
includesfile:文件名称;文件中的每一行被作为一个包含模式来处理,可以使用嵌套的includesfile元素来指定多个所包含的文件。
excludesfile:文件名称;文件中的每一行被作为一个排除模式来处理,可以使用嵌套的 excludesfile元素来指定多个所包含的文件。
排除模式会被优先处理。
一些文件类型在默认情况下会被排除,它们被称为默认排除模式。
**/*~:用于jEdit和其他编译器,用作老版本的备份
**/#*#,**/.#*,**/%*%:编译器
**/CVS/,**/.cvsignore,**/SCCS/,**/vssver.scc,**/._*(MacOS/X源代码派生文件),**/.svn,**/.DS_Store
defaultexcludes="no"可以关闭自动排除。在需要的情况下,你可以用<defaultexcludes>任务修改defaultexcludes文件集的内容。<defaultexcludes echo="true" default="true"/>。echo打印当前模式列表。default重置模式集合的设置。
测试:
测试目录为:src\xuj\ant,目录下包含Main.java和Main.java.bak两个文件。
1.测试1:
<?xml version="1.0" encoding="UTF-8"?>
<project name="datatype_fileset" default="copy">
<property name="copy.fromdir" location="src"/>
<property name="copy.todir" location="tosrc"/>
<target name="copy" depends="clean">
<copy todir="${copy.todir}">
<fileset dir="${copy.fromdir}">
<include name="*.java"/>
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="${copy.todir}"/>
</target>
</project>输出:说明没有文件被复制。
E:\antspace\datatype>ant Buildfile: E:\antspace\datatype\build.xml clean: copy: BUILD SUCCESSFUL Total time: 0 seconds
2.测试2
<?xml version="1.0" encoding="UTF-8"?>
<project name="datatype_fileset" default="copy">
<property name="copy.fromdir" location="src"/>
<property name="copy.todir" location="tosrc"/>
<target name="copy" depends="clean">
<copy todir="${copy.todir}">
<fileset dir="${copy.fromdir}">
<include name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="${copy.todir}"/>
</target>
</project>或
<?xml version="1.0" encoding="UTF-8"?>
<project name="datatype_fileset" default="copy">
<property name="copy.fromdir" location="src"/>
<property name="copy.todir" location="tosrc"/>
<target name="copy" depends="clean">
<copy todir="${copy.todir}">
<fileset dir="${copy.fromdir}">
<patternset>
<include name="**/*.java"/>
</patternset>
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="${copy.todir}"/>
</target>
</project>
输出:说明复制了一个文件,即Main.java
E:\antspace\datatype>ant
Buildfile: E:\antspace\datatype\build.xml
clean:
copy:
[copy] Copying 1 file to E:\antspace\datatype\tosrc
BUILD SUCCESSFUL
Total time: 0 seconds
3.测试3:
<?xml version="1.0" encoding="UTF-8"?>
<project name="datatype_fileset" default="copy">
<property name="copy.fromdir" location="src"/>
<property name="copy.todir" location="tosrc"/>
<target name="copy" depends="clean">
<copy todir="${copy.todir}">
<fileset dir="${copy.fromdir}">
<patternset>
<exclude name="**/*.java"/>
<include name="**/*.bak"/>
</patternset>
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="${copy.todir}"/>
</target>
</project>或
<?xml version="1.0" encoding="UTF-8"?>
<project name="datatype_fileset" default="copy">
<property name="copy.fromdir" location="src"/>
<property name="copy.todir" location="tosrc"/>
<target name="copy" depends="clean">
<copy todir="${copy.todir}">
<fileset dir="${copy.fromdir}">
<exclude name="**/*.java"/>
<include name="**/*.bak"/>
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="${copy.todir}"/>
</target>
</project>输出:
E:\antspace\datatype>ant
Buildfile: E:\antspace\datatype\build.xml
clean:
[delete] Deleting directory E:\antspace\datatype\tosrc
copy:
[copy] Copying 1 file to E:\antspace\datatype\tosrc
BUILD SUCCESSFUL
Total time: 0 seconds4.测试4,测试目录增加test.java和a.txt两个文件
includes.txt文件的内容:
**/*.java **/*.txt
build.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project name="datatype_fileset" default="copy">
<property name="copy.fromdir" location="src"/>
<property name="copy.todir" location="tosrc"/>
<target name="copy" depends="clean">
<copy todir="${copy.todir}">
<fileset dir="${copy.fromdir}">
<includesfile name="includes.txt"/>
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="${copy.todir}"/>
</target>
</project>输出:
E:\antspace\datatype>ant
Buildfile: E:\antspace\datatype\build.xml
clean:
[delete] Deleting directory E:\antspace\datatype\tosrc
copy:
[copy] Copying 3 files to E:\antspace\datatype\tosrc
BUILD SUCCESSFUL
Total time: 0 seconds可以这样写:
<?xml version="1.0" encoding="UTF-8"?>
<project name="datatype_fileset" default="copy">
<property name="copy.fromdir" location="src"/>
<property name="copy.todir" location="tosrc"/>
<fileset id="copy.pattern" dir="${copy.fromdir}">
<include name="**/*.txt"/>
<include name="**/*.java"/>
</fileset>
<target name="copy" depends="clean">
<copy todir="${copy.todir}">
<fileset refid="copy.pattern" />
</copy>
</target>
<target name="clean">
<delete dir="${copy.todir}"/>
</target>
</project>
defaultexcludes未测试成功。