Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant 当文件集包含与globmapper模式不匹配的文件时,如何强制执行错误_Ant - Fatal编程技术网

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