3.2. 为部署添加 Explicit 模块依赖性


可以在应用中添加显式模块依赖项,将这些模块的类添加到部署时应用的类路径。

注意

JBoss EAP 自动为部署添加一些依赖性。详情请参阅 Implicit 模块依赖项

先决条件

  1. 您要添加模块依赖项的工作软件项目。
  2. 您必须知道添加为依赖项的模块的名称。如需 JBoss EAP 随附的静态模块列表,请参阅 包含的模块。如果模块是另一部署,请参阅 JBoss EAP 配置指南 中的 Dynamic Module Naming,以确定模块名称。

可以使用两种方法配置依赖关系:

  • 向部署的 MANIFEST.MF 文件中添加条目。
  • jboss-deployment-structure.xml 部署描述符中添加条目。

添加依赖配置到 MANIFEST.MF

可以将 Maven 项目配置为在 MANIFEST.MF 文件中创建所需的依赖项条目。

  1. 如果项目没有,请创建名为 MANIFEST.MF 的文件。对于 Web 应用(WAR),将此文件添加到 META-INF/ 目录中。对于 Jakarta Enterprise Beans 存档(JAR),将其添加到 META-INF/ 目录中。
  2. 使用逗号分隔的依赖模块名称列表在 MANIFEST.MF 文件中添加依赖项条目:

    Dependencies: org.javassist, org.apache.velocity, org.antlr
    Copy to Clipboard Toggle word wrap
    • 要使依赖项可选,请在依赖项条目中的模块名称中附加 可选

      Dependencies: org.javassist optional, org.apache.velocity
      Copy to Clipboard Toggle word wrap
    • 通过将导出附加到依赖项条目中的模块名称,可以 导出 依赖项:

      Dependencies: org.javassist, org.apache.velocity export
      Copy to Clipboard Toggle word wrap
    • 当模块依赖项包含在注解扫描期间处理的注解时,如声明 Jakarta Enterprise Beans 拦截器时,需要 annotations 标志。否则,就无法在部署中使用模块中声明的 Jakarta Enterprise Beans 拦截器。当还需要注解扫描时,还有其他情况涉及注解扫描。

      Dependencies: org.javassist, test.module annotations
      Copy to Clipboard Toggle word wrap
    • 默认情况下,无法访问依赖项的 META-INF 中的项目。服务 依赖项使来自 META-INF/services 的项目可以访问,以便可以加载模块中的 服务

      Dependencies: org.javassist, org.hibernate services
      Copy to Clipboard Toggle word wrap
    • 若要扫描 beans.xml 文件并将其生成的 bean 用于应用程序,可以使用 meta-inf 依赖项。

      Dependencies: org.javassist, test.module meta-inf
      Copy to Clipboard Toggle word wrap

