过滤使用refid引用的文件集

Mau*_*uli 20 ant fileset

我有一个文件集(从Maven Ant任务返回),它包含我需要重新打包的所有jar.此文件集由refid引用.我只想包括我们自己的罐子,所以我想过滤一下.但是,如果使用refid,Ant文件集不支持任何其他属性或嵌套标记.

例如,如果文件集是:

org.foo.1.jar
org.foo.2.jar
log4j.jar
Run Code Online (Sandbox Code Playgroud)

我想要一个仅包含的文件集

org.foo*.jar
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

Sim*_*hke 27

尝试使用restrict资源集合,您可以像fileset使用资源集合中的任何任务一样选择要操作的文件组.

例如,对于fileset通过调用的id引用的Maven任务返回的内容,您dependency.fileset可以声明restrict资源集合,如下所示:

<restrict id="filtered.dependencies">
    <fileset refid="dependency.fileset"/>
    <rsel:name name="org.foo*.jar"/>
</restrict>
Run Code Online (Sandbox Code Playgroud)

请注意,您必须声明资源选择器命名空间,因为它不是内置Ant命名空间的一部分:

<project xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors">
    ...
</project>
Run Code Online (Sandbox Code Playgroud)

从这里,您可以参考您的restrict资源集合,以类似的方式引用您的资源集合fileset.例如,要创建已过滤文件集的备份:

<copy todir=".">
    <restrict refid="filtered.dependencies"/>
    <globmapper from="*" to="*.bak"/>
</copy>
Run Code Online (Sandbox Code Playgroud)

当然,restrict如果您愿意,可以内联您的资源集合:

<copy todir=".">
    <restrict>
        <fileset refid="dependency.fileset"/>
        <rsel:name name="org.foo*.jar"/>
    </restrict>
    <globmapper from="*" to="*.bak"/>
</copy>
Run Code Online (Sandbox Code Playgroud)

查看有关资源集合的Ant文档以获取更多信息.

  • 使用资源的好例子.我认为Ant文档中的示例可以改进,所以这非常有用. (2认同)