使用Apache Ant将子目录与通配符匹配?

时间:2012-06-25 16:09:36

标签: apache ant phpunit

我正在尝试设置构建文件,我很好奇你是否可以在属性中使用通配符来表示文件路径?或者解决这个问题的更好方法是什么?

如下所示,我希望解决${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

1 个答案:

答案 0 :(得分:2)

Ant 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}" />