11. 关闭运行时工作台。在Superview.java编辑器中,子类new LabelProvider()如列表3所示:
Listing 3: Label provider customization:
viewer.setLabelProvider(new LabelProvider()
{
private final Map images = new HashMap();
public String getText(Object element)
{
return ((IViewDescriptor) element).getLabel();
}
public Image getImage(Object element)
{
Image image = (Image) images.get(element);
if (image == null)
{
IViewDescriptor view = (IViewDescriptor) element;
ImageDescriptor desc = view.getImageDescriptor();
image = desc.createImage();
images.put(element, image);
}
return image;
}
public void dispose()
{
for (Iterator i = images.values().iterator(); i.hasNext();) ((Image) i.next()).dispose(); super.dispose();
}
});
这里,你已经重载了getText(Object)方法来返回元素(一个IViewDescriptor的实例)的标号。为了使得看起来更加好看,你可以重载getImage(Object)方法来返回每个视图的文字标号的关联图标。这里比较复杂一点了,你必须学习JFace和SWT,你将会发现图像(org.eclipse.swt.graphics.Image)是操作系统额资源,必须被程序来管理。然而,IViewDescriptor只是返回了一个ImageDescriptor而不是图像本身。一个图像标识符可能被用来创建一个Image实例,但是必须能够在不需要的时候释放。由于这个原因,你必须跟踪创建的所有的Image实例并在不需要的时候释放掉它。
要看最后的输入,重新启动运行时工作台。(Ctrl + F11)

打包并且分发插件
即使你可能完成了插件的开发和测试,你也需要将其从开发环境里导出分发到用户手中。幸运的是,Eclipse没有把这个交给你自己完成。你可以使用导出向导,它出现在你的插件编辑器的总览页面里。它将创建一个分发包文件,包含你的插件代码和资源。用户只要将其解压在他们的Eclipse安装里,如果它们的环境的所有依赖关系都满足,那么Eclipse将会在需要时自动发现和激活你的插件。
这种形式的分发和安装被成为未管理的--如果你将来进行更新的话,你将发现和安装你的插件的更新的任务交给了用户。一个更加有组织的方法时将你的插件组织成feature。feature是一组同时安装和管理的插件。在集合插件之外,feature包含了一些信息,这些信息允许Eclipse更新管理器来定位公布的更新,并且发现新的关联的feature。这样的发布在某个web目录下的更新叫做更新站点。PDE提供了向导和编辑器来支持feature和更新站点的开发。
如果你开发整个应用程序而不止是插件和feature,需要已有的基于Eclipse的产品的安装,你需要使用产品配置编辑器(Product Configuration editor)和产品导出向导(Eclipse Product export wizard),把你的应用作为一个独立的Eclipse产品。这个高级主题可以独立成为一篇文章了。
结论
Eclipse是一个伟大的工具和胖客户端应用平台,不单提供了它的免费开放组件,页提供了它自身的开放实现。在Eclipse中,所有功能都封装成插件,它们一个个使用良定义的扩展点结合在一起。它的PDE提供了功能强大的工具和向导来帮助你开发你自己的插件。更重要的是,它提供了整个环节的开发支持,包括分发和后期产品维护。
