Domanda

Abbiamo uno script Apache ANT per creare la nostra applicazione, quindi archiviare il file JAR risultante nel controllo della versione (VSS in questo caso).Tuttavia, ora abbiamo una modifica che richiede di creare 2 file JAR per questo progetto, quindi archiviarli entrambi in VSS.

La destinazione corrente che controlla il file JAR originale in VSS scopre il nome del file JAR tramite alcune proprietà.Esiste un modo semplice per "generalizzare" questo target in modo da poterlo riutilizzare per archiviare un file JAR con qualsiasi nome?In un linguaggio normale ciò richiederebbe ovviamente un parametro di funzione ma, per quanto ne so, non esiste davvero un concetto equivalente in ANT.

È stato utile?

Soluzione

Suggerirei di lavorare con macro su subant/antcall perché il vantaggio principale che ho riscontrato con le macro è che hai il controllo completo sulle proprietà passate alla macro (specialmente se desideri aggiungere nuove proprietà).

Devi semplicemente rifattorizzare il tuo script Ant iniziando con il tuo target:

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

creazione di una macro (notare il copia/incolla e la sostituzione con @{file}):

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

e richiama le macro con i tuoi file:

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

Refactoring, "alla maniera di Ant"

Altri suggerimenti

Generalmente è considerata una cattiva idea controllare la versione dei propri file binari e non consiglio di farlo.Ma se proprio devi, puoi usare antcall combinato con param per passare parametri e chiamare un target.

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

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

Puoi trovare ulteriori informazioni su compito di Antcall qui.

Dai un'occhiata ad Ant macro.Permettono di definire "routine" riutilizzabili per le build Ant.Puoi trovare un esempio Qui (punto 15).

Controlla anche l'attività subant, che ti consente di chiamare la stessa destinazione su più file di 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>

Puoi usare Gant con cui scrivere lo script della tua build fantastico per fare quello che vuoi o dare un'occhiata al compito fantastico della formica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top