So come eseguire una singola destinazione in ANT, ma controlla anche l'attributo "dipende" e le esegue prima della destinazione. C'è un modo per prevenire questo o un modo per strutturare il mio file ANT in modo che possa farlo più facilmente?ANT - Esegui una singola destinazione ma senza dipendenze
risposta
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;)
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.
Sto semplicemente rimuovendo gli attributi dipendenti ora (che è quasi la stessa cosa), ma mi chiedo per una soluzione forse più pulita. – GreenieMeanie
Sarebbe bello avere questa un'opzione per la riga di comando ant. – user959690
vorrei fare qualcosa di simile:
<target name="doSomethingNoDeps">
...
</target>
<target name="doSomething" depends="doSomeOther">
<antcall target="doSomethingNoDeps"/>
</target>
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") .
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.
un la risposta dovrebbe mostrare come risolvere il problema. mostra cosa hai fatto –
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
Grazie! Questo sembra più pulito di copiare e incollare. – GreenieMeanie
@ 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 ... –