JBoss 系列八十六: JBoss Modules module.xml 中 export="true" 是什么意思
2014-01-14 13:24
941 查看
概述
JBoss Modules module.xml 中dependencies有export="true"配置,如下:<dependencies> <module name="C" export="true" /> </dependencies>
本文通过一个实现来验证export="true"的意思。
实验
假设我们有三个module:A,B,C 关系如下图:A 依赖于 B
B 依赖于 C
B 中 dependencies 定义 export
本示例代码:https://github.com/kylinsoong/wildfly-architecture,根据前面软件安装及资料下载中gituhb安装部分获取示例代码通过如下命令编译:
cd wildfly-architecture/modules/export/ mvn clean dependency:copy-dependencies install cd dist ant
会生成build目录,进入到build/Test/bin,执行示例启动脚本:
./test.sh
会有如下输出:
JBoss Module Export [A -> B -> C] C -> class org.jboss.modules.export.c.Cast B -> class org.jboss.modules.export.c.Cast A -> class org.jboss.modules.export.c.Cast
分析代码,A中类Afirm的afirm()方法如下:
public void afirm() { new Baker().baker(); loadclass("A"); }
B中类Baker的baker()方法如下:
public void baker() { new Cast().cast(); loadclass("B"); }
C中类Cast的cast()方法如下:
public void cast(){ System.out.println("JBoss Module Export [A -> B -> C]"); loadclass("C"); }
如上,loadclass()方法都相同,如下:
private void loadclass(String flag) { try { Class cls = Class.forName("org.jboss.modules.export.c.Cast").newInstance().getClass(); System.out.println(flag + " -> " + cls); } catch (Exception e) { System.out.println(flag + " Error " + e.getMessage()); } }
即从当前的classpath下加载C中的org.jboss.modules.export.c.Cast,如果成功则输出相关的class,如果失败则输出错误异常,上面我们运行输出正常是因为我们B中配置export="true"
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="B">
<resources>
<resource-root path="B.jar" />
</resources>
<dependencies> <module name="C" export="true" /> </dependencies></module>
如果修改export="false",重新运行启动脚本则输出如下所示:
JBoss Module Export [A -> B -> C] C -> class org.jboss.modules.export.c.Cast B -> class org.jboss.modules.export.c.Cast A Error org.jboss.modules.export.c.Cast from [Module "A:main" from local module loader @1d09ad6 (finder: local module finder @655fb6 (roots: /home/kylin/work/project/wildfly-architecture/modules/export/dist/build/Test/modules,/home/kylin/work/project/wildfly-architecture/modules/export/dist/build/Test/modules/system/layers/base))]
这说明当B中export="false"时,A的class path中没有org.jboss.modules.export.c.Cast。
结论
export="true"是指是否将当前modle的依赖也加载到当前module。例如,A 依赖 B,B 依赖 C,但 B 依赖 C 的export="true",所以A 在加载 B 时,也将 C 加载。
相关文章推荐
- android:singleLine="true" 是什么意思?
- <?xml version="1.0" encoding="UTF-8" ?> 这句话是什么意思
- [Browsable( true ) , Description( "当前页记录数" ) , Category( "分页" ) , DefaultValue( 0 )]//这一行是什么意思
- spring 事务管理属性为只读read-only="true"是什么意思
- [Browsable( true ) , Description( "当前页记录数" ) , Category( "分页" ) , DefaultValue( 0 )]//这一行是什么意思
- xmlDoc.async="false";什么意思async
- 请问c++中的#include "stdafx.h"是什么意思?
- 屏幕显示"Primary IDE channel no 80 conductor cable installed"是什么意思?
- jquery $(":text") 这是什么意思
- href="#"是什么意思呢?
- web.xml中出现<servlet-name>default</servlet-name>是什么意思?
- 这句代码什么意思?img, div, input { behavior: url("iepngfix.htc") }
- oracle 里 符号" ||" 表示什么意思??
- " "什么意思
- struts.xml中为什么加上<constant name="struts.devMode" value="true" />就出错
- String.getByte("utf-8")和new String(byte[],"utf-8")各是什么意思?
- media="screen" 这句代码是什么意思?
- makefile中CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)什么意思
- extern "C"什么意思
- android:ems="10"是什么意思