Modo de empleo lista de archivos como conjunto de archivos de comandos Ant uptodate?
-
14-10-2019 - |
Pregunta
Tengo un objetivo de build.xml
que crea un archivo Zip. Para evitar la creación de la cremallera si no hay ningún archivo ha sido actualizado, me gustaría comprobar si hay actualizaciones de antemano. Que yo sepa, uptodate
es la tarea de usar.
Aquí es las secciones (simplificado) de script relevantes:
<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>
Sin embargo, uptodate
falla porque srcfiles
debe hacer referencia a un fileset
, no un filelist
. Aún así, no puedo utilizar un fileset
porque requeriría un atributo dir
, que no puedo establecer debido a los archivos de origen no comparten un directorio base.
Por supuesto, podría simplemente copiar todos los archivos a un directorio común antes de comprimirlos, por tanto, ser capaz de usar fileset
, pero me preguntaba si había una solución alternativa.
Estoy utilizando Ant 1.8.1
Solución
Instead of using <srcfiles>
, try using <srcresources>
. <srcfiles>
must be a fileset, but <srcresource>
can be a union of any collection of resources, and that should include a filelist
.
I can't do any test right now, but it should look something like this:
<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>
Hope it works for you.