如何在 ant fileset 或 src 中使用通配符

How to use wild card in ant fileset or src

使用蚂蚁 1.5 我正在尝试创建一个 jar 文件,其中包含在产品目录下编译的文件,可以不断更改构建名称

/target
   |---myapp-1.3.5-SNAPSHOT
          |--- WEB-INF
                 |---classes
                 |---i18n

有点挑剔,但我必须制作一个仍保持 web 结构的 jar 文件

|---myapp-utility.jar
       |--- WEB-INF
              |---classes
              |---i18n

这意味着我必须使用通配符来识别具有构建和快照的目录

<jar destfile="myapp-utility.jar">
    <manifest>
        ....
    </manifest>
    <fileset dir="myapp-**/"/>
</jar>

它不起作用,无法识别通配符。那么有什么选择呢?

Ant 1.5 是非常旧的 Ant 版本。如果至少可以使用 Ant 1.8.2(2010 年发布),则可以使用以下...

<jar destfile="myapp-utility.jar">
    <mappedresources>
        <fileset dir="target">
            <include name="myapp-*/**"/>
        </fileset>
        <cutdirsmapper dirs="1"/>
    </mappedresources>
</jar>

结果<mappedresources> resource collection wraps the <fileset> element and then applies a mapper

确实<fileset>dir不能处理通配符。幸运的是,<include> 可以处理通配符。因此,上面将通配符测试放入<include>** 确保 myapp-* 下的所有文件都匹配。

最后,<cutdirsmapper> 从每个文件中删除 myapp-1.3.5-SNAPSHOT/ 部分。

可以使用pathconvert分析通配符规范:

<pathconvert property="myapp.dir">
    <dirset dir="target" includes="myapp-*"/>
</pathconvert>

<jar destfile="myapp-utility.jar">
    <manifest>
        <!-- .... -->
    </manifest>
    <fileset dir="${myapp.dir}"/>
</jar>