文前说明
作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。
本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。
分析整理的版本为 Ovirt 3.4.5 版本。
项目的 pom 文件中,使用 <artifactId>jboss-modules-maven-plugin</artifactId> 插件,引入 JBoss 模块化管理,这是 JBoss 支持的静态加载配置方式的一种,采用模块化管理的项目有:dependencies、tools、compat、common、utils、dal、authentication。
<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>
注意:如果是第三方依赖,该名称必须与 maven 的 artifactId 一致。
注意:JBoss modules 是一个适用于 Java 的模块化(非层次化)类加载以及执行环境的实现。因此如果一个模块需要另一个模块的某些功能,必须进行依赖,这个依赖是不能传递的,例如 A 依赖于 B,B 依赖于 C,如果 A 使用了 C 的功能,那么 A 必须依赖 C。
Jboss 本身具有了很多的模块,可以直接进行依赖。文件位置:安装目录 /modules 中。例如 javax.api、javax.servlet.api 都是 Jboss 自带的模块。
配置了模块,还需要把模块与 maven 管理的 jar 包配置建立关联关系。这部分工作 dependencies 项目进行了配置。engine 中只要是采用模块化管理的项目中引入了第三方包,都需要在 dependencies 项目中进行关联性配置。
<module>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<moduleName>org.apache.commons.fileupload</moduleName>
</module>
将 maven 的 commons-fileupload 包与模块 org.apache.commons.fileupload 进行关联。
<dependencies>
<module name="javax.api"/>
<module name="javax.servlet.api"/>
</dependencies>
<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
來源:简书