2010-12-30 18 views
10

Ho un obiettivo di build.xml che crea un file Zip. Per evitare di creare Zip se nessun file è stato aggiornato, vorrei verificare in anticipo gli aggiornamenti. AFAIK, uptodate è l'attività da utilizzare.Come utilizzare l'elenco file come set di file in uptodate comando Ant?

Ecco le pertinenti (semplificato) sezioni di script:

<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> 

Tuttavia, uptodate fallisce perché srcfiles deve fare riferimento a un fileset, non un filelist. Tuttavia, non posso usare uno fileset perché richiederebbe un attributo dir, che non posso impostare perché i file di origine non condividono una directory di base.

Naturalmente, potevo semplicemente copiare tutti i file in una directory comune prima di zipparli, potendo quindi utilizzare fileset, ma mi chiedevo se esistesse una soluzione alternativa.

sto usando Ant 1.8.1

risposta

15

Invece di usare <srcfiles>, provare a utilizzare <srcresources>. <srcfiles> deve essere un set di file, ma <srcresource> può essere un'unione di qualsiasi raccolta di risorse e che dovrebbe includere uno filelist.

io non posso fare alcuna prova in questo momento, ma dovrebbe essere simile a questa:

<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> 

auguro che funziona per voi.

+0

Funziona, grazie. Non so come contrassegnare questo argomento "risolto" da te, mi dispiace. – Elena

+1

C'è un controllo bianco sotto il "numero di voti" per la risposta. Fare clic sul segno di spunta e diventerà verde indicando che la domanda ha avuto risposta. –

Problemi correlati