添加依赖配置到 jboss-deployment-structure.xml

  1. 如果应用没有,请创建名为 jboss-deployment-structure.xml 的新文件,并将它添加到项目中。此文件是一个 XML 文件,它的根元素为 <jboss-deployment-structure>

    <jboss-deployment-structure>
    
    </jboss-deployment-structure>
    Copy to Clipboard Toggle word wrap

    对于 Web 应用(WAR),将此文件添加到 WEB-INF/ 目录中。对于 Jakarta Enterprise Beans 存档(JAR),将其添加到 META-INF/ 目录中。

  2. 在文档根目录和 < dependencies> 元素内创建一个 <deployment > 元素。
  3. <dependencies> 节点中,为每个模块依赖项添加一个模块元素。将 name 属性设置为模块的名称。

    <module name="org.javassist" />
    Copy to Clipboard Toggle word wrap
    • 若要使依赖项成为可选的,可以添加 optional 属性到模块条目,值设为 true。此属性的默认值为 false

      <module name="org.javassist" optional="true" />
      Copy to Clipboard Toggle word wrap
    • 可以通过将 export 属性添加到值为 true 的模块条目来导出依赖项。此属性的默认值为 false

      <module name="org.javassist" export="true" />
      Copy to Clipboard Toggle word wrap
    • 当模块依赖项包含需要在注解扫描过程中处理的注解时,将使用 annotations 标记。

      <module name="test.module" annotations="true" />
      Copy to Clipboard Toggle word wrap
    • 服务 依赖项指定是否以及如何使用此依赖项中找到 的服务。默认值为 none。指定此属性的 导入 值等同于在导入过滤器列表末尾添加一个过滤器,其中包括 dependencies 模块的 META-INF/services 路径。为此属性设置 export 值等同于 导出 过滤器列表上的相同操作。

      <module name="org.hibernate" services="import" />
      Copy to Clipboard Toggle word wrap
    • META-INF 依赖项指定是否以及如何使用此依赖项中的 META-INF 条目。默认值为 none。为此属性指定 导入 值等同于在导入过滤器列表末尾添加一个过滤器,其中包括 dependencies 模块的 META-INF/** 路径。为此属性设置 export 值等同于 导出 过滤器列表上的相同操作。

      <module name="test.module" meta-inf="import" />
      Copy to Clipboard Toggle word wrap

示例:带有两个依赖项的 jboss-deployment-structure.xml 文件

<jboss-deployment-structure>
   <deployment>
      <dependencies>
         <module name="org.javassist" />
         <module name="org.apache.velocity" export="true" />
      </dependencies>
   </deployment>
</jboss-deployment-structure>
Copy to Clipboard Toggle word wrap

JBoss EAP 在部署时将指定模块中的类添加到应用的类路径中。

创建 Jandex Index

annotations 标志要求模块包含 Jandex 索引。在 JBoss EAP 7.4 中,这会自动生成。但是,出于性能的原因,仍建议手动添加索引,因为自动扫描可能是消耗 CPU 并增加部署时间的较长进程。

要手动添加索引,请创建新的"index JAR"以添加到模块中。使用 Jandex JAR 构建索引,然后将它插入到新的 JAR 文件中。在当前的实施中,当索引添加到模块内的 JAR 文件中时,根本不执行扫描。

创建 Jandex 索引:

  1. 创建索引:

    java -jar modules/system/layers/base/org/jboss/jandex/main/jandex-jandex-2.0.0.Final-redhat-1.jar $JAR_FILE
    Copy to Clipboard Toggle word wrap
  2. 创建临时工作空间:

    mkdir /tmp/META-INF
    Copy to Clipboard Toggle word wrap
  3. 将索引文件移到工作目录

    mv $JAR_FILE.ifx /tmp/META-INF/jandex.idx
    Copy to Clipboard Toggle word wrap
    1. 选项 1:在新 JAR 文件中包括索引

      jar cf index.jar -C /tmp META-INF/jandex.idx
      Copy to Clipboard Toggle word wrap

      然后,将 JAR 放置到模块目录中,再编辑 module.xml 以将它添加到资源根目录中。

    2. 选项 2:将索引添加到现有 JAR

      java -jar /modules/org/jboss/jandex/main/jandex-1.0.3.Final-redhat-1.jar -m $JAR_FILE
      Copy to Clipboard Toggle word wrap
  4. 告知模块导入以使用注解索引,以便注解扫描可以找到注解。

    1. 选项 1:如果您要使用 MANIFEST.MF 添加模块依赖项,请在模块名称后添加 注解。例如,更改:

      Dependencies: test.module, other.module
      Copy to Clipboard Toggle word wrap

      Dependencies: test.module annotations, other.module
      Copy to Clipboard Toggle word wrap
    2. 选项 2:如果您要根据模块依赖关系添加使用 jboss-deployment-structure.xml 添加 注释="true" 的模块依赖关系。

      注意

      如果应用想要使用静态模块内类中定义的带注解的 Jakarta EE 组件,则需要注释索引。在 JBoss EAP 7.4 中,会自动生成静态模块的注解索引,因此您无需创建它们。但是,您必须告知模块导入以使用注释,方法是将依赖项添加到 MANIFEST.MFjboss-deployment-structure.xml 文件。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat