IVY throws IOException Resetting to invalid mark原因及解决办法

前端之家收集整理的这篇文章主要介绍了IVY throws IOException Resetting to invalid mark原因及解决办法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

当Ivy文件大于10K后,执行jar包加载后会报如下错:impossible to resolve dependencies: java.io.IOException: Resetting to invalid mark。

删除一些注释后,文件小于10K,下载又正常了。

查找了官方网站说明,确认是一个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

猜你在找的XML相关文章