最小插件

我们都知道在不使用任何用户界面或其他框架的情况下, “Hello World”在使用普通的旧的 Java 时的外观。

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

在 Eclipse 平台的上下文中,此旧标准发生了哪些变化?我们不将 Hello World 看作是独立的程序,而是将它改造为平台的扩展。由于我们想要对全世界问好,因此,需要了解如何扩展工作台以包含我们的问候。

当我们深入了解平台用户界面组件时, 我们将详尽地考察可以用来扩展和定制工作台 UI 的方法。现在,让我们从其中一个最简单的工作台扩展 — 视图开始。

可以将工作台窗口看作是用来提供各种可视部件的框架。这些部件分为两个主要类别:视图和编辑器。我们稍后再考察编辑器。视图提供关于用户正在工作台中使用的一些对象的信息。当用户选择工作台中的不同对象时,视图通常就会更改它们的内容。

Hello world 视图

对于 hello world 插件,我们将实现自己的视图,以便用“Hello World”来向用户问好。

org.eclipse.ui 和它的子包中包含用来定义工作台用户界面(UI)API 的公用接口。这些接口中的许多接口都具有缺省实现类, 可以扩展这些类以便对系统提供简单的修改。在 hello world 示例中,我们将扩展工作台视图,以提供一个用来问好的标号。

很重要的一个接口就是 IViewPart, 它定义向工作台添加视图而必须实现的方法。类 ViewPart 提供了此接口的缺省实现。简而言之,视图部件负责创建显示视图所必需的小窗口。

工作台中的标准视图通常显示有关用户已经选择或者正在浏览的对象的一些信息。视图根据工作台中发生的操作来更新它们的内容。在我们的示例中,只是问好,所以我们的视图非常简单。

package org.eclipse.examples.helloworld;

import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;

import org.eclipse.ui.part.ViewPart;



public class HelloWorldView extends ViewPart {
    Label label;
    public HelloWorldView() {
    }
    public void createPartControl(Composite parent) {
        label = new Label(parent, SWT.WRAP);
        label.setText("Hello World");
    }
    public void setFocus() {
        // 将焦点设置为我的小窗口。对于标号,
        // 这没有多大意义,但对于较为复杂的小窗口集而言,
        // 您需要决定哪个小窗口获得焦点。
    }

}

视图部件创建将在 createPartControl 方法中呈示的小窗口。在此示例中,我们将创建 SWT 标号,并在其中设置“Hello World”文本。

我们已经完成了编程部分!可以编译新类(不要忘记应确保在 IDE 或者编译器环境中可以看见平台 JAR 文件,以便您可以编译插件), 但是仍然需要了解如何运行新视图。

新视图应为如下所示:

如何将此视图添加到平台中?

hello world 插件

需要通知平台我们想要添加视图。这是通过扩展 org.eclipse.ui.views 视图扩展点来完成的。通过提供清单文件 plugin.xml 注册扩展, 该清单文件描述插件,包括插件的代码所在的位置以及正在添加的扩展。

<?xml version="1.0" ?>
<plugin
    name="Hello World Example" 
    id="org.eclipse.examples.helloworld"
    version="1.0"
    provider-name="Object Technology International, Inc.">
    <requires>
        <import plugin="org.eclipse.ui" />
    </requires>
    <runtime>
        <library name="helloworld.jar" />
    </runtime>
    <extension point="org.eclipse.ui.views">
        <category 
            id="org.eclipse.examples.helloworld.hello"
            name="Hello" />
        <view 
            id="org.eclipse.examples.helloworld.helloworldview"
            name="Hello Greetings"
            category="org.eclipse.examples.helloworld.hello"
            class="org.eclipse.examples.helloworld.HelloWorldView" />
    </extension>
</plugin>

在此文件中,为插件定义了名称(name)、 标识(id)、版本(version)和供应商名称(provider-name)。

还列示了我们必需的插件。由于我们在插件中使用了工作台和 SWT API,因此必须列示 org.eclipse.ui。还必须描述我们的可执行代码所在位置。在我们的示例中,会将代码封装在 helloworld.jar 中。

最后,声明插件正向哪个扩展点进行添加。org.eclipse.ui.views 扩展具有几个不同的配置参数。复查已经在清单中指定的参数。

首先为视图扩展声明类别。在工作台显示视图对话框中,可以使用类别来将相关视图集中在一起。我们定义了自己的类别“Hello”,以便使它显示在它自己的组中。

为我们的视图声明了唯一的标识,并指定用来提供视图的实现的的名称。还为视图指定了名称“Hello Greetings”, 它将显示在“显示视图”对话框和视图的标题栏中。

插件标识

在插件清单文件中使用了许多标识。个别扩展点通常会定义需要标识的配置参数 (例如,以上用于视图扩展点的类别标识)。我们还要定义插件标识。通常,应该对所有标识都使用 Java 包名前缀, 以便确保所有已安装的插件都是唯一的。

在前缀后面使用的特定名称完全由您自己决定。然而,如果插件标识前缀刚好与其中一个包的名称相同, 则应该避免在该包中使用类名。 否则,将很难分辨您正在查看标识名还是类名。

还应该避免对不同的扩展配置参数使用相同的标识。在上述清单中,已经使用了公共标识前缀(org.eclipse.examples.helloworld), 但是,我们的所有标识都是唯一的。此命名方法可以帮助我们阅读文件并了解哪些标识是相关的。