使用JBoss Maven Plugin将EJB项目部署到JBoss时,我在JBoss的控制台上得到一个关于此EJB项目依赖项之一的类的NoClassDefFoundError。
此依赖项是使用Compile作用域声明的。是否有我应该使用的另一个范围,以便我的依赖关系也部署到JBoss?或者我该如何解决这个问题?
错误如下所示:
DEPLOYMENTS IN ERROR:
Deployment "vfszip:/Users/hordine/projects/SoftBudget/soft-budget-ejb/target/soft-budget-ejb.jar/" is in error due to the following reason(s): java.lang.NoClassDefFoundError: br/com/pedra/j2eepatterns/facade/IEntityService
答案 0 :(得分:1)
据我所知,您已将EJB打包为jar文件。这意味着没有任何提供的依赖项与独立jar一样。
AFAIU,可能有以下三种可能的方式: -
将它们打包为ear
并将这些依赖项放在ear/lib
中。有关详细信息,请参阅Maven EAR Plugin。
将它们打包为war
并将这些依赖项放在WEB-INF/lib
中。有关详细信息,请参阅Maven WAR Plugin。
将它们打包为jar
,并将这些依赖项放在classpath
或application server lib
中。请参阅您的应用程序服务器文档。
<强>编辑:强>
如果您使用JavaEE 6
,则可以将EJB
打包为war
文件。 The Java EE 6 Tutorial: Packaging Enterprise Beans in WAR Modules告诉我们
Enterprise Bean通常提供Web应用程序的业务逻辑。在这些情况下,将企业bean 打包在 Web应用程序的WAR模块 中可以简化部署和应用程序组织。 Enterprise Bean可以作为Java编程语言类文件打包在WAR模块中,也可以打包在WAR模块中捆绑的JAR文件中。
要将
enterprise bean
类文件包含在WAR module
中,类文件应位于WEB-INF/classes
目录。要在
JAR file
中加入包含enterprise bean
的{{1}},将WAR module
添加到WAR模块的JAR
目录中< /强>包含企业bean的WAR模块不需要
WEB-INF/lib
部署描述符。 如果应用使用ejb-jar.xml
,则必须位于ejb-jar.xml
模块的WAR
目录。
我希望这可能有所帮助。