0

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

正如您在下面看到的,我希望${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
4

1 回答 1

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}" />
于 2012-06-25T16:49:46.103 回答