如何避免Apache POI中的java.lang.NoSuchMethodError:org.apache.poi.util.IOUtils.copy(Ljava / io / InputStream; Ljava / io / OutputStream;)
我有一个代码,用于将水印添加到现有的.doc文件中。
以下是我到目前为止尝试过的代码
public static void main(String[] args) { try { XWPFDocument xDoc = new XWPFDocument(new FileInputStream("test.doc")); XWPFHeaderFooterPolicy xFooter = new XWPFHeaderFooterPolicy(xDoc); xFooter.createWatermark("My Watermark"); } catch(Exception e) { e.printStackTrace(); } }
以下是我得到的
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.poi.util.IOUtils.copy(Ljava/io/InputStream;Ljava/io/OutputStream;)V at org.apache.poi.util.PackageHelper.open(PackageHelper.java:50) at org.apache.poi.xwpf.usermodel.XWPFDocument.(XWPFDocument.java:71) at com.avi.Test.ReadDoc.main(Watermark.java:38)
我今天收到了这个错误:“java.lang.NoSuchMethodError:org.apache.poi.util.POILogger.log(I [Ljava / lang / Object;)V]”
它看起来与您的错误不同,但非常相似。 仅供参考,我正在使用maven来管理jar子。 经过一些实验,我发现根案例是poi.jar和poi-ooxml.jar的版本不一致。
此配置将出错:
org.apache.poi poi 3.12 org.apache.poi poi-ooxml 3.13
我将poi.jar的版本从3.12更改为3.13
org.apache.poi poi 3.13 org.apache.poi poi-ooxml 3.13
宾果游戏,问题解决了。 我希望这会帮助遇到这种exception的人。
有关此主题,请参阅Apache POI FAQ条目 。 几乎可以肯定的是,你已经在你的类路径中添加了一个新的POI副本,但旧的版本已经存在(来自之前的需求,你的框架等),Java现在对使用哪一个感到困惑。
首先,您需要使用这样的代码片段来确定POI的来源:
ClassLoader classloader = org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader(); URL res = classloader.getResource( "org/apache/poi/poifs/filesystem/POIFSFileSystem.class"); String path = res.getPath(); System.out.println("Core POI came from " + path);
用它来识别旧jar子并将其移除。
然后,使用POI组件页面计算出您需要使用的Jars以及它们的依赖项。 最后,将最新的jar子添加到您的类路径中,您将会很高兴!
您几乎肯定在类路径上有旧版本的POI。
请参阅Apache POI FAQ
请访问: http : //poi.apache.org/download.html
下载tar.gz – >解压缩并从构建classPath中添加所有jar。
我遇到了和你一样的问题,解决方案是你需要导入所有jar文件来运行你的程序。这些是运行你的项目所必需的
- POI-3.10-Final.jar
- POI-OOXML-3.10-Final.jar
- POI-OOXML-架构 – 3.10.jar
- XMLBeans的-2.30.jar
从一开始,poi-ooxml和poi版本必须相同。
org.apache.poi poi-ooxml 3.16 <---------------this. org.apache.poi poi 3.16 <---------------this.
- 使用Apache POI更新.docx文件的页眉
- java使用APACHE POI在powerpoint中创建图表
- POI 3.2图像高度/宽度控制
- java.lang.OutOfMemoryError:使用apache POI读取excel文件时超出了“GC开销限制”
- apache POI – 获取生成的excel文件的大小
- 如何使用Java中的Apache POI XWPF将图片添加到.docx文档中
- Apache POI 3.9:找不到WorkbookFactory方法
- 使用Apache POI HSSF,如何一次刷新所有公式单元格?
- 如何使用POI将.doc / .docx转换为java中的pdf ..?