【问题标题】:NoClassDefFound issue while loading EAR application in WildFly 10在 WildFly 10 中加载 EAR 应用程序时出现 NoClassDefFound 问题
【发布时间】:2024-05-17 23:35:02
【问题描述】:

我最近开始着手迁移我们的大型应用程序,该应用程序包含一个 EAR,其中包含 40 多个独特的单独 EJB jar 项目、一个 Web 应用程序和几个 Java 模型项目,其中包含应用程序的实用程序和帮助程序类。

我们目前正在使用 WebSphere Network Deployment (WAS ND 8.5.5)。 WAS 提供了一种使用共享库定义外部库的简单方法。虽然我可以非常多地使用 WildFly 全局模块来提供所有外部库,但我们希望以正确的方式做到这一点,即使用模块。

这是我迄今为止尝试过的:

  1. %%WildFly_Install_Dir%%/modules/gov/abc/def/main 内部定义了一个自定义module.xml 并复制了外部库以查看它是否在服务器启动期间启动。

    module.xml的内容是:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="gov.abc.def">
<resources>
<resource-root path="."/>
</resources>
</module>
  1. 在 EAR->META-INF 中使用 MANIFEST.mf 引用它,因此将来不会出现可移植性问题,但即使在创建模块并在 EAR 的 MANIFEST.mf 中引用模块之后,我仍然在部署时收到 NoClassDefFoundError

  2. 然后,我尝试创建jboss-deployment-structure.xml 并创建相应的部分来引用我创建的自定义模块,它也没有工作,同样的NoClassDefFound 错误来了。

有人可以帮助我了解如何实现模块化设置并仍然正确部署应用程序吗?

【问题讨论】:

  • 你在 WildFly 中注册了模块吗?
  • 是的,我做了 Martijn。

标签: wildfly noclassdeffounderror java-ee-7 wildfly-10


【解决方案1】:

您需要将每个 JAR 显式定义为 &lt;resource-root/&gt;

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="gov.abc.def">
    <resources>
        <resource-root path="some.jar"/>
        <resource-root path="other.jar"/>
    </resources>
</module>

【讨论】:

  • 我有 160 多个 JAR。你建议一个一个添加吗?我想用“。”添加它将获取 gov.abc.def 文件夹中的所有库。
  • 是的。我认为没有办法使用通配符。需要列出每个依赖项。
  • 这解决了问题。我添加了一个全局模块,并在standalone.xml 中引用了上述自定义模块。工作,谢谢。
最近更新 更多