访问规则

Eclipse 3.1 运行时允许插件开发者逐个包地控制插件代码对下游插件的可视性。

可以将包分类为:

  1. 可访问
  2. 被禁止
  3. 内部
  4. 内部,带有友元

在编译时,PDE 将把这些运行时可视性规则转换为编译器访问限制规则。因此,编译器将根据可视性规则违例严重性将该违例标记为警告或错误。

由于在编译时提供了此类支持,所以用户永远不会意外地遇到运行时类装入错误,并且总是对内部类型引用了如指掌。

 

可访问的包

可访问的包无条件地对下游插件可视。虽然必须明确地将 API 包归于此类,但应该完全由开发者决定应该对插件导出的哪些其他包指定此可视性级别。

为了将包声明为可访问,必须将其列示在插件清单编辑器的运行时页的导出的包部分中,并且保留缺省可视性设置不变。

可访问的包

 

被禁止的包

通过从插件清单编辑器的运行时页上的导出的包部分中的列表中排除一个包,可以使该包对下游插件永远隐藏。

如果对被禁止的包中的类型进行引用,就会导致在运行时发生类装入错误。

为了避免发生此类不良情况:

  1. 编译器将把对被禁止的包的引用标记为错误。
  2. 在内容辅助中,不会提供被禁止的包中的类型作为建议。

注意:

  1. Eclipse SDK 中的所有插件都在导出的包部分中列举它们所有的包;因此,SDK 中的任何包都不是禁止访问的。
  2. 被禁止的引用的严重性级别是在 Java > 编译器 > 错误/警告 > 建议不要使用的和受限制的 API 首选项页上设置的。

    强烈建议您保留将被禁止的引用的严重性设置为错误。

    “被禁止”首选项

 

内部包

内部包是不打算提供给下游插件使用的包。缺省情况下,这些包对下游插件可视

仅当以 strict 方式启动 Eclipse(即,启动时指定了 -Dosgi.resolverMode=strict VM 参数)时,内部包才会对下游插件隐藏起来。

内部包必须列示在插件清单编辑器的运行时页上的导出的包部分中并选中隐藏选项。

不鼓励的访问

利用了两种措施来不鼓励下游插件引用内部包:

不鼓励的访问

不鼓励的内容辅助

可以在 Java > 编译器 > 错误/警告 > 建议不要使用的和受限制的 API 首选项页上设置不鼓励的引用的严重性级别。

“不鼓励”首选项

 

内部包,带有友元

插件能够将其内部包的完全访问权授予指定的“友元”插件,这一点十分重要。例如,PDE 代码分散在多个插件中,org.eclipse.pde.ui 插件对 org.eclipse.pde.core 的内部包应该具有完全访问权。

在以下示例中,org.eclipse.pde.ui 友元插件对 org.eclipse.pde.core 插件中的 org.eclipse.pde.internal.core.bundle 包具有完全访问权。

友元

编译器允许友元自由地对 org.eclipse.pde.internal.core.bundle 包中的任何类型进行引用。

另一方面,如果任何其他插件对 org.eclipse.pde.internal.core.bundle 包中的类型进行引用,编译器就会将该引用标记为不鼓励的引用,如上一节所述。

 

如何启用访问限制

要利用 PDE 的访问限制支持,唯一的要求是所处理的插件必须包含 OSGi 捆绑软件 MANIFEST.MF。PDE 将处理余下的工作,包括管理插件类路径。

如果插件未包含 MANIFEST.MF 文件,则可以按以下方式创建该文件:

  1. 在插件清单编辑器中打开 plugin.xml
  2. 概述页的插件内容部分中,单击创建 OSGi 捆绑软件清单链接。

转换为 manifest.mf

 

检查访问规则

可以在插件项目的 Java 构建路径属性页上检查 PDE 对每个类路径条目应用的访问限制规则。

Java 构建路径属性