2012-02-28 26 views
1

我試圖創建2個zip文件作爲螞蟻任務的一部分。兩者都相似,但其中一個包含一些額外的數據。所以爲了減少代碼,我想定義一個文件集並引用它。唯一的問題是產生一個錯誤。通過refid創建zip文件時出錯

任務:

<target name="create-zips" depends="cleanup, compile, package-jar"> 

    <zipfileset id="zipfiles"> 
     <zipfileset dir="${ant.project.name}-dist" includes="${jarname}.jar" prefix="${title}"/> 
     <zipfileset dir="${scripts.dir}" includes="myprogram" filemode="755" prefix="${title}"/> 
     <zipfileset dir="${scripts.dir}" includes="myprogram_gui" filemode="755" prefix="${title}"/> 
     <zipfileset dir="${scripts.dir}" includes="myprogram_gui.command" filemode="755" prefix="${title}"/> 
     <zipfileset dir="${scripts.dir}" includes="myprogram.bat" filemode="755" prefix="${title}"/> 
     <zipfileset dir="${scripts.dir}" includes="myprogram_gui.bat" filemode="755" prefix="${title}"/> 
     <zipfileset dir="${docs.dir}" includes="myprogram_readme.txt" prefix="${title}"/> 
    </zipfileset> 

    <zip destfile="${deploy.dir}/myprogram_${version}.zip" whenempty="fail" defaultexcludes="true"> 
     <zipfileset refid="zipfiles"/> 
     <zipfileset dir="${otherdata.dir}" includes="other/*.*" prefix="${title}"/> 
    </zip> 
    <zip destfile="${deploy.dir}/myprogram_noother_${version}.zip" whenempty="fail" defaultexcludes="true"> 
     <zipfileset refid="zipfiles"/> 
    </zip> 
</target> 

當運行任務:

create-zips: 

BUILD FAILED 
/path/to/my/buildfile/build-tools.xml:119: Problem opening /path/to/my/data/docs/myprogram_readme.txt 

我已經驗證該文件存在。刪除自述文件只包括使錯誤發生在不同的文件上。另外,如果我只是將zipfileset複製並粘貼到2個單獨的標籤中,一切正常。但我寧願不這樣做。

編輯:Apache Ant(TM)版本1.8.2編譯於2011年10月14日,Mac OS X 10.7。還沒有嘗試過任何其他平臺。

回答

0

我曾嘗試過這樣做,無濟於事。 A fileset不接受嵌套fileset。當您嘗試作爲外部設置作弊並使用zipfileset時,ant會將其內容視爲zip文件。當螞蟻試圖解壓縮文件時,你會得到打開錯誤

A fileset必須具有dir屬性。這個目錄必須是所有文件集組件的父目錄。悲傷但真實。

我結束瞭解決方法。創建X個文件集。這些文件集可以指定爲zip任務的嵌套元素。如果在給定的情況下,你需要小於X,然後讓所有的X文件集默認和郵政編碼,從來都是十

<!-- define X empty filesets --> 
<fileset dir="c:\temp\1" includes="asdfasdf.neverhappens" id="nullfileset" /> 
<fileset id="zipfileset2" refid="nullfileset" /> 
<fileset id="zipfileset3" refid="nullfileset" /> 

<!-- here go real sets --> 
<zipfileset dir="${scripts.dir}" includes="myprogram" /> 

要小心螞蟻文件集。他們是可變的。我曾經寫過一個關於它的「問題」,但有人刪除了它。幹得好安靜的工作,堆棧人,「謝謝」。

編輯1:在Linux上,可以嘗試dir="/"並使用嵌套在fileset內的selectors。我在Windows上遇到了問題,所以我無法做到這一點。 Windows上沒有「/」,我正在收集來自不同驅動器的文件。

+0

這樣做有一定的意義,儘管嵌套文件集會很好。我可能在我的情況下使用選擇器,因爲所有相關文件都有一個父目錄。 – node1377 2012-02-29 14:51:53

+0

但我想起了另一個問題。我無法剪切路徑,並且zip從根目錄到文件都保留了整個路徑。也許你會以某種方式修復它。 – Jarekczek 2012-02-29 17:12:58