Come utilizzare filelist come set di file al comando uptodate Ant?
-
14-10-2019 - |
Domanda
Ho un obiettivo di build.xml
che crea un file Zip. Per evitare di creare la Zip se nessun file è stato aggiornato, mi piacerebbe controllare gli aggiornamenti in anticipo. Per quanto ne so, uptodate
è il compito di utilizzo.
Ecco le pertinenti sezioni (semplificato) 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, non riesce a causa uptodate
srcfiles
deve fare riferimento a un fileset
, non un filelist
. Eppure, non posso usare un fileset
perché richiederebbe un attributo dir
, che non riesco a impostare, perché i file di origine non condividono una directory di base.
Naturalmente, ho potuto solo copiare tutti i file in una directory comune prima di zippare, in tal modo la possibilità di utilizzare fileset
, ma mi chiedevo se ci fosse una soluzione alternativa.
sto usando Ant 1.8.1
Soluzione
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 un filelist
.
Non riesco a fare qualsiasi 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>
La speranza che funziona per voi.