【问题标题】:NoClassDefFoundError IN Struts2 frameworkStruts2 框架中的 NoClassDefFoundError
【发布时间】:2012-08-14 17:16:26
【问题描述】:

我正在使用 Struts2 框架并使用 HttpClient 类来发出 put 请求。 当我尝试在 LoginAction 类中调用 httpClient 的 requestEntity 方法时,出现以下错误。

严重:异常启动过滤器 struts2 java.lang.NoClassDefFoundError: org/apache/commons/httpclient/methods/RequestEntity

我已经在类路径中包含了所有需要的 jar 文件。

请帮我找出可能是什么问题。

【问题讨论】:

  • 您使用的是什么应用服务器或 servlet 容器?提供 WAR(或分解目录)中 JAR 的列表或屏幕截图。您得到的异常意味着您没有实际上拥有所有必需的 JAR。
  • 使用 IDE 例如 eclipse。理想情况下,如果类路径中不存在 httpClient 类,则不应编译 LoginAction 类
  • @MSach :如果他没有直接使用那个类,他在库中使用的另一个类(可能来自其他库)可能会引用RequestEntity。这次他不会得到编译器错误。
  • @StevenBenitez 我正在使用 tomcat servlet 容器。我正在使用的 jar 列表是 commons-codec-1.3.jar commons-code-1.4.jar commons httpclient-3.1.jar 和依赖 jars
  • @MSach 是的,我正在使用 IDE Eclipse。

标签: java struts2 httpclient


【解决方案1】:

如果您使用的是旧版本(apache commons 小于 3.0),那么该类将在旧 jar 中不可用。您必须使用Apache commons 3.0 库。自v3.0 起添加org/apache/commons/httpclient/methods/RequestEntity 类。检查javadoc

一般来说,如果我们没有在类路径中添加 jar(或不在项目中),那么我们会得到 ClassNotFoundException,如果我们在项目中包含 jar 并且它在类路径中但特定类不可用,那么我们会得到 NoClassDefFoundError .

【讨论】:

  • 感谢您的回复。是的,我正在使用 jar 的 v3.0。但是,错误仍然存​​在。请你告诉我有没有其他方法可以让课程可用。
  • 在 eclipse 或 winrar 中打开 jar 并检查类是否存在。
  • 我认为您对这两个例外之间差异的解释并不准确。检查 Javadocs。 NoClassDefFoundError 表示该类在编译期间存在,但现在无处可寻。这对我来说意味着他实际上并没有将 JAR 部署为他的 WAR(或展开的目录)的一部分。
  • 另一种情况可能是:如果您没有直接使用该类,则您在库中使用的另一个类(可能来自其他库)可能会引用RequestEntity。这次你不会得到编译器错误,而是在运行时出现NoClassDefFoundError
  • 请您准确告诉我要使用哪个 jar 来解决此错误?我使用的是 jar 版本 3。还是需要在 Manifest 文件中设置类路径?请告诉我。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
  • 1970-01-01
  • 2015-05-19
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多