JBoss 系列八十六: JBoss Modules module.xml 中 export="true" 是什么意思

前端之家收集整理的这篇文章主要介绍了JBoss 系列八十六: JBoss Modules module.xml 中 export="true" 是什么意思前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

JBoss Modules module.xml 中dependencies有export="true"配置,如下:

<dependencies>
                <module name="C" export="true" />
        </dependencies>

本文通过一个实现来验证export="true"的意思。

实验

假设我们有三个module:A,B,C 关系如下图:


@H_502_15@
  • 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 加载。

    猜你在找的XML相关文章