7

从纯 ant 迁移到 ant+ivy 后,我的项目构建时间从 7 秒增加到 26 秒,而增量重建现在是 7 秒,而不是不到 1 秒(几乎是即时的)。

大部分时间似乎都花在ivy:resolve我需要使用ivy:cachepath.

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

4

3 回答 3

1

你在用<ivy:cleancache>吗?这就是为什么您的重建如此之短,但您的初始构建却如此之长的原因。

Ivy 会比在没有 Ivy 的情况下使用 Ant 慢。Ivy 必须先下载您指定的每个 jar,以及所有依赖项到 Ivy 缓存(默认情况下$HOME/.ivy2/cache在 Unix/Mac/Linux 和%USERPROFILE%\.ivy2\cacheWindows 上),然后才能开始。您可以指定 4 或 5 个罐子,但这些罐子可能取决于其他罐子,而其他罐子可能会更多。

确实没有办法加快 Ivy 下载 jars 1的速度,但是一旦下载了 jars,就没有理由在每次执行新项目或每次执行新项目时都不断清理 Ivy 缓存一个干净的。

你可以做的是设置你的清理,所以你可以避免清理常春藤缓存,除非你指定它

<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就不会每次都清理您的 Ivy 缓存,您可以一遍又一遍地重复使用它。如果你想清理 Ivy 缓存,你需要这样做:

ant -Divy.cleancache=true clean

是的,这是使用antcontrib. 我使用我的特殊 Ivy 目录配置来为每个人配置 Ivy,并且在我这样做的时候,包括 ant-contrib 的定义,以及 Findbugs、PMD 和其他有用的工具。

但是,在 Ant 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

清理您的 Ivy 缓存并简单地ant clean清理您的构建而不清理 Ivy 缓存。


1.如果您使用自己的 Maven 存储库(如 Nexus 或 Artifactory),也许可以加快 jar 的下载速度。这些将有自己的缓存,将下载的第三方 jar 存储在本地。这比在网络外查找这些第三方 jar 包要快一些,但仍然需要下载它们。也许不是需要 26 秒,而是可能只需要 20 秒。

于 2013-07-15T15:55:44.693 回答
1

另一种选择是关闭基于网络的分辨率并强制常春藤使用缓存数据。

有关详细信息,请参阅以下答案:

于 2013-07-16T17:21:28.477 回答
0

试试这个-Divy.checkmodified=false/-Divy.skip=true

于 2015-05-04T08:02:48.180 回答