从纯 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/