【问题标题】:Missing Modules for EAR Deployment in WildflyWildfly 中缺少用于 EAR 部署的模块
【发布时间】:2020-07-16 01:19:54
【问题描述】:

我正在将一个 EJB 项目部署为 Jboss Wildfly 18 中的 EAR。我耳朵的布局目前如下所示:

Person.ear-> 元信息-> jboss-部署-结构.xml 清单文件 ... 库-> Common.jar 错误报告.jar 个人ejb.jar 个人网络战争

使用 jboss-deployment-structure.xml 类似:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
      <dependencies>
         <module name="Common.jar" export="TRUE"/>
         <module name="BugReport.jar" export="TRUE"/>
      </dependencies>
    </deployment>
</jboss-deployment-structure>

当我尝试启动服务器时,部署失败并出现以下错误:

15:00:20,234 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.module.service."deployment.Person.ear".main: org.jboss.msc.service.StartException in service jboss.module.service."deployment.Person.ear".main: WFLYSRV0179: Failed to load module: deployment.Person.ear
    at org.jboss.as.server.moduleservice.ModuleLoadService.start(ModuleLoadService.java:116)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1739)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1701)
    at org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1559)
    at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1363)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.jboss.modules.ModuleNotFoundException: com.tura.optics.common
    at org.jboss.modules.Module.addPaths(Module.java:1266)
    at org.jboss.modules.Module.link(Module.java:1622)
    at org.jboss.modules.Module.relinkIfNecessary(Module.java:1650)
    at org.jboss.modules.ModuleLoader.loadModule(ModuleLoader.java:299)
    at org.jboss.modules.ModuleLoader.loadModule(ModuleLoader.java:283)
    at org.jboss.as.server.moduleservice.ModuleLoadService.start(ModuleLoadService.java:93)
    ... 8 more

我尝试通过 jboss-deployment-structure.xml 和 MANIFEST.MF 定义依赖关系,但没有成功。我还尝试使用包名称(即 com.tura.common)命名依赖项,因为我已经看到使用了这两种格式。仍然没有运气。我不太确定我在这里缺少什么;看来我正在遵循预期的布局。有人可以帮忙吗?

【问题讨论】:

  • 您尝试将 deployment.Common.jar 作为模块名称吗?另外我认为在这种情况下不需要 jboss-deployment-structure.xml。
  • 如果您只需要类路径上 ear 的 lib 文件夹中的 jar,则根本不需要 jboss-deployment-structure.xml。你能粘贴你的 application.xml 的内容来控制这个

标签: java deployment ejb wildfly ear


【解决方案1】:

没有必要使用jboss-deployment-structure.xml,因为 EAR 中 JAR 库的引用已被 Java EE 平台规范 (JSR 366) 所涵盖

事实上,它应该适用于您当前的 EAR 结构,删除 jboss-deployment-structure.xml

EE.8.2.1 捆绑库部分提供了几种使 JAR 库可用于模块的方法。

  1. 您可以使用库(而不是 EAR)在模块的 META-INF/MANIFEST.MF 文件中添加对 JAR 文件的引用,其中包含 Class-Path 条目。

例如,如果 person-ejb.jar 依赖于 lib/Common.jar 和 lib/BugReport.jar,你可以添加:

Class-Path: lib/Common.jar lib/BugReport.jar

在META-INF/MANIFEST.MF里面de文件Person-ejb.jar。 Person-web.war 也一样

  1. 放在 EAR 的 &lt;library-directory&gt; 中的 JAR 文件可供所有模块使用。 &lt;library-directory&gt; 默认是目录 lib,因此,由于您在 lib 目录中同时拥有 Common.jar 和 BugReport.jar,它们应该已经可供 Person-ejb.jar 和 Person-web.war 使用。

您可以在 EAR 文件的 META-INF 目录中提供部署描述符 application.xml,并覆盖 &lt;library-directory&gt;。 EAR 的 application.xml 文件示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_8.xsd" version="8">
    <display-name>Person.ear</display-name>
    <module>
        <ejb>Person-ejb.jar</ejb>
    </module>
    <module>
        <web>
            <web-uri>Person-web.war</web-uri>
            <context-root>/person</context-root>
        </web>
    </module>
    <library-directory>lib</library-directory>
</application>

【讨论】:

  • @pbuchheit 你能试试吗?
  • @areus 我终于能够回到这里并尝试您的建议。我删除了 jboss-deployment-structure.xml 并添加了 标签。现在,当我尝试启动服务器时,我收到错误消息:“模块可能不是 EAR 库目录的子目录。库目录:lib,模块文件名:lib/Common.jar”。想法?
  • lib/Common.jar 是否在application.xml 中声明为&lt;module&gt;?它不应该
猜你喜欢
  • 1970-01-01
  • 2015-04-15
  • 2015-06-25
  • 2018-07-26
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
相关资源
最近更新 更多