当前位置: 首页 > 工具软件 > JBoss Modules > 使用案例 >

【Ovirt 笔记】JBoss modules 配置分析与整理

曹铭晨
2023-12-01

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

分析整理的版本为 Ovirt 3.4.5 版本。

项目的 pom 文件中,使用 <artifactId>jboss-modules-maven-plugin</artifactId> 插件,引入 JBoss 模块化管理,这是 JBoss 支持的静态加载配置方式的一种,采用模块化管理的项目有:dependencies、tools、compat、common、utils、dal、authentication

  1. utils 项目为例,modules 配置文件存放位置:
    /backend/manager/modules/utils/src/main/modules/org/ovirt/engine/core/utils/main/module.xml,配置信息如下:
<module xmlns="urn:jboss:module:1.1" name="org.ovirt.engine.core.utils"> 
    <resources>
        <resource-root path="utils.jar"/> 
    </resources>
    <dependencies> 
        <module name="javax.api"/> 
        <module name="javax.servlet.api"/>
        <module name="org.apache.commons.fileupload"/> 
    </dependencies> 
</module>
  • <module xmlns="urn:jboss:module:1.1" name="org.ovirt.engine.core.utils">
    name 定义了模块名称。
  • <resource-root path="utils.jar"/>,定义了模块生成的 jar 包名称。

注意:如果是第三方依赖,该名称必须与 maven 的 artifactId 一致。

  • <dependencies> 定义了模块的依赖关系,通过 <module name="javax.api"/> 设置依赖的模块名称。

注意:JBoss modules 是一个适用于 Java 的模块化(非层次化)类加载以及执行环境的实现。因此如果一个模块需要另一个模块的某些功能,必须进行依赖,这个依赖是不能传递的,例如 A 依赖于 B,B 依赖于 C,如果 A 使用了 C 的功能,那么 A 必须依赖 C。

  1. Jboss 本身具有了很多的模块,可以直接进行依赖。文件位置:安装目录 /modules 中。例如 javax.api、javax.servlet.api 都是 Jboss 自带的模块。

  2. 配置了模块,还需要把模块与 maven 管理的 jar 包配置建立关联关系。这部分工作 dependencies 项目进行了配置。engine 中只要是采用模块化管理的项目中引入了第三方包,都需要在 dependencies 项目中进行关联性配置。

  • dependenciespom 文件,配置了<dependency>,这里定义了 mavenjar 包管理。
  • <artifactId>jboss-modules-maven-plugin</artifactId><modules> 标签中,配置了模块的关联关系,例如:
<module> 
    <groupId>commons-fileupload</groupId> 
    <artifactId>commons-fileupload</artifactId>  
    <moduleName>org.apache.commons.fileupload</moduleName> 
</module>

mavencommons-fileupload 包与模块 org.apache.commons.fileupload 进行关联。

  1. utils 为例,依赖其他模块。
  • 依赖 Jboss 自身包含的模块,那么只需要在 modules 文件中配置即可。
<dependencies> 
    <module name="javax.api"/> 
    <module name="javax.servlet.api"/> 
</dependencies>
  • 依赖的第三方包,是 Jboss 自身不包含的,那么需要在
    /backend/manager/dependencies/src/main/modules 文件夹下面,按模块名称建立目录。例如 org.apache.commons.fileupload 就需要创建 org/apache/commons/fileupload/main/ 目录,在该目录下创建 module.xml 配置文件,配置为新的模块:
<module xmlns="urn:jboss:module:1.1" name="org.apache.commons.fileupload">
    <resources> 
        <resource-root path="commons-fileupload.jar"/> 
    </resources> 
    <dependencies> 
        <module name="javax.servlet.api"/> 
        <module name="org.apache.commons.io"/> 
    </dependencies> 
</module>

再引入该模块:

<dependencies> 
    <module name="javax.api"/> 
    <module name="javax.servlet.api"/> 
    <module name="org.apache.commons.fileupload"/> 
</dependencies>

最理想的配置是,所有的模块都能找到依赖关系,最底层的依赖是 Jboss 自身包含的依赖。但是实际情况可能会复杂很多,模块与模块的依赖关系,可以通过查询 maven中央库 了解。

  • 如果模块单独使用的可能性不大,每次都需要联合其他模块一起使用实现某个功能,那么可以将这些模块统一配置为一个模块,简化配置。例如:
<module xmlns="urn:jboss:module:1.1" name="org.springframework"> 
    <resources> 
        <resource-root path="spring-aop.jar"/>
        <resource-root path="spring-asm.jar"/>
        <resource-root path="spring-beans.jar"/> 
        <resource-root path="spring-context.jar"/> 
        <resource-root path="spring-core.jar"/> 
        <resource-root path="spring-expression.jar"/> 
        <resource-root path="spring-instrument.jar"/> 
        <resource-root path="spring-jdbc.jar"/> 
        <resource-root path="spring-ldap-core.jar"/> 
        <resource-root path="spring-tx.jar"/> 
    </resources> 
    <dependencies> 
        <module name="javax.api"/> 
        <module name="org.apache.commons.lang"/> 
        <module name="org.apache.commons.logging"/> 
        <module name="org.aopalliance"/> 
        <module name="sun.jdk"/> 
    </dependencies> 
</module> 

将 spring 所需 jar 包统一划分为一个模块,使用到 spring 的地方,统一引入该模块即可。



作者:羽杰
链接:https://www.jianshu.com/p/c4e570176311
來源:简书
 

 类似资料: