Question

Nous avons un script Apache ANT pour créer notre application, puis archivons le fichier JAR résultant dans le contrôle de version (VSS dans ce cas).Cependant, nous avons maintenant un changement qui nous oblige à créer 2 fichiers JAR pour ce projet, puis à archiver les deux dans VSS.

La cible actuelle qui vérifie le fichier JAR d'origine dans VSS découvre le nom du fichier JAR via une propriété.Existe-t-il un moyen simple de « généraliser » cette cible afin de pouvoir la réutiliser pour archiver un fichier JAR portant n'importe quel nom ?Dans un langage normal, cela nécessiterait évidemment un paramètre de fonction mais, à ma connaissance, il n'existe pas vraiment de concept équivalent dans ANT.

Était-ce utile?

La solution

Je suggérerais de travailler avec macro par rapport à subant/antcall car le principal avantage que j'ai trouvé avec les macros est que vous contrôlez totalement les propriétés qui sont transmises à la macro (surtout si vous souhaitez ajouter de nouvelles propriétés).

Vous refactorisez simplement votre script Ant en commençant par votre cible :

<target name="vss.check">
    <vssadd localpath="D:\build\build.00012.zip" 
        comment="Added by automatic build"/>
</target>

créer une macro (notez le copier/coller et le remplacement par le @{file}) :

<macrodef name="private-vssadd">
    <attribute name="file"/>
    <sequential>
        <vssadd localpath="@{file}" 
            comment="Added by automatic build"/>
    </sequential>
</macrodef>

et invoquez les macros avec vos fichiers :

<target name="vss.check">
    <private-vssadd file="D:\build\File1.zip"/>
    <private-vssadd file="D:\build\File2.zip"/>
</target>

Le refactoring, "à la manière des fourmis"

Autres conseils

Il est généralement considéré comme une mauvaise idée de contrôler la version de vos binaires et je ne recommande pas de le faire.Mais si vous le devez absolument, vous pouvez utiliser antcall combiné avec param pour transmettre des paramètres et appeler une cible.

<antcall target="reusable">
    <param name="some.variable" value="var1"/>
</antcall>

<target name="reusable">
    <!-- Do something with ${some.variable} -->
</target>

Vous pouvez trouver plus d'informations sur le tâche anti-appel ici.

Jetez un oeil à Ant macro.Ils vous permettent de définir des « routines » réutilisables pour les builds Ant.Vous pouvez trouver un exemple ici (point 15).

Consultez également la tâche secondaire, qui vous permet d'appeler la même cible sur plusieurs fichiers de build :

<project name="subant" default="subant1">
    <property name="build.dir" value="subant.build"/>
    <target name="subant1">
        <subant target="">
            <property name="build.dir" value="subant1.build"/>
            <property name="not.overloaded" value="not.overloaded"/>
            <fileset dir="." includes="*/build.xml"/>
        </subant>
    </target>
</project>

Vous pouvez utiliser Gant pour scripter votre build avec sensationnel faire ce que tu veux ou jeter un oeil à tâche géniale de fourmi.

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