【问题标题】:NoClassDefFoundException in N-tier applicationN 层应用程序中的 NoClassDefFoundException
【发布时间】:2013-11-08 14:34:40
【问题描述】:

我正在为我正在学习的课程构建一个项目,它由 4 个模块组成

-impl (business logic/dao access)
-ejb  (encapsulates business logic and provides access to it via a remote interface)
-war (web tier)
-ear (contains the war and ejb modules)

我在 impl 中拥有的一个实用程序类能够填充 H2 数据库。它通过运行一个摄取器来执行此操作,该摄取器在进程中读取驻留在 maven 存储库中的 xml 文件,使用各种 dao 类/方法来摄取数据:

String fileName = "xml/proj-data.xml";
        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);

当我通过单元测试运行摄取器时,它运行良好,但是当我将所有内容分层时,我在 xml/proj-data.xml 上得到 NoClassDefFoundException

所以我的基本大纲是:

-the war has dependencies on the impl and ejb modules
-the ejb has dependency on the impl module
-the ear has dependency on the impl, ejb, and war

这是一个 Maven 项目。当我将 EAR 部署到服务器时,会显示战争的起始页面(如我所料)。

-html 页面有一个按钮,当按下该按钮时,会发布到 servlet - servlet 有一个注入到其中的 ejb,它调用(通过它的远程接口)。 -ejb 方法回调 impl 中的 populate 方法,这就是异常发生的时候,我得到一个显示异常的网页。

我是否也需要在 WAR pom 文件中声明该存储库?

【问题讨论】:

  • '一个驻留在 Maven 存储库中的 xml 文件,'您的代码看起来不像是从 Maven 存储库中读取的。
  • xml 文件不在我的本地机器上,它是从类路径中读取的。输入流作为参数传入我的摄取器。

标签: java maven jakarta-ee jboss


【解决方案1】:

在输入问题时,我想我知道问题可能是什么。 xml 文件所在的存储库在项目的根 pom(impl 父级)中声明,而不是在 impl 模块的 pom 中声明。由于 impl 是与 EAR 一起打包的模块,因此我可能还需要在 impl pom 文件中声明存储库。

【讨论】:

    猜你喜欢
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多