2013-07-15 60 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