当文件存在时,java.lang.NoClassDefFoundError

时间:2011-01-14 04:34:04

标签: java jboss classnotfoundexception

我试图四处寻找可能对我有帮助的帖子,无法找到。

我正在为JBoss4服务器部署一个耳朵,因为我添加了一个新项目,所以我开始遇到这个问题。

这个新项目在eclipse中被定义为Java项目,而EAR项目有一个EJB项目,它将新的Java项目作为其依赖的项目之一 - 如果通过eclipse本地部署在JBoss上,则没有问题,一切顺利

但是当在测试环境(eclipse之外)部署到JBoss时,不断在新Java项目中定义的类之一上获取java.lang.NoClassDefFoundError。

我查看了EAR文件内部以获取jar(EJB项目),然后在jar中,我可以看到新Java项目中的目录结构和所有类文件 - 即。它抱怨的类就在EAR-> JAR中,并且与它正在寻找的确切结构相匹配。

我迷失了我能看到的其他东西。

非常感谢任何指针!

由于

5 个答案:

答案 0 :(得分:7)

如果某些类的编译方式不匹配,通常会出现此错误。例如,如果您在更高版本的JDK中编译了某些类而未设置java合规性级别,并且您使用的是早期版本,则运行它。

我的建议是检查你运行JBoss的JDK,然后检查你如何编译你的类

答案 1 :(得分:2)

我遇到了类似JBoss 4的问题:ClassNotFoundException和运行时的NoClassDefFoundError,即使代码编译得很好。我花了4个小时才找出原因。

我的项目的BuildPath没问题,问题实际上是在JBoss的ClassPath中。 我解决了这个问题:JBoss 4.2 RunTime Server>打开启动配置>编辑配置> ClassPath>添加JAR和项目以链接到JBoss"添加JAR" /"添加项目"。

由于BuildPath,Eclipse知道JAR和相关项目中的类,所以IDE中没有错误,但JBoss服务器不知道在哪里找到这些类...

答案 2 :(得分:1)

如果您有多个war / ear文件

,这也可能是由于类加载器隔离问题造成的

答案 3 :(得分:0)

检查你的耳朵文件。像这样的结构?

myapp.ear
|+ META-INF
   |+ applications.xml and jboss-app.xml
|+ myapp.war
   |+ web pages and JSP /JSF pages
   |+ WEB-INF
      |+ web.xml, jboss-web.xml, faces-config.xml etc.
      |+ lib
         |+ tag library JARs
      |+ classes
         |+ servlets and other classes used by web pages
|+ myapp.jar
   |+ EJB3 bean classes
   |+ META-INF
      |+ ejb-jar.xml and persistence.xml
|+ lib
   |+ Library JARs for the EAR

如果没有,你应该重新包装你的耳朵文件。

答案 4 :(得分:0)

检查属性" 类路径:"在META-INF/MANIFEST.MF