当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
相关推荐
在此示例中,`readFile`方法可能会抛出`FileNotFoundException`,因此在方法声明中使用了`throws IOException`来声明这一事实。`method1`方法调用了`readFile`,因此也需要声明可能抛出的异常。最终,在`main`方法中...
public void uploadFile(String localFilePath, String remoteFileName) throws IOException { FileInputStream fis = new FileInputStream(localFilePath); ftpclient.storFile(remoteFileName, fis); fis....
* void write(String str, int offset, int length) throws IOException:将一个字符串从offset开始的length个字符写入到输出流 * void flush() throws IOException:将输出流中缓冲的数据全部写出到目的地 六、 ...
4. 读取方法:public int read(byte[] b) throws IOException:从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 5. 关闭方法:public void close() throws IOException:关闭此文件输入流并释放与...
### IOException在Java中的作用与处理 #### 知识点一:IOException的概念与使用场景 `IOException`是Java标准库中的一个异常类,继承自`Exception`类,属于受检异常(checked exception)。它用于表示输入/输出...
- `mark(int readAheadLimit) throws IOException`:在输入流中放置一个标记。 - `reset() throws IOException`:将输入指针移回至标记位置。 - `close()`:关闭输入流,释放资源。 ##### 4.2 字符输出流 - **...
* Public Socket(InetAddress address, int port) throws IOException * Public void close() throws IOException * Public InetAddress getInetAddress() * Public InputStream getInputStream() throws ...
- `public void mark(int readAheadLimit) throws IOException;`:如果支持标记功能,则在此处设置一个标记,限制后续最多可回退的字符数为 `readAheadLimit`。 - `public void reset() throws IOException;`:如果...
- `public void reset() throws IOException`: 将流的位置重置到上次调用`mark`方法时的位置。 - `public long skip(long n) throws IOException`: 跳过并忽略`n`个字节。如果无法跳过这么多字节,将只跳过实际可跳...
当一个方法在执行过程中可能会遇到某些编译时异常,但又不想或无法在当前方法内部处理这些异常时,可以选择使用`throws`关键字声明抛出异常。这样,调用该方法的代码必须负责处理这些异常。异常类型可以在`throws`...
- `public void read(byte[] b, int off, int len) throws IOException`:从流中读取`len`个字节到数组`b`中,从索引`off`处开始存放。 - **其他常用方法**: - `public int available() throws IOException`:...
"引入mybatis-plus报Invalid bound statement错误问题的解决方法" Mybatis-Plus是一个基于Mybatis的增强工具,旨在简化开发效率。然而,在使用Mybatis-Plus时,可能会遇到各种问题,例如Invalid bound statement...
public static byte[] readFileBinary(InputStream streamIn) throws IOException { BufferedInputStream in = new BufferedInputStream(streamIn); ByteArrayOutputStream out = new ByteArrayOutputStream...
* int read() throws IOException:读取一个字节,并将其作为整数返回。如果返回-1,表示已经到达输入流的末尾。 * void close() throws IOException:关闭流,释放内存资源。 * long skip(long n) throws ...
关于IO流的知识点 ### 一、IO流的三种分类方式 #### 1.... - **输入流**:用于从...了解这些基本概念和方法有助于更好地管理和操作文件及数据。在实际开发中,根据不同的需求选择合适的流类型和操作方法是非常重要的。
本文档详细介绍了JAVA版_SGIP协议的API中各类的构造函数及方法,并通过示例展示了如何使用这些类来实现与短信中心的通信。开发者可以根据具体需求选择合适的类进行操作,从而高效地完成短信的发送与接收任务。
// 实现其他ServletInputStream的方法,如 available(), markSupported(), mark(int), reset() } } ``` 在这个例子中,我们创建了一个名为`RepeatableHttpServletRequest`的类,它继承自`...
`throws`关键字是Java异常处理机制中的一个重要组成部分,主要应用于方法声明部分,用于指明一个方法可能会抛出哪些类型的异常。这不仅有助于提高代码的可读性和可维护性,还能确保调用者明确地了解方法执行过程中...
public RequestWrapper(HttpServletRequest request) throws IOException { super(request); body = StreamUtil.readBytes(request.getReader(), "UTF-8"); } @Override public BufferedReader getReader() ...
public byte[] serialize() throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); dos.writeUTF(userName); dos.writeUTF...