你在使用<ivy:cleancache>吗?这就是为什么您的重建时间如此之短,而您的初始构建却如此之长的原因。
Ivy 会比在没有 Ivy 的情况下使用 Ant 慢。 Ivy 必须先下载您指定的每个 jar,以及所有依赖项到 Ivy 缓存中(在 Unix/Mac/Linux 上默认为 $HOME/.ivy2/cache,在 Windows 上默认为 %USERPROFILE%\.ivy2\cache),然后才能开始。您可以指定 4 或 5 个罐子,但这些罐子可能取决于其他罐子,而其他罐子可能会更多。
确实没有办法加快 Ivy 下载 jars1,但是一旦下载了 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 秒。