文件集蚂蚁,包括外部来源?

时间:2011-12-26 08:55:47

标签: ant

如果从java程序或xml文件外部提供文件集ant任务,我怎么能包含一组文件?

传统上,我们使用include和exclude regex进行这类自定义,

<fileset ...>
<include name="**/*Test.java" />
<exclude name="**/*.txt" />

但我对要包含的文件一无所知,对它们施加条件,因为在这种情况下我们已经知道我们应该包含以test结尾的java文件并忽略txt文件..

要包含和排除的文件将从外部源(如java程序)或xml格式提供。在这种情况下,如何将它们包含在文件集中?

1 个答案:

答案 0 :(得分:1)

找出一种方法来实现这一点。在ant脚本中包含一个常规任务来完成这个任务。说我有input.xml这样:

<include>       
    <targetclass name="com.samples.ClassToBeIncluded1" />               
    <targetclass name="com.samples.ClassToBeIncluded2" />
    <targetclass name="com.samples.ClassToBeIncluded3" />               
    <targetclass name="com.samples.ClassToBeIncluded4" />
</include>

提供有关要包含的类的详细信息。我使用简单的groovy解析器解析文件,并在ant中配置一个新属性,指定要包含的类集。

新属性是:

<property name="instrumentedclasses" value=""/>

读取外部输入并设置属性的groovy脚本是:

<groovy>
    def xmlParser = new XmlParser()
    def includeStr = ""
    def eachFile  = new File('input.xml')
    def includeRootNode = xmlParser.parse(eachFile)         
    includeRootNode.targetclass.each{ targetClassNode ->
        def className = targetClassNode.attribute("name")
        className = className.replace(".","/")
        includeStr = includeStr +className+".class "

    }
    properties["instrumentedclasses"] = includeStr

</groovy>

现在,下面的ant脚本使用新设置的属性来包含必要的类:

<fileset dir="${classes.dir}" includes="${instrumentedclasses}" />