Question

J'essaie de créer 2 fichiers zip dans le cadre d'une tâche de fourmi. Les deux sont similaires, mais on comprend quelques données supplémentaires. Donc, pour réduire le code, je voudrais définir un ensemble de fichiers et le faire référence. Le seul problème est qui produit une erreur.

Tâche:

<target name="create-zips" depends="cleanup, compile, package-jar">

    <zipfileset id="zipfiles">
        <zipfileset dir="${ant.project.name}-dist" includes="${jarname}.jar" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram" filemode="755" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram_gui" filemode="755" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram_gui.command" filemode="755" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram.bat" filemode="755" prefix="${title}"/>
        <zipfileset dir="${scripts.dir}" includes="myprogram_gui.bat" filemode="755" prefix="${title}"/>
        <zipfileset dir="${docs.dir}" includes="myprogram_readme.txt" prefix="${title}"/>
    </zipfileset>

    <zip destfile="${deploy.dir}/myprogram_${version}.zip" whenempty="fail" defaultexcludes="true">
         <zipfileset refid="zipfiles"/>
        <zipfileset dir="${otherdata.dir}" includes="other/*.*" prefix="${title}"/>
    </zip>
    <zip destfile="${deploy.dir}/myprogram_noother_${version}.zip" whenempty="fail" defaultexcludes="true">
        <zipfileset refid="zipfiles"/>
    </zip>
</target>

Lorsque la tâche est exécutée:

    create-zips:

BUILD FAILED
/path/to/my/buildfile/build-tools.xml:119: Problem opening /path/to/my/data/docs/myprogram_readme.txt

J'ai vérifié que le fichier existe. La suppression du ReadMe inclut simplement l'erreur se produire sur un autre fichier. De plus, si je copie et collet le zipfileset en 2 balises distinctes, tout fonctionne bien. Mais je préfère ne pas faire ça.

Edit: Apache Ant (TM) Version 1.8.2 Compilé le 14 octobre 2011, Mac OS X 10.7. Je n'ai essayé sur aucune autre plate-forme.

Était-ce utile?

La solution

J'essayais une fois de faire de même, en vain. UN fileset n'accepte pas les imbriquées fileset. Lorsque vous essayez de tricher et d'utiliser zipfileset En tant qu'ensemble extérieur, Anti considère son contenu comme des fichiers zip. Lorsque Ant essaie de décompresser vos fichiers, vous obtenez erreur d'ouverture.

UN fileset doit avoir dir attribut. Ce DIR doit être parent de tous les composants de set de fichiers. Triste mais vrai.

Je me suis retrouvé dans la solution de contournement. Créer des ensembles de fichiers x. Ces ensembles de fichiers peuvent être spécifiés comme des éléments imbriqués d'un zip tâche. Si dans un cas donné, vous avez besoin de moins de x, alors faites une valeur par défaut pour tous les ensembles de fichiers X, et zip toujours tous les X.

<!-- define X empty filesets -->
<fileset dir="c:\temp\1" includes="asdfasdf.neverhappens" id="nullfileset" />
<fileset id="zipfileset2" refid="nullfileset" />
<fileset id="zipfileset3" refid="nullfileset" />

<!-- here go real sets -->
<zipfileset dir="${scripts.dir}" includes="myprogram" />

Faites attention aux ensembles de fichiers ANT. Ils sont mutables. J'ai écrit une fois une "question" à ce sujet, mais quelqu'un l'a supprimée. Bravo, empiler des gens, "merci" pour cela.

Edit1: sur Linux, on pourrait essayer dir="/" et utilise selectors imbriqué à l'intérieur d'un fileset. J'étais sous Windows avec mon problème, donc je ne pouvais pas faire ça. Il n'y a pas de "/" sur Windows et je collectais des fichiers à partir de différents disques.

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