2013-03-14 41 views
1

這是我嘗試的一個示例目標。原來,它想要刪除所有內容,因爲逗號分隔了「* */*」和「封面」 - 可以理解。在Ant中,如何在文件名中指定帶逗號的文件?

<target name="clean"> 
    <delete 
     verbose="true"> 
     <fileset dir="." includes="**/*.pyo"></fileset> 
     <fileset dir="." includes="**/*,cover"></fileset> 
    </delete> 
</target> 

如何指定嵌入式逗號?

我在學習Ant,所以我不必爲不同的操作系統維護不同的構建系統。在這種情況下,它位於Python環境中,其中*,封面文件由代碼覆蓋率檢查工具Coverage創建。

+0

您是否試過用\(反斜槓)字符轉義它? – MattDMo 2013-03-14 20:34:48

+0

是的,我做到了。我也試着用兩個反斜槓嘗試Sheryl的建議,但這也沒有幫助。 – 2013-03-14 22:03:28

回答

1

你不需要逃避這一點。只需使用<include/>而不是includes arg。試試這個:

<project name="test" default="clean"> 

    <dirname property="build.dir" file="${ant.file.test}" /> 

    <target name="clean"> 
     <delete> 
      <fileset dir="${build.dir}/test"> 
       <include name="**/*,*.xml" /> 
      </fileset> 
     </delete> 
    </target> 

</project> 

順便說一下。你不應該在你的dir參數中使用.(點)。如果你想刪除文件夾中的文件,你應該通過絕對路徑(爲此,你可以使用<dirname/>就像我的例子)。如果你將使用.那麼你將會遇到嵌套構建的問題。讓你已經有兩個imageine建立其刪除文件,但第一次構建也叫第二次構建:

MAINDIR/build1.xml

<delete dir="." includes="**/*.txt" /> 
<!-- call clean target from build2.xml --> 
<ant file="./subdir/build2.xml" target="clean"/> 

MAINDIR /子目錄/ build2.xml

<delete dir="." includes="**/*.txt" /> 

在這種情況build2.xml不會刪除子目錄中的* .txt文件,而是在主文件中的* .txt文件,因爲ant屬性將傳遞給build2.xml。當然你可以用inheritAll="false"來省略這個,但是從我的經驗來看,我知道在路徑中使用.會帶來很多問題。

+0

工作正常! ''做到了!關於dir =「。」的好處 - 我會改變它。非常感謝! – 2013-03-14 22:06:47

0

除非你有在蓋端名稱的其他文件,你不想刪除,只留下逗號出來:

<fileset dir="." includes="**/*cover"></fileset> 

如果你有在蓋端的其他文件,你別不想刪除,請嘗試MattDMo評論中的反斜槓建議。您可能需要雙擊反斜槓(「**/*\\,cover」)。

另一種可能性:您可以配置Coverage將其輸出放在另一個目錄中,這樣您可以刪除整個目錄嗎?或者你可以配置它使用不同的輸出文件名,所以你沒有這個問題?我不熟悉Coverage,但看看你提供的鏈接,它看起來像data_file選項可能會做一個或兩個這些事情。

+0

我暫時將逗號作爲臨時解決方案(兩個反斜槓似乎沒有任何區別)。感謝這個想法。 – 2013-03-14 22:04:31

相關問題