2012-06-25 118 views
0

我想安装一个构建文件,我很好奇,如果你可以在属性中使用通配符来表示文件路径?或者更好的解决这个问题的方法是?使用Apache Ant将子目录与通配符匹配?

正如您在下面看到的,我希望${dirtwo}中以“foo-”开头的所有文件或目录得到解决,而不必手动将每个目录/文件包含为属性。

<?xml version="1.0" encoding="UTF-8"?> 

<project name="core" default="build" basedir="."> 
    <property name="dirone" value="path/to/dir/one" /> 
    <property name="dirtwo" location="path/to/dir/two/foo-*" /> 

    <target name="phpmd" description="Generate pmd.xml using PHPMD"> 
    <exec executable="phpmd"> 
     <arg line="${dirone},${dirtwo} 
       xml 
       codesize,design,naming,unusedcode 
       --reportfile ${basedir}/build/logs/pmd.xml" /> 
    </exec> 
    </target> 
    ... 
</project> 

目前,无论我如何尝试使用通配符或转义符,我所得到的都是错误。

Buildfile: /var/www/server/project/build.xml 

phpmd: 
    [exec] The given file "/var/www/server/project/path/to/dir/two/foo-*" does not exist. 
    [exec] Result: 1 

回答

2

蚂蚁DirSet匹配包含/排除模式的目录。您可以将其与Pathconvert结合使用,如下所示。

<?xml version="1.0" encoding="UTF-8"?> 
<project name="core" default="build" basedir="."> 
    <property name="mybase.dir" location="/path/to/your/base/dir" /> 
    <dirset dir="${mybase.dir}" includes="**/foo-*" id="directories" /> 
    <pathconvert pathsep=", " property="directory-list" refid="directories" /> 

    <target name="phpmd" description="Generate pmd.xml using PHPMD"> 
    <exec executable="phpmd"> 
    <arg line="${directory-list} 
       xml 
       codesize,design,naming,unusedcode 
       --reportfile ${basedir}/build/logs/pmd.xml" /> 
    </exec> 
    </target> 
</project> 

要测试的dirsetpathconvert结果,你可以使用:

<echo message="${directory-list}" /> 
+0

谢谢,这个工作完美! – veilig