1.使用<copy>进行复制时,默认情况下将拷贝目标文件夹下没有的文件,或者源文件比目标文件夹下同名文件更新的文件。如果想完全覆盖,需要添加overwrite="true"属性
2.Copy时使用fileset的写法
A. <fileset dir="f:/antsrc">
</fileset> 默认指dir下递归的所有文件和文件夹
B. <fileset dir="f:/antsrc">
<include name="*"/>
</fileset> 指dir下的所有文件,包括文件夹(如果是文件夹,不包括该文件夹下的文件)
C. <fileset dir="f:/antsrc">
<include name="*.*"/>
</fileset> 由于一般情况下文件名中都包括“.”,而文件夹名中不包括“.”,所以要想特指dir下的所有文件而不包括文件夹,可以将<include>的name属性写成"*.*"。
D. <fileset dir="f:/antsrc">
<include name="**"/>
</fileset> 指dir下的所有路径上的文件和文件夹.相当于A,注意与B的区别。
E. <fileset dir="f:/antsrc">
<include name="**/*.class"/>
</fileset> 指dir下的所有路径上的以.class为扩展名的文件,copy的时候回将目录结构一并进行复制(经常用到的写法).
F. <fileset dir="f:/antsrc">
<include name="*/"/>
</fileset> 指dir下递归的所有文件和文件夹,相当于A,D.
G. <fileset dir="f:/antsrc">
<include name="*/*"/>
</fileset> 指dir的一级子文件夹下的所有文件(文件夹看作是一个不包括子文件和子文件夹的普通文件),不包括dir下的一级子文件.
H. <fileset dir="f:/antsrc">
<include name="*/*/"/>
</fileset> 指该文件夹下所有一级子文件夹下递归的所有文件和文件夹(文件夹看作是一个递归包含了其下所有文件的一个集合文件),不包括dir下的一级文件.
总结:
1.在<include>标签的name属性中,如果最后没有"/",则表示指定目录下的所有指定文件(文件夹看作是一个不包括子文件和子文件夹的普通文件);如果最后加"/",则表示指定目录下的所有指定文件(文件夹看作是一个递归包含了其下所有文件的一个集合文件);如果出现"**",则指代所有可到达的路径。
2.<fileset>标签的includes属性可以设置多个命名格式,中间用","分割,如
<fileset dir="f:/antsrc" includes="**/*.java,**/*.txt">.
而对于嵌套的<include>标签的name属性中则不能按上述方式设置。