JBoss Modules - Dependecies - Imports and Exports

本质上,一个module就是本地和输入资源的聚合。本地资源构成模块本身;一般来源于JAR文件或者本地文件系统上的目录。可输入的资源包括任何模块外部的模块 class loader可见的东西,根据对其它模块的依赖来确定。我们使用 imports(输入) 来表示这个聚合。

 

除了 imports 概念外,一个 module可要定义它自身被别的module依赖时,哪些是可见的。这个集合总是模块可输入资源集合的子集,被称作模块的 exports(输出)。当一个 module 和别的 module 建立起依赖关系时,输入的资源仅由依赖 module 的输出资源构成。

 

当一个模块从一个依赖的模块中输入了资源,然后输入同样的资源(或者其子集)给依赖它的module,这称为将依赖 re-export(再次输出)。

 

为了限制从一个依赖 module中可以输入什么资源,或者限制什么资源被输出或者再次输出给依赖其的 module,就需要采用 filter(过滤器),这是下面的子章节要关注的焦点。

 

 

Import filtering (输入过滤)

大部分模块依赖的资源可以没有任何限制的输入,除了一个例外:META-INF 目录以及其下所有的子目录被排除在 import 之外。也就是说,当一个被依赖的模块没有定义任何 filters 或者其他的属性,就像下面的代码片段:

< module name = "org.jboss.logging" />

那么,依赖于该模块的 imports 被配置成像下面的规则:

  • 不能 import META-INF
  • 不能 import META-INF 的子目录(包括 META-INF/services )
  • 可以 import 其它任何资源

需要import META-INFO/services这个目录是非常普遍的,这可以通过很多现有APIs和使用JDK java.util.ServiceLoader API的框架来发现服务。因为这个原因,可以通过指定默认的filter在排除 META-INF子目录之前,应该包含 META-INF/services。

 

Filter元素对path set还有更进一步的限制。当过滤输入时,不仅影响哪些 classes 和 resources 可以被输入,而且也影响那些输入的资源的再次输出(re-export)。

 

关于如何在 module.xml 中配置 import filters ,可以参考 Moudle descriptors 一章。如何在 MANIFEST.MF 中配置 service imports,参考 Manifest module information 一章。

 

 

Export filtering (输出过滤)

默认情况下,一个 module 仅能输出它本地定义的资源。特别是,module输入的资源一般不被再次输出。然而,可以通过为依赖指定一个不同的 export filter来改变这个策略。

 

在 module.xml描述文件或者 MANIFEST.MF JAR依赖 manifest属性文件中,有一个简单的 "export" 标记,可以为依赖来指定不同的策略,改变为再次输出(re-exports)大多数该依赖的资源(并不是所有), 而不是默认的 "reject-all" filter 策略。这个 filter 将包括除了 META-INF目录以及其子目录下的资源之外的任何东西。

 

在特定情况下,为了能够在特殊的 module configuration 中使用 java.util.ServiceLoader, 一个依赖要和 META-INF/services一起被再次输出。在module.xml 中有一个快捷的标记来做这个事情,而不用需要改动 filter。 关于这个属性更多的信息,可以参考模块描述一章中的 services attribute section 章节。

 

其它关于 re-export 的配置信息,需要完整过滤器规范。关于如果用 xml 配置 filter,请参考 Module Descriptor 的 filters section 章节。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值