Oracle 发布 Java 模块系统状态报告(2)

OSGi通过bundle的清单文件来描述依赖,有两种基本方式来创建清单文件:“代码优先”和“清单文件优先”。代码优先方式(使用bnd工 具,和maven bundle插件),并不会在编译时检查依赖列表,实际上它是在编译时生成的。在通常方式的编译过程中,工具会根据编译时的依赖统计出运行时的依赖。另一 种方式是清单文件优先,通过Eclipse PDE工具来使用。在这种方式中,依赖被声明在清单文件中,Eclipse IDE会使用这份清单文件统计出你的代码能访问的类,并高亮缺失的依赖。PDE命令行构建和一个叫做Tycho的Maven插件,都会在编译时检查依赖关 系。但是,请注意OSGi自己并不会检查可见性,而是通过PDE自带的工具;因为不是所有使用PDE的团队都会使用其中的工具,有时候可能会在编译时造成 缺少依赖。

新的模块系统的另一个重要方面是能够限定指定包对模块的导出,这是很有用的当一批相互关联的模块需要互相访问,但却不能访问其他内容时。正如Mark Reinhold在报告中指出的,这能够用以下语法来实现:

module java.base {
  ...
  exports sun.reflect to
      java.corba,
      java.logging,
      java.sql,
      java.sql.rowset,
      jdk.scripting.nashorn;
}

OSGi最初并没有这个能力,但增加之后能够让它比模块系统的目标走的更远。Holly解释道,“所有的bundle都能够注册成一个解析拦截器, 用以过滤匹配,因此包只会暴露给指定的bundle。当导出声明了确定的元数据的包给bundle时,你能够使用相同的机制来预测,或者只是在每周二疯狂 的导出包”。

查看英文原文Oracle Publishes Report on the State of Java’s Module System

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/18b64981e6527e86973856cfaf13baa5.html