3.2. 为部署添加 Explicit 模块依赖性
可以在应用中添加显式模块依赖项,将这些模块的类添加到部署时应用的类路径。
JBoss EAP 自动为部署添加一些依赖性。详情请参阅 Implicit 模块依赖项。
先决条件
- 您要添加模块依赖项的工作软件项目。
- 您必须知道添加为依赖项的模块的名称。如需 JBoss EAP 随附的静态模块列表,请参阅 包含的模块。如果模块是另一部署,请参阅 JBoss EAP 配置指南 中的 Dynamic Module Naming,以确定模块名称。
可以使用两种方法配置依赖关系:
-
向部署的
MANIFEST.MF文件中添加条目。 -
向
jboss-deployment-structure.xml部署描述符中添加条目。
添加依赖配置到 MANIFEST.MF
可以将 Maven 项目配置为在 MANIFEST.MF 文件中创建所需的依赖项条目。
-
如果项目没有,请创建名为
MANIFEST.MF的文件。对于 Web 应用(WAR),将此文件添加到META-INF/目录中。对于 Jakarta Enterprise Beans 存档(JAR),将其添加到META-INF/目录中。 使用逗号分隔的依赖模块名称列表在
MANIFEST.MF文件中添加依赖项条目:Dependencies: org.javassist, org.apache.velocity, org.antlr
Dependencies: org.javassist, org.apache.velocity, org.antlrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要使依赖项可选,请在依赖项条目中的模块名称中附加
可选:Dependencies: org.javassist optional, org.apache.velocity
Dependencies: org.javassist optional, org.apache.velocityCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过将导出附加到依赖项条目中的模块名称,可以
导出依赖项:Dependencies: org.javassist, org.apache.velocity export
Dependencies: org.javassist, org.apache.velocity exportCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当模块依赖项包含在注解扫描期间处理的注解时,如声明 Jakarta Enterprise Beans 拦截器时,需要
annotations标志。否则,就无法在部署中使用模块中声明的 Jakarta Enterprise Beans 拦截器。当还需要注解扫描时,还有其他情况涉及注解扫描。Dependencies: org.javassist, test.module annotations
Dependencies: org.javassist, test.module annotationsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,无法访问依赖项的
META-INF中的项目。服务依赖项使来自META-INF/services的项目可以访问,以便可以加载模块中的服务。Dependencies: org.javassist, org.hibernate services
Dependencies: org.javassist, org.hibernate servicesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 若要扫描
beans.xml文件并将其生成的 bean 用于应用程序,可以使用meta-inf依赖项。Dependencies: org.javassist, test.module meta-inf
Dependencies: org.javassist, test.module meta-infCopy to Clipboard Copied! Toggle word wrap Toggle overflow
添加依赖配置到 jboss-deployment-structure.xml
如果应用没有,请创建名为
jboss-deployment-structure.xml的新文件,并将它添加到项目中。此文件是一个 XML 文件,它的根元素为<jboss-deployment-structure>。<jboss-deployment-structure> </jboss-deployment-structure>
<jboss-deployment-structure> </jboss-deployment-structure>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Web 应用(WAR),将此文件添加到
WEB-INF/目录中。对于 Jakarta Enterprise Beans 存档(JAR),将其添加到META-INF/目录中。-
在文档根目录和
<元素。dependencies> 元素内创建一个 <deployment> 在
<dependencies>节点中,为每个模块依赖项添加一个模块元素。将name属性设置为模块的名称。<module name="org.javassist" />
<module name="org.javassist" />Copy to Clipboard Copied! Toggle word wrap Toggle overflow 若要使依赖项成为可选的,可以添加
optional属性到模块条目,值设为true。此属性的默认值为false。<module name="org.javassist" optional="true" />
<module name="org.javassist" optional="true" />Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可以通过将
export属性添加到值为true的模块条目来导出依赖项。此属性的默认值为false。<module name="org.javassist" export="true" />
<module name="org.javassist" export="true" />Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当模块依赖项包含需要在注解扫描过程中处理的注解时,将使用
annotations标记。<module name="test.module" annotations="true" />
<module name="test.module" annotations="true" />Copy to Clipboard Copied! Toggle word wrap Toggle overflow 服务依赖项指定是否以及如何使用此依赖项中找到的服务。默认值为none。指定此属性的导入值等同于在导入过滤器列表末尾添加一个过滤器,其中包括 dependencies 模块的META-INF/services路径。为此属性设置 export 值等同于导出过滤器列表上的相同操作。<module name="org.hibernate" services="import" />
<module name="org.hibernate" services="import" />Copy to Clipboard Copied! Toggle word wrap Toggle overflow META-INF依赖项指定是否以及如何使用此依赖项中的META-INF条目。默认值为none。为此属性指定导入值等同于在导入过滤器列表末尾添加一个过滤器,其中包括 dependencies 模块的META-INF/**路径。为此属性设置 export 值等同于导出过滤器列表上的相同操作。<module name="test.module" meta-inf="import" />
<module name="test.module" meta-inf="import" />Copy to Clipboard Copied! Toggle word wrap Toggle overflow
示例:带有两个依赖项的 jboss-deployment-structure.xml 文件
JBoss EAP 在部署时将指定模块中的类添加到应用的类路径中。
创建 Jandex Index
annotations 标志要求模块包含 Jandex 索引。在 JBoss EAP 7.4 中,这会自动生成。但是,出于性能的原因,仍建议手动添加索引,因为自动扫描可能是消耗 CPU 并增加部署时间的较长进程。
要手动添加索引,请创建新的"index JAR"以添加到模块中。使用 Jandex JAR 构建索引,然后将它插入到新的 JAR 文件中。在当前的实施中,当索引添加到模块内的 JAR 文件中时,根本不执行扫描。
创建 Jandex 索引:
创建索引:
java -jar modules/system/layers/base/org/jboss/jandex/main/jandex-jandex-2.0.0.Final-redhat-1.jar $JAR_FILE
java -jar modules/system/layers/base/org/jboss/jandex/main/jandex-jandex-2.0.0.Final-redhat-1.jar $JAR_FILECopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建临时工作空间:
mkdir /tmp/META-INF
mkdir /tmp/META-INFCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将索引文件移到工作目录
mv $JAR_FILE.ifx /tmp/META-INF/jandex.idx
mv $JAR_FILE.ifx /tmp/META-INF/jandex.idxCopy to Clipboard Copied! Toggle word wrap Toggle overflow 选项 1:在新 JAR 文件中包括索引
jar cf index.jar -C /tmp META-INF/jandex.idx
jar cf index.jar -C /tmp META-INF/jandex.idxCopy to Clipboard Copied! Toggle word wrap Toggle overflow 然后,将 JAR 放置到模块目录中,再编辑
module.xml以将它添加到资源根目录中。选项 2:将索引添加到现有 JAR
java -jar /modules/org/jboss/jandex/main/jandex-1.0.3.Final-redhat-1.jar -m $JAR_FILE
java -jar /modules/org/jboss/jandex/main/jandex-1.0.3.Final-redhat-1.jar -m $JAR_FILECopy to Clipboard Copied! Toggle word wrap Toggle overflow
告知模块导入以使用注解索引,以便注解扫描可以找到注解。
选项 1:如果您要使用
MANIFEST.MF添加模块依赖项,请在模块名称后添加注解。例如,更改:Dependencies: test.module, other.module
Dependencies: test.module, other.moduleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为
Dependencies: test.module annotations, other.module
Dependencies: test.module annotations, other.moduleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 选项 2:如果您要根据模块依赖关系添加使用
jboss-deployment-structure.xml添加注释="true"的模块依赖关系。注意如果应用想要使用静态模块内类中定义的带注解的 Jakarta EE 组件,则需要注释索引。在 JBoss EAP 7.4 中,会自动生成静态模块的注解索引,因此您无需创建它们。但是,您必须告知模块导入以使用注释,方法是将依赖项添加到
MANIFEST.MF或jboss-deployment-structure.xml文件。