文件存在时的java.lang.NoClassDefFoundError

文件存在时的java.lang.NoClassDefFoundError,java,jboss,classnotfoundexception,Java,Jboss,Classnotfoundexception,我试着四处寻找可能对我有帮助的帖子,但找不到 我正在为JBoss4服务器部署一个ear,自从我添加了一个新项目后,我就开始遇到这个问题 这个新项目在eclipse中被定义为Java项目,EAR项目有一个EJB项目,该项目将新的Java项目作为其依赖的项目之一——如果通过eclipse在本地部署到JBoss上,那么就没有问题,一切都会顺利进行 但是,当在测试环境(eclipse外部)中部署到JBoss时,在新java项目中定义的一个类上不断得到java.lang.NoClassDefFoundEr

我试着四处寻找可能对我有帮助的帖子,但找不到

我正在为JBoss4服务器部署一个ear,自从我添加了一个新项目后,我就开始遇到这个问题

这个新项目在eclipse中被定义为Java项目,EAR项目有一个EJB项目,该项目将新的Java项目作为其依赖的项目之一——如果通过eclipse在本地部署到JBoss上,那么就没有问题,一切都会顺利进行

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

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

我不知道还能看到什么

非常感谢您的指点


谢谢查看您的ear文件。像这样的结构

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

如果没有,你应该重新打包你的ear文件。

META-INF/MANIFEST.MF

中检查属性“类路径:”,如果编译某些类的方式不匹配,则经常会出现此错误。例如,如果您在JDK的更高版本中编译了一些类,而没有设置java遵从性级别,并且您使用的是早期版本


我的建议是检查运行JBoss的JDK,然后检查如何编译类。如果您有多个war/ear文件,这也可能是由于类加载器隔离问题造成的。我在JBoss 4中遇到过类似的问题:ClassNotFoundException和NoClassDefFoundError,即使代码编译良好。我花了4个小时才找到原因

我的项目的构建路径还可以,问题实际上是JBoss的类路径。 我通过以下操作解决了这个问题:JBoss4.2运行时服务器>打开启动配置>编辑配置>类路径>添加JAR和项目,以通过“添加JAR”/“添加项目”链接到JBoss


由于BuildPath,Eclipse知道jar和相关项目中的类,因此IDE中没有错误,但是JBoss服务器不知道在哪里可以找到这些类…

结构就是这样,尽管在EJB jar中,我用persistence.xml代替了ejb-jar.xml我尝试了所有的方法,但仍然给了我同样的例外我忘了回复这个线程——作为一个更新:我发现了问题所在,这真的很愚蠢,在某个时候,我通过将一个字符改为大写来重命名包名。例如,从packagename到packagename——在这个过程中的某个地方,一些类文件仍然以旧名称(非大写)引用它,因此NoClassDefFoundError尝试编写依赖项jar,有趣的是,类似于“class Path:dependencyA.jar dependencyB.jar”,问题是,我将一些大写字符的包名更改为非大写字符,反之亦然,这会使jar中的文件出错