Question

J'ai une cible de build.xml qui crée un fichier Zip. Pour éviter de créer le Zip si aucun fichier a été mis à jour, je voudrais vérifier les mises à jour à l'avance. Autant que je sache, uptodate est la tâche à utiliser.

Voici les sections de script (simplifié) pertinents:

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

Cependant, uptodate échoue parce que srcfiles doit faire référence à un fileset, pas filelist. Pourtant, je ne peux pas utiliser fileset parce qu'il aurait besoin d'un attribut dir, que je ne peux pas définir, car les fichiers source ne partagent pas un répertoire de base.

Bien sûr, je pourrais simplement copier tous les fichiers dans un répertoire commun avant de les passer comme un éclair, étant ainsi en mesure d'utiliser fileset, mais je me demandais s'il y avait une solution de rechange.

J'utilise Ant 1.8.1

Était-ce utile?

La solution

Au lieu d'utiliser <srcfiles>, essayez d'utiliser <srcresources>. <srcfiles> doit être un ensemble de fichiers, mais <srcresource> peut être une union de toute collecte de ressources, et qui devrait inclure un filelist.

Je ne peux pas faire un test en ce moment, mais il devrait ressembler à ceci:

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

Je espère que ça fonctionne pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top