0

由于这个 NoClassDefFound 错误,我无法加载我的 webapp 的任何页面(本地在 Tomcat 7.0.2.6 上)。我在我的智慧结束试图找出原因是什么,这是我所知道的:

我的同事让这个项目在本地(在 Tomcat 上)和我们的开发服务器(WebLogic)上成功运行。

我已经从 svn 做了一个新的下拉,所以我的代码和他的完全一样。我已经验证我有一个对 Aspose 的共享库引用(并且所需的 .jar 在那里),并且 weblogic.xml 有一个条目。

我们最初在 WebLogic 上部署时看到了同样的错误,因为 Aspose 库的名称不正确,但它在他的 Tomcat 服务器上本地运行良好。

我试过清理和重建项目没有效果。

尽我所能,它必须是 Tomcat 问题,或者可能是 Eclipse 设置。

有没有人遇到过类似的情况?关于尝试解决此问题的任何想法?

4

2 回答 2

1

您需要做的第一件事是确定您是否与另一个具有相同名称和包的类发生冲突。最简单的方法是使用 cygwin/linux 控制台,将这个 shell 脚本保存到一个文件中,比如 findjar

find "$1" -name "*.jar" -exec sh -c 'jar -tf {}|grep -H --label {} '$2'' \;

把它放在你的路径中并导航到服务器实例的根目录并像这样运行脚本

findjar . yourclass

注意期间,不要忘记它。如果您的项目中有多个具有相同名称的类,这将返回。

一旦您确定项目是干净的并且该类只有一个副本,我会尝试将您的共享库文件夹实际添加到 websphere 服务器实例 JVM 参数中。要做到这一点:

  1. 进入管理员,点击服务器
  2. 打开服务器类型,点击websphere应用服务器
  3. 您应该会在那里看到您的服务器,单击它
  4. 在右侧,您将看到“服务器基础架构”部分,其下方是“Java 和进程管理”子部分</li>
  5. 打开该部分并点击“流程定义”</li>
  6. 在流程定义屏幕上是另一个右侧列。点击“Java虚拟机”</li>
  7. 是的,终于我们在正确的屏幕上,这里有尽头,我保证
  8. 在虚拟机页面上,有一个标有“类路径”的大文本字段您需要做的是输入共享库文件夹的完整路径

这样做很奇怪,而且毫无意义,但我过去不得不这样做,以允许我的代码查看共享资源中的属性文件。

于 2013-02-15T18:11:03.453 回答
0

您的同事可能在他的 Tomcat 实例本身中安装了 java 库。

在 Tomcat 目录中查看一些 lib 文件夹(我不记得确切的位置,我认为它会根据版本而变化),但类似于 ${CATALINE_HOME}/common/lib

验证他在他的 tomcat 安装中没有与您的不同的 JAR 文件。

来自这个问题:如果它们在两个 Web 应用程序中,Tomcat 是否会将相同的库文件加载到内存中两次? 它们显然存储在这里:

Tomcat 6 $CATALINA_HOME/lib
Tomcat 5 $CATALINA_HOME/common/lib
于 2013-02-15T17:42:14.307 回答