2013-02-06 53 views
2

這似乎是應該是顯而易見的事情,但我不認爲它是。鑑於:如何使用模式集來過濾文件列表?

  • 文件的空格分隔(或逗號分隔等)
  • 白名單模式

如何想出一個包含所有的<fileset><patternset>列表中與白名單模式相匹配的文件?

獲取從列表中的文件列表是很容易的:

 
<patternset id="the-patternset" includes="${list.of.files}" /> 
<fileset id="the-fileset" dir="${basedir}"> 
    <patternset refid="the-patternset" /> 
</fileset> 
<pathconvert pathsep="${line.separator}" property="the-filelist" refid="the-fileset"/> 
<echo>fileset: ${the-filelist}</echo> 

...會很樂意與生產的所有文件的文件集中${list.of.files}。但添加了各種各樣的過濾器:

 
<patternset id="the-filter"> 
    <include name="includeme/**/*.java" /> 
    <exclude name="excludeme/**/*.java" /> 
</patternset> 

<patternset id="the-patternset" includes="${list.of.files}" /> 
<fileset id="the-fileset" dir="${basedir}"> 
    <patternset refid="the-patternset" /> 
    <patternset refid="the-filter" /> 
</fileset> 
<pathconvert pathsep="${line.separator}" property="the-filelist" refid="the-fileset"/> 
<echo>fileset: ${the-filelist}</echo> 

...將列出的patternsets,即工會,無論是匹配the-filterthe-patternset的所有文件。

如何生成一個文件集,其中包含文件${list.of.files}匹配the-patternset

+0

您是否得到了這款君黛的工作解決方案? –

回答

1

這是一個盆栽的例子。從每個模式集創建兩個文件集(或者可能是文件列表)。我就在這裏使用固定列表:

<property name="list.1" value="a,b,c" /> 
<property name="list.2" value="b,c,d" /> 

<fileset dir="." id="set.1" includes="${list.1}" /> 
<fileset dir="." id="set.2" includes="${list.2}" /> 

然後用<intersect>資源集合,以獲得所需的「重疊」設置:

<intersect id="intersect"> 
    <resources refid="set.1"/> 
    <resources refid="set.2"/> 
</intersect> 

大多數Ant任務將允許您使用的資源集合放置一個簡單的文件集。

+0

這使我可以打印交集,但是如何將交集轉換回文件集?例如,PMD不會容忍資源收集。 –

+0

有多種方式,但爲什麼不做你已經做過的事情,即從交集列表中創建一個模式集,然後從模式集中創建一個文件集? –