Ant 筛选使用refid引用的文件集

Ant 筛选使用refid引用的文件集,ant,fileset,Ant,Fileset,我有一个文件集(从Maven Ant任务返回),它包含我需要重新打包的所有JAR。此文件集由refid引用。我只想包括我们自己的罐子,所以我想过滤它。但是如果使用refid,Ant文件集不支持任何进一步的属性或嵌套标记 例如,如果文件集为: org.foo.1.jar org.foo.2.jar log4j.jar 我想要一个只包含 org.foo*.jar 我该怎么做呢?我想你需要为此编写一个ant任务。不过它们很容易写 看 在任务中,您需要调用getProject()并要求它提供文件集,

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

例如,如果文件集为:

org.foo.1.jar
org.foo.2.jar
log4j.jar
我想要一个只包含

org.foo*.jar

我该怎么做呢?

我想你需要为此编写一个ant任务。不过它们很容易写


在任务中,您需要调用getProject()并要求它提供文件集,遍历文件集,然后创建一个新的文件集。

如果您使用的是足够新的Ant和JDK版本,例如Ant 1.7和JDK 6,那么您可以使用。(早期版本也可以使用。)在我链接的页面上,如果您向下滚动到文本“目标是列出文件大小”,那么您将看到一个创建文件集的示例脚本

这不适合胆小的人,你自己编写的定制ant任务可能会更灵活。但是我想指出一个选项。

我正在使用Ant。在Ivy的帮助下,可以使用Ivy.xml中的以下代码筛选依赖项进行检索:

<dependency name="Project1" rev="latest.integration" transitive="true" conf="modlibs">
<exclude name="${exclusionRegEx}" matcher="regexp" />
</dependency>
<dependency name="Project2" rev="latest.integration" transitive="false" conf="modules"/>

也许快速查看一下常春藤源代码会有所帮助?

尝试使用资源集合,在任何使用资源集合来选择要操作的文件组的任务中,都可以像使用
文件集一样使用资源集合

例如,对于通过名为
dependency.fileset
的id引用的Maven任务返回的
文件集
,可以声明
限制
资源集合,如下所示:

<restrict id="filtered.dependencies">
    <fileset refid="dependency.fileset"/>
    <rsel:name name="org.foo*.jar"/>
</restrict>
当然,如果您愿意,您可以内联
限制
资源收集:

<copy todir=".">
    <restrict>
        <fileset refid="dependency.fileset"/>
        <rsel:name name="org.foo*.jar"/>
    </restrict>
    <globmapper from="*" to="*.bak"/>
</copy>


有关更多信息,请参阅上的Ant文档。

使用资源的好例子。我认为Ant文档中的示例可以改进,因此这非常有帮助。
<copy todir=".">
    <restrict refid="filtered.dependencies"/>
    <globmapper from="*" to="*.bak"/>
</copy>
<copy todir=".">
    <restrict>
        <fileset refid="dependency.fileset"/>
        <rsel:name name="org.foo*.jar"/>
    </restrict>
    <globmapper from="*" to="*.bak"/>
</copy>