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,clean-lib-cache,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,clean-lib-cache,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

猜你喜欢

转载自bijian1013.iteye.com/blog/2276778
Ivy
今日推荐