【问题标题】:Jasper Reports NoClassDefFoundError贾斯珀报告 NoClassDefFoundError
【发布时间】: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


【解决方案1】:

我认为您缺少 jasper 在运行时依赖的几个 jar。检查此thread 并确保您的类路径中也有这些 jar。

【讨论】:

  • 感谢您的建议。刚刚检查,所有建议的 jar 文件都已经包含在我的 JBoss default/lib 文件夹中。
  • 我确信你在运行时丢失了一些 jar,很难分辨是哪一个。 stacktrace 有更多信息吗?
  • 你能检查编译时存在的 jar 和运行时的 jar 吗?编译时应该有一些 jar(s) 在运行时丢失。
  • 作为参考 here 是 JasperReports 所需的 jar 列表。
  • 如何检查运行时而不是编译时使用的 jar?
【解决方案2】:

我不确定它是否也适用于您的情况,但我最近遇到了类似的问题,在未能加载字体(“读取字体数据的问题”)后,Jasper Reports 会开始提供虚假的java.lang.NoClassDefFoundError对于它的许多课程;这个问题是因为java.awt.Font.createFont(int fontFormat, InputStream fontStream) 尝试创建临时文件失败。错误发生在 Tomcat 内部,但不在 Eclipse 内部;发生的事情是 Tomcat 自动将其 JVM 配置为指向其临时文件夹而不是默认文件夹,并且 Tomcat 的临时文件夹已被删除。

【讨论】:

    【解决方案3】:

    如果您尝试将 jasper 与 springboot 应用程序集成,请检查 .jrxml 是否在资源文件夹中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多