Eclipse 3.0 插件迁移 FAQ

为什么 2.1 与 3.0 之间的 Eclipse API 更改不兼容?

Eclipse 3.0 是对 Eclipse 2.1 的改进。在某些方面我们不能做到在改进 Eclipse 的同时维护很好的兼容性。下面是产生不兼容性的四个主要来源:

具体的不兼容性的列表。

2.1 插件在 Eclipse 3.0 中会工作吗?

除了少数情况之外,大多数情况下都将工作。如果一个插件只依赖于 Eclipse 2.1 API,则它在 3.0 中将继续工作。很少的例外情况发生在 API 中无法以任何兼容方式完成 2.1 与 3.0 之间的更改的那些地方;如果插件使用了这些更改,则它将无法工作。

我的 2.1 插件利用了内部包中的类。它在 Eclipse 3.0 中仍然能工作吗?

如果一个插件依赖于在 Eclipse 2.1 API 中未指定的内部类或行为,则无论如何都无法一口断定该插件在 3.0 中是否可以工作。您需要尝试之后才能知道。

如何在 Eclipse 3.0 中运行插件而不会对它造成影响?

将 2.1 插件安装在基于 Eclipse 3.0 的产品的 eclipse/plugins/ 子目录中,然后重新启动 Eclipse。Eclipse 将(通过 plugin.xml 上的头来)识别该插件是一个未经转换的 2.1 插件,并自动进行调整以补偿对平台插件依赖项的更改,并重命名平台扩展点。

需要更改 2.1 插件才能在 Eclipse 3.0 中正确地编译吗?

是的,在任何情况下都是这样。Eclipse 2.1 与 3.0 之间存在一些区别,需要更改之后所有插件才能继续执行。如果您具有为 2.1 编写的插件并且希望重新编译它,则需要将它迁移到 3.0 之后才能进一步为 3.0 开发它。

如何将插件迁移到 Eclipse 3.0?

一旦已经将插件项目装入(或者导入)到 Eclipse 3.0 工作空间中,就使用 PDE 工具 > 迁移到 3.0(项目上下文菜单)来将 插件的清单转换为 3.0 格式,并自动调整必需的平台插件以及对已重命名的平台扩展点的引用的列表。在大多数情况下,就可以成功地编译和运行插件的代码了。然后,应该复审插件的代码,以确保它不依赖于不兼容的 API 更改的其中一个区域。

如果插件依赖于已经以不兼容方式更改的 API,插件是否将一定具有编译错误或警告?

否。有些存在不兼容更改的区域并未被 Java 编译器标记。

是否可以安全地忽略使用不推荐使用的 API 时代码中产生的警告?

在短期内可以。只要有可能,过时的 API 就被标记为不推荐使用而不是彻底地删除掉,并且将继续工作(即使仅在有限情况下可以工作)。虽然通常不会急于废弃不推荐使用的 API,但是,如果现在认为它已经过时了,则表示现在具有更好的方法来完成某些任务。插件应该尽早放弃使用不推荐使用的 API。

将插件迁移到 Eclipse 3.0 之后,仍然可以在 Eclipse 2.1 中安装和运行获得的二进制插件吗?

否。这是不受支持的,并且由于已重命名的扩展点而可能不会工作。

org.eclipse.core.runtime.compatibility 有什么用途?

从 3.0 转移到基于 OSGi 的运行时使现有的某些核心运行时 API 变得过时。只要有可能,就会将 org.eclipse.core.runtime.* 包中过时的 API 以及它包含的实现 从 org.eclipse.core.runtime 插件转移到新的 org.eclipse.core.runtime.compatibility 插件。缺省情况下,新创建的插件依赖于 org.eclipse.core.runtime,并且期望只使用不是不推荐使用的运行时 API。另一方面,从 2.1 迁移的现有插件缺省情况下将依赖于 org.eclipse.core.runtime.compatibility,并且还可以利用旧的 API(org.eclipse.core.runtime.compatibility 插件重新导出 org.eclipse.core.runtime 的 API)。虽然 org.eclipse.core.runtime.compatibility 插件可能包括在 Eclipse IDE 配置中,但是它是没有用处的东西,不可能包括在基于 RCP 配置的产品中。

org.eclipse.ui.workbench.compatibility 有什么用途?

org.eclipse.ui.workbench.compatibility 是一个插件段,它为在基于 Eclipse 3.0 的产品中运行的 2.1 插件提供了增强的二进制兼容性。在 3.0 中,从 org.eclipse.ui.IWorkbenchPage 接口中移动了明确依赖于 IFile 或 IMarker 的六个方法,以便清楚地将工作台与工作空间和资源分隔开。org.eclipse.ui.workbench.compatibility 段安排将这些方法添加回去,以便无须修改就可以运行现有 2.1 插件。但是要注意,迁移到 3.0 并且引用了已移动的那些方法的插件将产生编译错误,只能通过调用现在位于 org.eclipse.ui.ide.IDE 上的替换方法才能解决这些编译错误。

上面提到的 IWorkbenchPage 方法是:openEditor(IFile)、openEditor(IFile, String)、openEditor(IFile, String, boolean)、openEditor(IMarker)、openEditor(IMarker, boolean) 和 openSystemEditor(IFile)。