如果从java程序或xml文件外部提供文件集ant任务,我怎么能包含一组文件?
传统上,我们使用include和exclude regex进行这类自定义,
<fileset ...>
<include name="**/*Test.java" />
<exclude name="**/*.txt" />
但我对要包含的文件一无所知,对它们施加条件,因为在这种情况下我们已经知道我们应该包含以test结尾的java文件并忽略txt文件..
要包含和排除的文件将从外部源(如java程序)或xml格式提供。在这种情况下,如何将它们包含在文件集中?
答案 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}" />