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