2013-07-15 35 views
5

Po przejściu z czystej mrówki na mrówkę mrówki moje czasy budowania projektu wzrosły z 7 do 26, podczas gdy przyrostowe odbudowy są teraz siedmioma, a nie tylko poniżej 1 sekundy (prawie natychmiast).Zwiększenie wydajności bluszczu rozwiązajcie

Większość tego czasu wydaje się spędzać w ivy:resolve, które muszę wygenerować ścieżkę klasy przy użyciu ivy:cachepath.

Czy jest jakiś sposób, aby to przyspieszyć, w szczególności odbudować?

+0

Zwiększenie cache TTL bardzo pomaga - odbudować czasy w dół do 2s. Sądzę, że dodatkowa sekunda to tylko nieskuteczność bluszczu. Pełne kompilacje (z zapełnioną pamięcią podręczną) mają z jakiegoś powodu 20 lat. Utwórz odpowiedź, którą mogę zaznaczyć. –

Odpowiedz

1

Czy używasz <ivy:cleancache>? Dlatego Twoje odbudowy są tak krótkie, ale początkowe kompilacje są tak długie.

Bluszcz będzie wolniejszy niż użycie mrówki bez bluszczu. Ivy musi pobrać każdy słoik, który podasz, plus wszystkie zależności w pamięci podręcznej bluszczu (domyślnie jest to $HOME/.ivy2/cache na systemie Unix/Mac/Linux i %USERPROFILE%\.ivy2\cache w systemie Windows), zanim będzie można rozpocząć. Możesz określić 4 lub 5 słoików, ale te mogą zależeć od innych, które mogą zależeć od jeszcze większej liczby.

Naprawdę nie ma sposobu, aby przyspieszyć pobieranie słoików z Ivy , ale gdy słoiki zostaną pobrane, tak naprawdę nie ma powodu, aby stale czyścić pamięć podręczną bluszczu za każdym razem, gdy robisz nowy projekt lub kiedy robisz czysty.

Co można zrobić, to konfiguracja Twój czysty, dzięki czemu można uniknąć czyszczenia pamięci podręcznej Ivy chyba że podasz mu:

<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> 

ten sposób działa ant clean nie będzie szorować cache Ivy za każdym razem, i można go wielokrotnie używać ponownie. Jeśli chcesz wyczyścić pamięć podręczną Ivy trzeba to zrobić:

ant -Divy.cleancache=true clean 

Tak, to jest przy użyciu antcontrib. Używam mojej specjalnej konfiguracji katalogu Ivy do skonfigurowania Ivy dla wszystkich i podczas gdy jestem na tym, aby dołączyć definicje dla ant-contrib, plus Findbugs, PMD i innych przydatnych narzędzi.

Jednakże, może to być możliwe w Ant 1.9 nie musiał tego robić:

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

nie próbowałem tego, ale jeśli to działa, nie trzeba używać antcontrib. Oczywiście, można to zrobić za:

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

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

Następnie można określić:

$ ant -Divy.cleancache clean 

wyczyścić pamięć podręczną bluszcz i po prostu umieścić ant clean do czyszczenia build bez czyszczenia pamięci podręcznej bluszcz.


1. Możesz być w stanie przyspieszyć pobieranie słoików jeśli użyć własnego repozytorium Maven jak Nexus lub Artifactory. Będą mieć własną pamięć podręczną, która będzie przechowywać lokalnie pobrane słoiki innych firm. Jest to nieco szybsze niż wyjście poza twoją sieć, aby znaleźć te słoiki innych firm, ale wszystkie nadal muszą zostać pobrane. Może zamiast zabrać 26 sekund, może to zająć tylko 20 sekund.

+0

Zwykle tworzę dwa czyste cele "czyste" i "czyste-wszystko", drugie zależy od pierwszego i uruchamia zadanie czyszczenia kasków bluszczu. Prostsze, jak sądzę, i nie wymagające biblioteki "ant-contrib" innej firmy. W przeciwnym razie popieram tę odpowiedź. Buforowanie (bluszcz i Nexus) poprawia wydajność. –

+0

@ MarkO'Connor Jak już powiedziałem, mam specjalny projekt [Ivy Directory] (https://github.com/qazwart/ivy.dir), który programista zawiera i konfiguruje wszystko, czego potrzebuje do Ivy. To jest bonus, dodaję całą masę pożytecznych wtyczek firm trzecich, w tym ant-contrib. Także jako część i paczka, 'javac.macro', który wyświetla wszystkie ostrzeżenia, oraz' jar.macro', który automatycznie dodaje pom.xml do słoika takiego jak Maven, lubi to. Jednak dwa ostatnie sposoby, które podaję, pokazują, jak to zrobić bez Ant-contrib. –

+0

Stoję poprawiony. Muszę bardziej szczegółowo przyjrzeć się twojemu projektowi github, thx! –

0

Spróbuj -Divy.checkmodified=false/-Divy.skip=true