如何避免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.