jboss的module模块描述文件是一个XML文件,用来描述模块的结构,内容,依赖关系,过滤器,以及其它属性。它的格式是富有表现力的,用于使基于文件系统的模块装载器允许描述文件和模块内容放在一起,而不需要在模块内容之中。特别是,它在文件系统中的位置是将模块名转成以点号分割的目录,并加上该模块的version slot。然后以模块根路径附上该目录就可以找到
module.xml
文件。
下面是一个 JBoss Application Server 的模块描述文件:
模块描述文件示例:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="org.jboss.msc">
<main-class name="org.jboss.msc.Version"/>
<resources>
<resource-root path="jboss-msc-1.0.1.GA.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="org.jboss.logging"/>
<module name="org.jboss.modules"/>
<!-- Optional deps -->
<module name="javax.inject.api" optional="true"/>
<module name="org.jboss.threads" optional="true"/>
<module name="org.jboss.vfs" optional="true"/>
</dependencies>
</module>
module 元素
模块描述XML有一个根元素module 应用于 urn:jboss:module:1.0
命名空间,它支持以下属性:
module
元素可以包含下列子元素:
定义了
main-class
元素的模块意味着该模块是可执行的。也就是说,模块名能够被列在命令行中,然后main-class
中的标准静态方法main(String[])
会被执行。
main-class元素支持以下属性:
这个元素不包含任何子元素。
main class 不需要是该模块的实际资源,也不需要被exported。任何对于该模块可见的public class(包括所有imported的依赖或者资源)都可以作为main class, 只要它有方法
public static void main(String[] args)
。
resources 元素
为了让一个模块具有实际的内容,你必须为其定义至少一个resources
元素。
resources
元素不支持任何属性;它包含0至多个resource-root
元素。resource-root
元素支持下面的属性:
另外,resource-root
元素可能包含一个子元素:
参考过滤器定义一节获得更多信息。
dependencies 元素
一个模块可能通过dependencies
元素描述一个或多个对于其它模块的依赖。dependencies
元素不支持任何属性,它包含一个或多个dependency
元素,支持一下属性:
对于Java service provider接口机制的介绍,可以参考: http://download.oracle.com/javase/tutorial/sound/SPI-intro.html
另外,dependencies
元素支持以下子元素:
对依赖模块添加exclude的示例:
<dependencies>
<module name="org.jboss.example">
<imports>
<exclude-set>
<path name="org.jboss.example.tests"/>
</exclude-set>
</imports>
</module>
</dependencies>
参考过滤器定义获得关于过滤器更多的信息。