2013-07-15 16 views
5

Dopo la migrazione da formica pura a formica + ivy, i tempi di costruzione del mio progetto sono aumentati da 7 a 26 secondi mentre le ricostruzioni incrementali sono ora 7s anziché appena 1s (quasi istantaneo).Migliorare le prestazioni della risoluzione dell'edera

La maggior parte di questo tempo sembra essere speso in ivy:resolve che ho bisogno di generare classpath utilizzando ivy:cachepath.

C'è un modo per velocizzare questo, in particolare le ricostruzioni?

+0

Aumentare la cache TTL aiuta molto - ricostruiscono gli orari sono fino a 2s. Immagino che il secondo in più sia solo un'inefficienza dell'edera. Le build complete (con cache popolata) sono 20 per qualche motivo però. Si prega di creare una risposta che posso contrassegnare. –

risposta

1

Si sta utilizzando <ivy:cleancache>? Questo è il motivo per cui le tue ricostruzioni sono così brevi, ma le tue build iniziali sono così lunghe.

L'edera sarà più lenta rispetto all'utilizzo di Ant senza Ivy. Ivy deve scaricare ogni jar specificato, oltre a tutte le dipendenze nella cache di Ivy (che per impostazione predefinita è $HOME/.ivy2/cache su Unix/Mac/Linux e %USERPROFILE%\.ivy2\cache su Windows) prima che possa iniziare. Potresti specificare 4 o 5 vasi, ma questi potrebbero dipendere da altri che potrebbero dipendere ancora di più.

Ci

in realtà non è un modo per accelerare il download Ivy di vasi , ma una volta vasetti vengono scaricati, non c'è davvero una ragione per pulire costantemente la cache Ivy ogni volta che fai un nuovo progetto, o quando fai una pulizia.

Che cosa si può fare è impostare il pulito, in modo da poter evitare di pulire la cache Ivy se non si specifica che:

<taskdef uri="http://ant.apache.org/ivy" 
    resource="org/apache/ivy/ant/antlib.xml"> 
    <classpath> 
     <fileset dir="${ivy.dir}"> 
      <include name="ivy*.jar"/> 
     </fileset> 
    </classpath> 
</taskdef> 

<property name="ivy.cleancache" value="false"/> 
<target name="clean"> 
    <if> 
     <istrue value="${ivy.cleancache}"/> 
     <then> 
      <ivy:cleancache/> 
     </then> 
    <if> 
    <delete dir="${target.dir}"/> 
</target> 

In questo modo, l'esecuzione ant clean non fregare la cache Ivy ogni volta, e puoi riutilizzarlo più e più volte. Se si desidera pulire la cache Ivy è necessario fare questo:

ant -Divy.cleancache=true clean 

Sì, questo sta usando antcontrib. Uso la mia speciale configurazione della directory Ivy per configurare Ivy per tutti e mentre ci sono, per includere le definizioni per ant-contrib, oltre a Findbugs, PMD e altri utili strumenti.

Tuttavia, potrebbe essere possibile in Ant 1.9 non hanno a che fare questo:

<property name="ivy.cleancache" value="false"/> 
<target name="clean"> 
    <ivy:cleancache if:true="ivy.cleancache/> 
    <delete dir="${target.dir}"/> 
</target> 

Non ho provato questo, ma se funziona, non c'è bisogno di usare antcontrib. Naturalmente, si potrebbe fare anche questo:

<target name="ivy.cleancache" 
    if="ivy.cleancache"> 
    <ivy:cleancache/> 
</target> 

<target name="clean" 
    depends="ivy.cleancache"> 
    <delete dir="${target.dir}" 
</target> 

Poi è possibile specificare:

$ ant -Divy.cleancache clean 

per pulire la cache Ivy e semplicemente mettere ant clean per pulire il vostro costruire senza pulire la cache Ivy.


1. Potreste essere in grado di accelerare il download dei vasetti, se si utilizza il proprio repository Maven come Nexus o Artifactory. Questi avranno la propria cache che memorizzerà i jar di terze parti scaricati localmente. Questo è un po 'più veloce di uscire dalla rete per trovare questi vasi di terze parti, ma tutti devono ancora essere scaricati. Forse invece di prendere 26 secondi, potrebbe richiedere solo 20 secondi.

+0

Generalmente creo due obiettivi puliti "clean" e "clean-all", quest'ultimo dipende dal primo e esegue l'operazione ivy cleancache. Più semplice, penso, e non richiede la libreria "ant-contrib" di terze parti. Altrimenti approvo questa risposta. Il caching (edera e Nexus) migliora le prestazioni. –

+0

@ MarkO'Connor Come ho detto, ho un progetto speciale [Ivy Directory] (https://github.com/qazwart/ivy.dir) che gli sviluppatori includono e configura tutto ciò di cui hanno bisogno per Ivy. Un bonus, aggiungo un sacco di utili plugin di terze parti, incluso ant-contrib. Anche come parte e pacco, un 'javac.macro' che visualizza tutti gli avvertimenti e un' jar.macro' che aggiunge automaticamente un pom.xml al vaso come piace a Maven. Tuttavia, gli ultimi due modi che ti do ti mostrano come farlo senza Ant-contrib. –

+0

Sono stato corretto. Devo guardare il tuo progetto Github in modo più dettagliato, grazie! –

0

Prova questa -Divy.checkmodified=false/-Divy.skip=true

Problemi correlati