【发布时间】:2018-08-08 17:13:22
【问题描述】:
我在尝试编译或运行 Jasper 报告时遇到 NoClassDefFoundError 错误。
2012-06-13 14:46:26,710 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/jahtest].[jahtest]] Servlet.service() for servlet jahtest threw exception
java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.xml.JRXmlDigesterFactory
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:207)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:172)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:156)
我有一组 java 类封装在一个 war 文件中并部署在 JBoss default/deploy 文件夹中。 我在 JBoss default/lib 文件夹中有 jasperreports-4.1.2.jar 文件,所以我看不到如何存在类路径问题,因为可以看到 lib 文件夹中的所有其他 jar。
我的前端应用程序调用 HTTPServlet 类,然后使用反射调用包含 Jasper 代码的类。在调用这条线之前一切正常 -
JasperDesign jasperDesign = JRXmlLoader.load(strCompiledReportFile);
strCompiledReportFile 正确且存在。当我通过 Eclipse 运行它时,这一切都有效,只是从我的 HTTPServlet 类调用时无效。
我正处于想要抛弃 Jasper 的地步,因为我遇到了很多问题,所以这是最后一次机会沙龙。
为您能提供的任何帮助干杯。
【问题讨论】:
-
除了在我的 JBoss 默认/lib 文件夹中包含所有必需的 jar 之外,还有其他地方应该引用它们吗?我已经尝试将它们添加到我的 war 文件的 WEB-INF\lib 文件夹中,我也尝试将它们添加到 C:\Program Files\Java\jdk1.6.0_13\jre\lib 文件夹但仍然得到相同错误。
-
这太令人沮丧了!当我尝试通过 servlet 访问 Jasper 类时,我只会收到错误消息。我可以成功访问我自己的类,但是如果我调用一个使用任何 Jasper 代码的方法,那么我会收到这个 classNotFound 错误。
-
对,这一定是我的 servlet 的类路径问题。我已经确定运行时类路径在通过 Eclipse 运行时与通过我的 servlet 运行时不同。我已将所有必需的 jar 添加到我的 war 文件中的 web-inf/lib 文件夹中。它仍然不起作用!我是否必须在我的war文件的清单文件中设置类路径?如果是这样,我该怎么做?
标签: servlets jboss jasper-reports