无法找出NoClassDefFoundError的原因:aspose / pdf / Paragraph

时间:2013-02-15 17:38:54

标签: java eclipse tomcat aspose

由于NoClassDefFound错误,我无法加载我的webapp的任何页面(本地在Tomcat 7.0.2.6上)。我最终想知道原因是什么,这就是我所知道的:

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

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

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

我试图清理和重建项目无效。

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

有没有人遇到过类似的情况?关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分: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和流程管理”小节
  5. 打开该部分,然后单击“流程定义”
  6. 在流程定义屏幕上是另一个右栏。单击“Java虚拟机”
  7. 是的,最后我们在正确的屏幕上,这里有一个尽头,我保证
  8. 在虚拟机页面上,有一个标记为“Classpath”的大文本字段您需要输入的是共享库文件夹的完整路径
  9. 它很奇怪并且没有必要这样做,但我必须在过去这样做,以允许我的代码在共享资源中查看属性文件。

答案 1 :(得分:0)

您的同事可能已在其Tomcat实例中安装了Java库。

在Tomcat目录中查看一些lib文件夹(我无法记住确切的位置,我认为它会根据版本进行更改)但类似于$ {CATALINE_HOME} / common / lib

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

从这个问题:Does Tomcat load the same library file into memory twice if they are in two web apps? 它们显然存储在这里:

Tomcat 6 $CATALINA_HOME/lib
Tomcat 5 $CATALINA_HOME/common/lib