我试图四处寻找可能对我有帮助的帖子,无法找到。
我正在为JBoss4服务器部署一个耳朵,因为我添加了一个新项目,所以我开始遇到这个问题。
这个新项目在eclipse中被定义为Java项目,而EAR项目有一个EJB项目,它将新的Java项目作为其依赖的项目之一 - 如果通过eclipse本地部署在JBoss上,则没有问题,一切顺利
但是当在测试环境(eclipse之外)部署到JBoss时,不断在新Java项目中定义的类之一上获取java.lang.NoClassDefFoundError。
我查看了EAR文件内部以获取jar(EJB项目),然后在jar中,我可以看到新Java项目中的目录结构和所有类文件 - 即。它抱怨的类就在EAR-> JAR中,并且与它正在寻找的确切结构相匹配。
我迷失了我能看到的其他东西。
非常感谢任何指针!
由于
答案 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
。