2017-08-01 83 views
1

我試圖放棄使用notcontains關鍵字在我的Ant構建中的@WebService註釋類。但是,它不起作用,仍然包含使用@WebService註解的類。下面是用於源複製到工作build目錄任務:文件集包含一些文件但不是全部的選擇器

<copy todir="${compile.dir}"> 
    <fileset dir="${src.dir}"> 
     <include name="**/*" /> 
     <exclude name="**/*.class" /> 
     <exclude name="log4j.properties" /> 
     <exclude name="log4j.properties.*" /> 
     <exclude name="log4j.xml" /> 
     <exclude name="log4j.xml.*" /> 
     <exclude name="*.jocl" /> 
     <not> 
      <contains text="@WebService(" casesensitive="true" /> 
     </not> 
    </fileset> 
</copy> 

然而,這似乎是not節被忽略,而這些類仍然被複制。爲什麼這不起作用?語法錯了嗎?另外,如何添加條件,以便限制僅涉及.java文件?我正在使用Apache Ant(TM) version 1.9.6 compiled on July 8 2015

+1

是'$ {compile.dir}'空每次運行前:

的選擇容器,如果你喜歡能等效這樣寫? ''只會對任何它認爲需要複製的文件採取操作,它不會刪除它在之前的運行中複製的文件。 –

+0

它不是。愚蠢的我指望隱含的乾淨 –

回答

1

(也許這會引導你,這對我的作品,但我不能肯定我完全理解你的要求。)

試試這個文件集:

<fileset dir="${src.dir}"> 
    <exclude name="**/*.class" /> 
    <exclude name="log4j.properties" /> 
    <exclude name="log4j.properties.*" /> 
    <exclude name="log4j.xml" /> 
    <exclude name="log4j.xml.*" /> 
    <exclude name="*.jocl" /> 
    <or> 
    <filename name="**/*.java" negate="yes" /> 
    <not> 
     <contains text="@WebService(" casesensitive="true" /> 
    </not> 
    </or> 
</fileset> 

一很少有解釋性意見:

沒有必要指定<include name="**/*" />這是隱含在文件集中的。

當您在文件集(如<not>...<contains>...</not>)中包含嵌套的selector時,這與模式集(彼此隱式地進行OR操作)隱式相與。請參閱<fileset>文檔:

選擇器可用作FileSet中的嵌套元素。如果FileSet中的選擇器的任何 未選擇該文件,則文件 不被視爲FileSet的一部分。這使FileSet對等 到<and>選擇器容器。

這樣做的結果是您需要使用帶有兩個負選擇器的<or>選擇器容器。換句話說,「選擇文件,如果它的不是一個java文件或它匹配文本字符串」

<or> 
    <not> 
    <filename name="**/*.java" /> 
    </not> 
    <not> 
    <contains text="@WebService(" casesensitive="true" /> 
    </not> 
</or> 
相關問題