如何在文件集任务中包含一组文件,当它们是从外部提供的,说java程序或作为xml文件?
对于这类自定义,我们通常使用include和exclude正则表达式,
<fileset ...>
<include name="**/*Test.java" />
<exclude name="**/*.txt" />
但是我对要包含的文件一无所知,要对它们施加条件,因为在这种情况下,我们已经知道我们应该包含以test结尾的java文件,忽略txt文件。
要包含和排除的文件将从外部源(如java程序)或xml格式提供。在这种情况下,我如何将它们包含在文件集中?
找到了一种方法,在ant脚本中包含了一个groovy任务来完成这个任务。假设我有一个这样的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}" />