【问题标题】:mvn jboss:deploy fails with NoClassDefFoundErrormvn jboss:deploy 失败并出现 NoClassDefFoundError
【发布时间】:2013-04-04 18:48:04
【问题描述】:

使用 JBoss Maven 插件将 EJB 项目部署到 JBoss 时,我在 JBoss 的控制台上收到一个 NoClassDefFoundError,该错误是关于该 EJB 项目的依赖项之一中的类。

这个依赖是用编译范围声明的。我应该使用另一个范围以便我的依赖项也部署到 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

【问题讨论】:

  • 你的ejb包是什么?罐子,战争还是耳朵?
  • 作为一个罐子。我不想单独部署依赖项,通过将它们复制到服务器lib文件夹,这可能吗?

标签: maven deployment jboss maven-plugin noclassdeffounderror


【解决方案1】:

我了解到您已将 EJB 打包为 jar 文件。这意味着没有提供任何与独立 jar 相同的依赖项。

AFAIU,可能有以下3种可能的方式:-

  1. 将它们打包为ear,并将这些依赖项放在ear/lib 中。请参阅Maven EAR Plugin 了解更多信息。

  2. 将它们打包为war,并将这些依赖项放在WEB-INF/lib 中。请参阅Maven WAR Plugin 了解更多信息。

  3. 将它们打包为jar,并将这些依赖项放在classpathapplication server lib 中。请参考您的应用服务器文档。

已编辑: 如果您使用的是JavaEE 6,则可以将EJB 打包为war 文件。 The Java EE 6 Tutorial: Packaging Enterprise Beans in WAR Modules 告诉我们

企业 bean 通常提供 Web 应用程序的业务逻辑。在这些情况下,enterprise bean 打包到 Web 应用程序的 WAR 模块 可以简化部署和应用程序组织。企业 bean 可以作为 Java 编程语言类文件打包在 WAR 模块中,也可以打包在捆绑在 WAR 模块中的 JAR 文件中。

要将enterprise bean 类文件包含在WAR module 中,类文件应位于WEB-INF/classes 目录中

要在 WAR module 中包含一个包含 enterprise beans 的JAR fileJAR 添加到WAR 模块的WEB-INF/lib 目录

包含企业 bean 的 WAR 模块不需要 ejb-jar.xml 部署描述符。 如果应用程序使用ejb-jar.xml,它必须位于WAR模块的WEB-INF目录中

我希望这会有所帮助。

【讨论】:

  • 我把它们打包成一个罐子,是的。感谢您的选择,但我不想将它部署在 EAR 中,而且我认为您不能将 EJB 打包为 WAR。 (或者你可以)。我想将它们部署为 Jar。我担心我必须单独部署依赖项,是的。我给了你一票,但让我们看看其他人是否有更好的想法。
  • 如果你使用的是JavaEE6,可以将EJB打包成war。请参阅我的编辑以获取更多信息。
  • 感谢您提供所有信息,很高兴知道这一切,但我使用的是 JBoss 5 和 JavaEE 5。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 2021-08-04
  • 2017-12-24
  • 2022-11-08
  • 2021-08-04
  • 2013-02-03
相关资源
最近更新 更多