ant - 提高 ivy resolve 的性能

标签 ant ivy

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

大部分时间似乎都花在了ivy:resolve我需要使用 ivy:cachepath 生成类路径.

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

最佳答案

您在使用 <ivy:cleancache> ?这就是为什么您的重建如此短,而您的初始构建如此之长。

Ivy 会比没有 Ivy 的使用 Ant 慢。在它开始之前,Ivy 必须下载您指定的每个 jar,以及所有依赖项到 Ivy 缓存中(在 Unix/Mac/Linux 上默认为 $HOME/.ivy2/cache,在 Windows 上默认为 %USERPROFILE%\.ivy2\cache)。您可以指定 4 或 5 个 jar ,但这些可能取决于其他人,而其他人可能会更多地依赖。

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

你可以做的是设置你的清理,这样你就可以避免清理 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 秒。

关于ant - 提高 ivy resolve 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17656635/

相关文章:

gradle - 如果gradle/ivy已经在我的Maven本地仓库中显示了依赖项,为什么不下载依赖项呢?

java - 如何设置 Gradle 自定义 ant 任务类路径?

proxy - Ivy 通过 Nexus 代理

java - Eclipse编译器设置对应的ant javac选项是什么?

带有ant的java版本控制系统

maven-2 - 在哪里可以找到用 Ivy、Maven、Gant 和 Gradle 表达的单个示例?

java - 如何减去 Ivy 依赖集

java - 我可以使用 2 个 ivy 文件吗?

java - ant中的内存不足错误

java - 如果 Java 版本为 1.5 或 1.6,则 ant 构建失败