Ant 当文件集包含与globmapper模式不匹配的文件时,如何强制执行错误
下面的代码演示了使用Ant 当文件集包含与globmapper模式不匹配的文件时,如何强制执行错误,ant,Ant,下面的代码演示了使用ant文件copy任务和globmapper的行为。我想复制一组文件。复制重命名所需的某些文件时,请选择与模式匹配的文件。我认为匹配模式的文件将以新名称复制,而其他文件将以原始名称复制 这是错误的:如果源集包含与模式不匹配的文件,它们将被忽略 <project name="trial" default="test" basedir="."> <target name="test"> <property name="mydi
ant
文件copy
任务和globmapper
的行为。我想复制一组文件。复制重命名所需的某些文件时,请选择与模式匹配的文件。我认为匹配模式的文件将以新名称复制,而其他文件将以原始名称复制
这是错误的:如果源集包含与模式不匹配的文件,它们将被忽略
<project name="trial" default="test" basedir=".">
<target name="test">
<property name="mydir" value="${java.io.tmpdir}/demo/src"/>
<mkdir dir="${mydir}" />
<touch file="${mydir}/abc0.txt"/>
<touch file="${mydir}/abc1.java"/>
<touch file="${mydir}/abc2.java"/>
<property name="dest" value="${java.io.tmpdir}/demo/dest"/>
<copy todir="${dest}" >
<fileset dir="${mydir}">
<include name="**/*.java"/>
<include name="**/*.txt"/>
</fileset>
<globmapper from="*.txt" to="*.bak"/>
</copy>
</target>
<target name="clean" >
<delete dir="${java.io.tmpdir}/demo"/>
</target>
</project>
调试的输出ant-v
Setting project property: mydir -> C:\cygwin64\tmp\/demo/src
[mkdir] Created dir: C:\cygwin64\tmp\demo\src
[touch] Creating C:\cygwin64\tmp\demo\src\abc0.txt
[touch] Creating C:\cygwin64\tmp\demo\src\abc1.java
[touch] Creating C:\cygwin64\tmp\demo\src\abc2.java
Setting project property: dest -> C:\cygwin64\tmp\/demo/dest
fileset: Setup scanner in dir C:\cygwin64\tmp\demo\src with patternSet{ includes: [**/*.java, **/*.txt] excludes: [] }
[copy] abc0.txt added as abc0.bak doesn't exist.
[copy] C:\cygwin64\tmp\demo\src\abc1.java skipped - don't know how to handle it
[copy] C:\cygwin64\tmp\demo\src\abc2.java skipped - don't know how to handle it
[copy] No sources found.
[copy] Copying 1 file to C:\cygwin64\tmp\demo\dest
[copy] Copying C:\cygwin64\tmp\demo\src\abc0.txt to C:\cygwin64\tmp\demo\dest\abc0.bak
BUILD SUCCESSFUL
Total time: 0 seconds
我现在理解了行为(以及可能的修复),但我能强迫ant在这种情况下出错吗 A包含应用于文件的嵌套映射器,直到其中一个嵌套映射器匹配为止
输出
[copy]将3个文件复制到C:\cygwin\tmp\demo\dest
[复制]将C:\cygwin\tmp\demo\src\abc0.txt复制到C:\cygwin\tmp\demo\dest\abc0.bak
[复制]将C:\cygwin\tmp\demo\src\abc1.java复制到C:\cygwin\tmp\demo\dest\abc1.java
[复制]将C:\cygwin\tmp\demo\src\abc2.java复制到C:\cygwin\tmp\demo\dest\abc2.java
请注意,abc0.txt
的扩展名更改为.bak
,但其他文件的.java
扩展名保持不变
解释
在上面的示例中,
包含两个映射器:
abc0.txt
:
abc0.txt
匹配
,因此应用
来获取abc0.bak
被跳过abc1.java
:
abc1.java
与
不匹配,因此跳过此映射程序
Setting project property: mydir -> C:\cygwin64\tmp\/demo/src
[mkdir] Created dir: C:\cygwin64\tmp\demo\src
[touch] Creating C:\cygwin64\tmp\demo\src\abc0.txt
[touch] Creating C:\cygwin64\tmp\demo\src\abc1.java
[touch] Creating C:\cygwin64\tmp\demo\src\abc2.java
Setting project property: dest -> C:\cygwin64\tmp\/demo/dest
fileset: Setup scanner in dir C:\cygwin64\tmp\demo\src with patternSet{ includes: [**/*.java, **/*.txt] excludes: [] }
[copy] abc0.txt added as abc0.bak doesn't exist.
[copy] C:\cygwin64\tmp\demo\src\abc1.java skipped - don't know how to handle it
[copy] C:\cygwin64\tmp\demo\src\abc2.java skipped - don't know how to handle it
[copy] No sources found.
[copy] Copying 1 file to C:\cygwin64\tmp\demo\dest
[copy] Copying C:\cygwin64\tmp\demo\src\abc0.txt to C:\cygwin64\tmp\demo\dest\abc0.bak
BUILD SUCCESSFUL
Total time: 0 seconds