NoClassDefFound异常

时间:2012-12-05 05:05:37

标签: java servlets apache-poi

我正在使用apache poi打开现有的excel文件。

public static int generateReport(Calendar csdate,Calendar cedate) throws Exception
{
     FileInputStream fileIn =null;
     FileOutputStream fileOut = null;
     int sum=0;//For calculating the total number of tickets
    final Workbook wb;
    fileIn =new FileInputStream("d:\\excelfiles\\TicketsReport.xlsm");
    wb = org.apache.poi.ss.usermodel.WorkbookFactory.create(fileIn);<-- Exception
    final Sheet sheet = wb.getSheet("Report");
    //rest of stuff
}

我有一个servlet,它从html页面获取日期并调用generateReport()。问题是这个程序以前运行的版本tomcat 6servlet2.4版本相同。在eclipse中,WorkbookFactory.create()行没有编译时错误。这是堆栈跟踪。

java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/WorkbookFactory
at ReportFromJira.generateReport(ReportFromJira.java:59)
at JiraReportServlet.doPost(JiraReportServlet.java:52)
at JiraReportServlet.doGet(JiraReportServlet.java:36)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Unknown Source)

当我手动探索jar文件时,我发现了。

poi-3.8-20120326.jar contains
org.apache.poi.ss.usermodel->Workbook.class file

and poi-ooxml-3.8-20120326.jar contains
org.apache.poi.ss.usermodel->WorkbookFactory.class file

我的类路径中包含了两个jar文件。

任何想法为什么会有例外?

3 个答案:

答案 0 :(得分:2)

org.apache.poi.ss.usermodel.WorkbookFactory包含在poi-ooxml jar文件中。要使用它,您需要核心POI jar,POI OOXML jar及其依赖项。您获得的例外情况表明您至少缺少其中一个。

您可以在Apache POI Components page上找到有关内部和外部不同POI组件的依赖关系的更多信息。我建议你检查一下,检查你的应用程序并构建,然后放入你遗漏的罐子里!

答案 1 :(得分:0)

只需将其中一个罐放入WAR \ EAR的WEB-INF\lib中,因为这是Tomcat默认从中挑选罐子的地方。

当通过eclipse配置运行tomcat时,仅仅包含在eclipse项目中是不够的。

答案 2 :(得分:0)

解决方案非常简单:

  1. 下载此链接http://archive.apache.org/dist/poi/release/bin/poi-bin-3.9-20121203.zip
  2. 中的所有jar文件
  3. 解压缩文件并将所有jar文件复制到项目中的“\ WebContent \ WEB-INF \ lib \”。请注意:您必须在ECLIPSE中复制并粘贴到您的项目中,不要复制粘贴它通过Windows资源管理器或将其作为外部JAR放在java构建路径中,因为它永远不会工作。
  4. 就是这样,你已经完成了......:D 如果这可以解决您的问题,请告诉我。

相关问题