6.2. 模块依赖项
模块依赖项是声明,一个模块需要一个或多个其他模块的类才能正常工作。当 JBoss EAP 加载模块时,模块类加载程序会解析该模块的依赖项,并将每个依赖项中的类添加到其类路径中。如果无法找到指定的依赖项,则模块将无法加载。
有关 模块和模块 类加载系统的完整详情,请参阅 模块部分。
部署的应用程序(例如 JAR 或 WAR)被加载为动态模块,并使用依赖项来访问 JBoss EAP 提供的 API。
有两种类型的依赖项: 显式 和 隐式。
- 显式依赖项
-
开发人员在配置文件中声明了显式依赖项。静态模块可以在其
module.xml
文件中声明依赖项。动态模块可以在部署的MANIFEST.MF
或jboss-deployment-structure.xml
部署描述符中声明依赖项。 - 隐式依赖项
当部署中存在特定条件或 meta-data 时,JBoss EAP 会自动添加隐式依赖项。JBoss EAP 提供的 Java EE 7 API 是通过检测部署中隐式依赖项来添加的模块示例。
也可以将部署配置为使用
jboss-deployment-structure.xml
部署描述符文件来排除特定的隐式依赖项。当应用程序捆绑一个特定版本的 JBoss EAP 将尝试作为隐式依赖项添加的库时,这很有用。
可选依赖项
显式依赖项可以指定为可选。加载可选依赖项失败将导致模块无法加载。但是,如果依赖项在以后可用,它不会 添加到模块的类路径中。加载模块时,依赖项必须可用。
导出依赖
模块的类路径仅包含自己的类,以及其即时依赖项。模块无法访问其其中一个依赖项的依赖关系类。但是,模块可以指定要导出显式依赖项。导出的依赖项提供给依赖于导出它的模块的任何模块。
例如,模块 A 依赖于模块 B,模块 B 依赖于模块 C。模块 A 可以访问模块 B 的类,模块 B 可以访问模块 C 类。模块 A 无法访问模块 C 类,除非:
- 模块 A 声明对模块 C 的明确依赖,或者
- 模块 B 导出其对模块 C 的依赖项。
全局模块
全局模块是 JBoss EAP 作为各个应用的依赖项的模块。通过将任何模块添加到 JBoss EAP 的全球模块列表,即可成为全局模块。它不需要对模块进行更改。
详情请参阅 定义全局模块 部分。