我有这3个Java项目:
ProjectA
ProjectAEAR
ProjectB
ProjectA有一个实例化ProjectB类的类 ProjectA还有一个主类,它在ProjectA上实例化和测试该类。
如果我运行主类,一切都很好,并且会处理预期的结果。
现在,在ProjectA上,我创建了一个实例化以前的ProjectB类的Web服务,当我发布ProjectAEAR项目并调用webservice时,我收到以下错误:
org.apache.axis2.jaxws.WebServiceExceptionLogger log抓住了java.lang.NoClassDefFoundError throwable。
我在实例化ProjectB类的行上出现此错误。
ProjectA设置:
Java Build Path -> Projects: ProjectB
Java Build Path -> Libraries: All JARS needed by project B
ProjectAEAR设置:
Java EE Module Dependencies -> ProjectA, ProjectB, JARS needed by projectB (In Lib Dir checkbox selected)
ProjectB设置:
Java Build Path -> Projects: nothing
Java Build Path -> Libraries: All JARS needed by project B
请告诉我。
由于
答案 0 :(得分:1)
请检查您的j2ee应用服务器的类路径。我怀疑你有一个来自app服务器的替代或冲突的JAR优先于你的EAR中提供的类路径。 基本步骤 - 打开ProjectA和ProjectB,并查看每个JAR。然后将其与您的应用服务器提供的内容进行比较。
假设您可以控制代码,可以在相关行添加try / finally块,抛出异常并在模块中使用此代码段来显示文件的加载位置: http://snippets.dzone.com/posts/show/3719
您可能会发现使用debug classloader选项启动单元测试有助于准确诊断依赖项的加载位置。 (使用-verbose:class选项)。
答案 1 :(得分:1)
我会把它作为评论,但显然我没有足够的声誉。
我不能直接给你答案,但我的建议如下:将你的EAR项目从Eclipse导出为EAR文件(我假设这是基于你的设置信息的Eclipse)。然后检查生成的文件并检查实际构建的内容。可能某些文件未导出。也许您需要检查项目属性下的一些复选框 - > Java构建路径 - >订单和出口。
正确设置Eclipse项目以进行构建和导出的系统是不必要的复杂,例如,请参阅如何在此正确设置WAR项目(这与您的EAR项目不同,但实际上您可能不需要EAR?): Eclipse WTP deployment of build path dependencies