2010-12-30 20 views
10

Bir Zip dosyası oluşturan build.xml hedefim var. Hiçbir dosya güncellemediyse Zip’i oluşturmaktan kaçınmak için güncellemeleri önceden kontrol etmek istiyorum. AFAIK, uptodate kullanım görevi.Upeldate'de komut dosyası olarak filelist nasıl kullanılır Ant komutu?

İşte alakalı (basitleştirilmiş) komut bölümleri geçerli: srcfiles bir fileset değil, bir filelist başvurmalıdır çünkü

<filelist id="zip-files"> 
<file name="C:/main.exe" /> 
<file name="D:/other.dll" /> 
</filelist> 

<target name="zip" depends="zip-check" unless="zip-uptodate"> 
<zip destfile="${zip-file}" > 
    <filelist refid="zip-files" /> 
</zip> 
</target> 

<target name="zip-check"> 
<uptodate property="zip-uptodate" 
      targetfile="${zip-file}"> 
    <srcfiles refid="zip-files" /> 
</uptodate> 
</target> 

Ancak uptodate başarısız olur. Yine de, bir dir özniteliği gerektireceğinden bir fileset kullanamıyorum, çünkü kaynak dosyaları bir temel dizini paylaşmadığından ayarlayamıyorum.

Elbette, tüm dosyaları sıkıştırmadan önce ortak bir dizine kopyalayabilirim, böylece fileset'u kullanabilirdim, ama alternatif bir çözüm olup olmadığını merak ediyordum. Ben Yerine <srcfiles> kullanmanın ANT 1.8.1

cevap

15

kullanıyorum

, <srcresources> kullanmayı deneyin. <srcfiles> bir dosya grubu olmalı, ancak <srcresource>, herhangi bir kaynak koleksiyonunun birleşimi olabilir ve bu, bir filelist içermelidir.

Şu an hiç testi yapamaz, ancak böyle bir şey görünmelidir:

<filelist id="zip-files"> 
    <file name="C:/main.exe" /> 
    <file name="D:/other.dll" /> 
</filelist> 

<target name="zip" depends="zip-check" unless="zip-uptodate"> 
    <zip destfile="${zip-file}" > 
     <filelist refid="zip-files" /> 
    </zip> 
</target> 

<target name="zip-check"> 

    <union id="zip-union"> 
     <filelist refid="zip-files"/> 
    </union> 

    <uptodate property="zip-uptodate" 
     targetfile="${zip-file}"> 
     <srcresources refid="zip-union" /> 
    </uptodate> 
</target> 

sizin için çalışır Umut.

+0

Çalışıyor, teşekkürler. Bu konuyu "çözdüğünüzü" nasıl işaretleyeceğimi bilmiyorum, üzgünüm. – Elena

+1

Yanıt için "oy sayısı" altında beyaz bir kontrol var. Onay işaretine tıklayın ve sorunun cevabının yeşile döndüğü anlamına gelir. –