2013-07-15 108 views
5

從純螞蟻遷移到ant + ivy後,我的項目生成時間從7s增加到26s,而增量重建現在是7s,而不是剛剛小於1s(幾乎是瞬間)。改善常春藤解決方案的性能

大部分時間似乎花在ivy:resolve,我需要使用ivy:cachepath生成類路徑。

有什麼方法可以加快速度,尤其是重建?

+0

增加緩存TTL幫助很大 - 重建時間降低到2秒。我想這額外的第二隻是常春藤效率低下。由於某些原因,完整版本(帶有填充緩存)爲20s。請創建一個我可以標記的答案。 –

回答

1

你使用的是<ivy:cleancache>?這就是爲什麼你的重建如此之短,但你的初始構建是如此之久。

常春藤比使用沒有常春藤的螞蟻要慢。常春藤必須下載指定的每個jar文件,並將所有依賴項加入Ivy緩存(在Unix/Mac/Linux上默認爲$HOME/.ivy2/cache,在Windows上爲​​),然後才能開始。您可以指定4個或5個罐子,但這些可能取決於其他可能依賴更多的罐子。

真的沒有辦法加速罐子的常春藤下載,但是一旦下載了罐子,實際上沒有理由不斷地清理常春藤緩存每次和每次你做一個新的項目,或當你做一個乾淨的。

你可以做的是設置你的清潔,這樣就可以避免清潔常青藤緩存除非你指定它

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

這樣,運行ant clean每次不會擦洗你常青藤緩存,你可以重複使用它。如果你想清理常春藤緩存,你需要這樣做:

ant -Divy.cleancache=true clean 

是的,這是使用antcontrib。我使用我特殊的常春藤目錄配置爲每個人配置Ivy,並在此期間爲其添加ant-contrib的定義,以及Findbugs,PMD和其他有用的工具。

然而,有可能在1.9螞蟻不具備這樣做:

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

我沒有試過,但如果一切正常,你不必使用antcontrib。當然,你可以這樣做太:

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

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

然後,你可以指定:

$ ant -Divy.cleancache clean 

來清潔您的常青藤緩存,簡單地說ant clean不清洗常春藤緩存清理您的構建。


1.你也許可以,如果你使用自己的Maven倉庫,如Nexus或Artifactory的加快罐子的下載。這些將有他們自己的緩存,將本地存儲下載的第三方罐子。這比通過網絡尋找這些第三方罐子要快,但它們仍然需要下載。也許不需要26秒,它可能只需要20秒。

+0

我通常會創建兩個乾淨的目標「乾淨」和「全部乾淨」,後者依賴於前者並運行常春藤cleancache任務。我認爲更簡單,並且不需要第三方「ant-contrib」庫。否則,我贊同這個答案。緩存(ivy和Nexus)可以提高性能。 –

+0

@ MarkO'Connor正如我所說的,我有一個特殊的[常春藤目錄](https://github.com/qazwart/ivy.dir)項目,開發人員包括它,並配置他們需要的所有常青藤。助教是一個獎金,我添加了一整套有用的第三方插件,包括ant-contrib。同樣作爲零件和包裹,一個顯示所有警告的'javac.macro',以及一個'jar.macro',它自動將一個pom.xml添加到像Maven這樣的jar中。然而,我給出的最後兩種方法會告訴你如何在沒有Ant-contrib的情況下做到這一點。 –

+0

我站好了。我必須更詳細地看看你的github項目,thx! –

0

試試這個-Divy.checkmodified=false/-Divy.skip=true