从纯 ant 迁移到 ant+ivy 后,我的项目构建时间从 7 秒增加到 26 秒,而增量重建现在是 7 秒,而不是不到 1 秒(几乎是即时的)。
大部分时间似乎都花在ivy:resolve
我需要使用ivy:cachepath
.
有什么方法可以加快速度,尤其是重建?
你在用<ivy:cleancache>
吗?这就是为什么您的重建如此之短,但您的初始构建却如此之长的原因。
Ivy 会比在没有 Ivy 的情况下使用 Ant 慢。Ivy 必须先下载您指定的每个 jar,以及所有依赖项到 Ivy 缓存(默认情况下$HOME/.ivy2/cache
在 Unix/Mac/Linux 和%USERPROFILE%\.ivy2\cache
Windows 上),然后才能开始。您可以指定 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 秒。
试试这个-Divy.checkmodified=false
/-Divy.skip=true