【问题标题】:Java deploying war on Tomcat giving NoClassDefFoundErrorJava在Tomcat上部署战争给出NoClassDefFoundError
【发布时间】:2016-05-10 07:17:11
【问题描述】:

这是一个荒谬的场景,因为我完全不知道为什么会发生这种情况。

我创建了一个 Java servlet,(maven)打包为要部署在 Tomcat server 上的 war。它在 2 台测试机器上运行良好(相信我),但是当它移动到另一台机器上时,对该 api 的任何点击都会为特定类提供NoClassDefFoundError

我检查了 webapps 文件夹中的解压项目目录,它包含该类。

这可能是什么原因?我已经检查了所有我可以但没有任何线索的地方。我知道我自己这不是一个很清楚的问题,但这就是我所拥有的。

如果需要任何其他详细信息,请在 cmets 中询问。

编辑:(更多细节)

Tomcat版本在这台新机器上升级了...以前的机器有Apache Tomcat/7.0.59。这有Apache Tomcat/8.0.33。会不会是这个问题?

编辑:

我仍然不确定问题所在。在尝试找到问题几个小时后,我重新配置了机器...重新安装了jdkTomcat 并部署在它上面并且它工作了。

【问题讨论】:

  • 机器之间的linux风格/操作系统有什么变化吗?
  • 你检查过 Manifest.mf 吗?
  • Linux 是一样的...都运行 CentOS
  • 该类实际上可能不止一次地存在于故障机器的类路径中。
  • @AlexanderKleinhans,项目中没有 Manifest.mf 文件。

标签: java maven tomcat war noclassdeffounderror


【解决方案1】:

我的猜测是所有类都在那里,但是在 war 文件的某个地方,有一个类使用了另一个类,该类在本机工作机器的 classpath 中,但不是另一个。 NoClassDefinitionClassNotFound 不同,所以类可能在那里(它不应该丢失)。不幸的是,听起来有一个依赖项不在本机 war 文件中,但仍然运行和编译,因为它在本机机器 classpath 中。

检查您的.bash_profile 或导出类路径的任何位置,您可能会找到一些需要放入WAR 的JAR 文件。

Why am I getting a NoClassDefFoundError in Java?

【讨论】:

  • 但是该项目的依赖项很少,它们放在pom.xml...中没有包含自定义jar。虽然有 4 个包,它们之间相互通信,它们应该在类文件夹中。
  • 再一次,只是一个假设。 NoClassDefFoundError 并不意味着该类不存在,如果您解压缩 war 文件,它肯定存在,否则您会看到 ClassNotFound。某些类正在使用war文件中的类(没有丢失)正在使用另一个不在war文件中的类,因此缺少定义,而不是类。我的猜测是它在本机机器的classpath 中,这就是为什么它最初正确解析的原因,但不是在classpath 不同的新机器上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
相关资源
最近更新 更多