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 seconds
4.测试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未测试成功。