2009-05-28 7 views

risposta

11

Creare una versione "senza file" della destinazione. Se tu avessi

<target name="A" depends="B"> 
    ... 
</target> 

Scelgo

<target name="A" depends="B,AwithoutDeps"/> 

<target name="AwithoutDeps"> 
    ... 
</target> 

Ora è possibile chiamare un normale (che sparare B quindi AwithoutDeps) o semplicemente chiamare AwithoutDeps esplicitamente e senza dipendenze sparato. [Si noti che "dipende" chiama le dipendenze in ordine]

Naturalmente, scegliere alcuni nomi migliori di questi;)

+0

Molto simile alla mia soluzione: penso che la differenza sia solo una questione di stile. Questo sfrutta la funzionalità di dipendenza di formica, la mia soluzione sfrutta la funzionalità di "incapsulazione". – Jared

+0

Grazie! Questo sembra più pulito di copiare e incollare. – GreenieMeanie

+0

@ Jared - Ho pensato anche ad antcall, ma è più costoso AFAIK, in quanto imposta una copia delle proprietà e così via. Non che si tratti di un enorme affare ... –

2

Penso che la tua unica scelta semplice qui sarebbe quella di creare una copia dell'obiettivo in questione e far sì che non abbia dipendenze.

+0

Sto semplicemente rimuovendo gli attributi dipendenti ora (che è quasi la stessa cosa), ma mi chiedo per una soluzione forse più pulita. – GreenieMeanie

+0

Sarebbe bello avere questa un'opzione per la riga di comando ant. – user959690

1

vorrei fare qualcosa di simile:

<target name="doSomethingNoDeps"> 
    ... 
</target> 

<target name="doSomething" depends="doSomeOther"> 
    <antcall target="doSomethingNoDeps"/> 
</target> 
2

Una possibilità è quella di utilizzare l'attributo if o unless sui target di dipendenza. Per esempio:

<target name="dependency1" unless="dependency1.disabled"> 
    <echo>Hello from dependency 1!</echo> 
</target> 

<target name="dependency2" unless="dependency2.disabled"> 
    <echo>Hello from dependency 2!</echo> 
</target> 

<target name="main-target" depends="dependency1, dependency2"> 
    <echo>Hello from the main target!</echo> 
</target> 

Ora è possibile eseguire Ant con -Ddependency1.disabled=true e/o -Ddependency2.disabled=true di lasciare fuori le dipendenze che non si desidera, ma il default sarà ancora di includerli.

E naturalmente, si potrebbe semplicemente avere una proprietà "globale" dependencies.disabled se è più semplice per voi.

Se si vuole fare il contrario di questo comportamento (in cui le dipendenze sono esclusi per impostazione predefinita), basta usare la if invece di unless (e hanno nomi di proprietà come "dependency1.enabled" invece di "disabile") .

-1

Ho fatto macro con un pezzo di codice, quello che voglio. Quindi ha fatto 2 bersagli, 1 chiama macro con "arg1", 2 ° con "arg2". È anche possibile creare macro senza parametri di inserimento.

+0

un la risposta dovrebbe mostrare come risolvere il problema. mostra cosa hai fatto –