Domanda

Ho un progetto con più moduli, ognuno nella sua directory. Ogni modulo ha il proprio file build ant (build.xml)

Nella directory principale ho impostato un file di build generale che chiama il file di build di ciascun modulo nel giusto ordine.

<?xml version="1.0"?>
<project name="bridgedb" default="all" basedir=".">
  <target name="all">
    <ant dir="corelib"/>
    <ant dir="tools"/>
    <ant dir="makeGdb"/>
    <ant dir="cytoscape-plugin"/>
  </target>
</project>

Ora ogni modulo ha anche un " clean " target, quindi aggiungo queste righe:

 <target name="clean">
    <ant dir="corelib" target="clean"/>
    <ant dir="tools" target="clean"/>
    <ant dir="makeGdb" target="clean"/>
    <ant dir="cytoscape-plugin" target="clean"/>
  </target>

E ci sono più obiettivi del genere. C'è un modo per riscrivere il file di build per evitare questa duplicazione? Ho cercato una proprietà integrata che contenga il target attivo, ma non sono riuscito a trovarlo.

È stato utile?

Soluzione

Perché non usare antcall per chiamare un target che fa riferimento a tutti i tuoi sottodir, e parametrizza il target da chiamare. per es.

 <antcall target="doStuffToSubdirs">
    <!-- let's clean -->
    <param name="param1" value="clean"/>
  </antcall>

e quindi:

<target name="doStuffToSubdirs">
   <ant dir="corelib" target="${param1}"/>
   <ant dir="tools" target="${param1}"/>
    ...etc
</target>

quindi questo ti permette di parametrizzare le chiamate ai tuoi sottodir. Se aggiungi un nuovo sottodir, devi solo aggiungerlo al target 'doStuffToSubdirs' (lo rinominerei anche io!)

Altri suggerimenti

Inserisci un target pulito nel tuo commonbuild.xml e nei file secondari importa semplicemente il tuo genitore build.xml

<import file="${parent.dir}/commonbuild.xml" />

Ora sarai in grado di chiamare l'obiettivo pulito nelle build del tuo bambino. Puoi anche ignorare questo obiettivo creando un obiettivo pulito in qualsiasi build di tuo figlio.

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