当Ivy文件大于10K后,执行jar包加载后会报如下错:impossible to resolve dependencies: java.io.IOException: Resetting to invalid mark。
查找了官方网站说明,确认是一个BUG:https://issues.apache.org/jira/browse/IVY-1289。但后来一想,如果不升级版本,随着依赖的第三方JAR包增多怎么办呢?
于是想到了将ivy.xml拆成多个文件并修改ant脚本如下,经验证OK。
<!-- 下载或从本地缓存获取第三方包 --> <target name="get-lib" depends="init,clean-lib-cache,configure-lib" description="下载或从本地缓存获取第三方包"> <ivy:resolve file="ivy.xml" conf="*" /> <ivy:retrieve pattern="${build.lib.dir}/[artifact].[ext]" /> <copy todir="${build.lib.dir}"> <fileset dir="${ext.lib}"> </fileset> </copy> </target>
修改为:
<!-- 下载或从本地缓存获取第三方包 --> <target name="get-lib" depends="init,configure-lib" description="下载或从本地缓存获取第三方包"> <ivy:resolve file="ivy-01.xml" conf="*" /> <ivy:retrieve pattern="${build.lib.dir}/[artifact].[ext]" /> <echo>********************************</echo> <ivy:resolve file="ivy-02.xml" conf="*" /> <ivy:retrieve pattern="${build.lib.dir}/[artifact].[ext]" /> <copy todir="${build.lib.dir}"> <fileset dir="${ext.lib}"> </fileset> </copy> </target>
当然,除了这种方式,还可以将get-lib命令拆成两个命令,原get-lib命令依赖拆分后的这两个命令。如下所示:
<!-- =================================================================== --> <!-- 下载或从本地缓存获取第三方包 --> <!-- =================================================================== --> <target name="get-lib" depends="get-lib1,get-lib2"/> <target name="get-lib1" depends="init,configure-lib" description="下载或从本地缓存获取第三方包"> <ivy:retrieve pattern="${build.lib.dir}/[artifact].[ext]" /> </target> <target name="get-lib2" description="下载或从本地缓存获取第三方包"> <ivy:resolve file ="ivy2.xml" /> <ivy:retrieve pattern="${build.lib.dir}/[artifact].[ext]" /> </target>
Ivy与Ant集成学习资料:http://blog.csdn.net/lisonghua/article/details/4770260