在之前的文章中,我们创建了一个例子,现在我们来认识这个例子。
Eclipse插件开发一:hello word
以下是目录结构,主要有一个java类,一个MANIFEST.MF配置,一个plugin.xml配置
1.MANIFEST.MF
MANIFEST.MF 文件的主要作用是提供插件的元数据,使得 Eclipse 平台能够正确加载和管理插件。它定义了插件的基本信息、依赖关系和执行环境要求,确保插件在运行时能够找到所需的资源和其他插件。
通过MANIFEST.MF中配置的这些信息,Eclipse 可以在启动时识别插件,处理插件之间的依赖关系,并确保在合适的 Java 环境中运行插件。
通过查看MANIFEST.MF代码信息,我们可以看到完整的配置信息
以下是各配置的介绍。
Manifest-Version: 1.0
指定了清单文件的版本,通常为 1.0。
Bundle-ManifestVersion: 2
指定了该插件的清单版本。版本 2 是 OSGi(开放服务网关倡议)规范的一部分,表示该插件支持 OSGi 的特性。
Bundle-Name: Hello
插件的名称,通常用于用户界面中显示。
Bundle-SymbolicName: com.hutao.hello;singleton:=true
插件的符号名称,唯一标识该插件。singleton:=true 表示该插件是单例的,即在同一时间只能有一个实例。
Bundle-Version: 1.0.0.qualifier
插件的版本号,通常遵循语义版本控制(MAJOR.MINOR.PATCH)。qualifier 表示该版本可能是一个开发版本或快照版本。
Bundle-Vendor: HUTAO
插件的供应商信息,通常是开发者或组织的名称。
Require-Bundle: org.eclipse.ui
指定该插件所依赖的其他插件。在这里,org.eclipse.ui 是一个必需的依赖,表示该插件需要 Eclipse UI 插件才能正常工作。
Automatic-Module-Name: com.hutao.hello
指定了自动模块名称,用于 Java 9 及以上版本的模块系统。这使得该插件可以作为一个模块被其他模块引用。
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
指定了插件所需的执行环境为Java SE 1.8
在里面,我们经常进行使用的一个配置是Require-Bundle,这里用来管理我们开发中所用到的依赖。例如这个案例中,用到了org.eclipse.ui。
在边选择add按钮,即可添加对应的依赖进去(这个依赖是eclipse开发集成环境提供的,如果你要的依赖不在这里面,则需要你单独引入你的依赖)
2.plugin.xml
以下是完整代码,第一看,看是挺懵的,看着挺多。其实很好理解,整个配置文件主要分成了4部分。分别是命令、处理器、快捷键、菜单。也就是下面刚好有四个extension。
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="org.eclipse.ui.commands">
<category
id="com.hutao.hello.commands.category"
name="Sample Category">
</category>
<command
categoryId="com.hutao.hello.commands.category"
name="Sample Command"
id="com.hutao.hello.commands.sampleCommand">
</command>
</extension>
<extension
point="org.eclipse.ui.handlers">
<handler
class="com.hutao.hello.handlers.SampleHandler"
commandId="com.hutao.hello.commands.sampleCommand">
</handler>
</extension>
<extension
point="org.eclipse.ui.bindings">
<key
commandId="com.hutao.hello.commands.sampleCommand"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
contextId="org.eclipse.ui.contexts.window"
sequence="M1+6">
</key>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="menu:org.eclipse.ui.main.menu?after=additions">
<menu
id="com.hutao.hello.menus.sampleMenu"
label="Sample Menu"
mnemonic="M">
<command
commandId="com.hutao.hello.commands.sampleCommand"
id="com.hutao.hello.menus.sampleCommand"
mnemonic="S">
</command>
</menu>
</menuContribution>
<menuContribution
locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
<toolbar
id="com.hutao.hello.toolbars.sampleToolbar">
<command
id="com.hutao.hello.toolbars.sampleCommand"
commandId="com.hutao.hello.commands.sampleCommand"
icon="icons/sample.png"
tooltip="Say hello world">
</command>
</toolbar>
</menuContribution>
</extension>
</plugin>
2.1.定义命令
<!--定义命令-->
<!--
在 org.eclipse.ui.commands 扩展点中定义了一个命令
定义命令:Sample Command
定义命令的所属类别:Sample Category
-->
<extension
point="org.eclipse.ui.commands">
<category
id="com.hutao.hello.commands.category"
name="Sample Category">
</category>
<command
categoryId="com.hutao.hello.commands.category"
name="Sample Command"
id="com.hutao.hello.commands.sampleCommand">
</command>
</extension>
2.2.定义处理器
所谓处理器,就是定义一个类来处理我们上面定义的命令。例如,上述我们定义的命令唯一标识:com.hutao.hello.commands.sampleCommand,这个命令被触发的时候,将会调用这个类com.hutao.hello.handlers.SampleHandler
即命令和处理器,是存在关联的。
<!--定义命令处理器-->
<!--
在 org.eclipse.ui.handlers 扩展点中注册了一个处理器类,即SampleHandler类
并且SampleHandler这个类将处理对应的命令
-->
<extension
point="org.eclipse.ui.handlers">
<handler
class="com.hutao.hello.handlers.SampleHandler"
commandId="com.hutao.hello.commands.sampleCommand">
</handler>
</extension>
2.3.定义快捷键
就是将我们定义的命令,在eclipse中,放一个快捷键。
<!--定义快捷键-->
<!--
在 org.eclipse.ui.bindings 扩展点中定义了一个快捷键
指定了与 sampleCommand 相关联的快捷键,这里是 M1+6(通常表示 Ctrl + 6)
-->
<extension
point="org.eclipse.ui.bindings">
<key
commandId="com.hutao.hello.commands.sampleCommand"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
contextId="org.eclipse.ui.contexts.window"
sequence="M1+6">
</key>
</extension>
快捷按钮 Ctrl + 6
2.4.定义菜单
跟定义快捷键一个意思,就是在菜单栏定义一个菜单。
<!--定义菜单-->
<!--
在 org.eclipse.ui.menus 扩展点中定义了菜单和工具栏
-->
<extension
point="org.eclipse.ui.menus">
<!--在菜单中添加了一个命令,允许用户通过菜单执行 sampleCommand-->
<menuContribution
locationURI="menu:org.eclipse.ui.main.menu?after=additions">
<menu
id="com.hutao.hello.menus.sampleMenu"
label="Sample Menu"
mnemonic="M">
<command
commandId="com.hutao.hello.commands.sampleCommand"
id="com.hutao.hello.menus.sampleCommand"
mnemonic="S">
</command>
</menu>
</menuContribution>
<!--在工具栏中添加了一个命令按钮,带有图标和提示信息-->
<menuContribution
locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
<toolbar
id="com.hutao.hello.toolbars.sampleToolbar">
<command
id="com.hutao.hello.toolbars.sampleCommand"
commandId="com.hutao.hello.commands.sampleCommand"
icon="icons/sample.png"
tooltip="Say hello world">
</command>
</toolbar>
</menuContribution>
</extension>
下图结果为快捷键
下图结果为菜单。
3.SampleHandler
下面的这个类的主要功能是在 Eclipse 中执行一个命令时弹出一个信息对话框。
AbstractHandler,这是 Eclipse 插件开发中用于处理命令的基类。
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.jface.dialogs.MessageDialog;
public class SampleHandler extends AbstractHandler {
//execute 方法是 AbstractHandler 中定义的抽象方法,必须被实现。这个方法在命令被触发时调用。
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
//获取当前工作窗口
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
//弹出信息对话框
MessageDialog.openInformation(
window.getShell(),
"Hello",
"Hello, Eclipse world");
return null;
}
}
相信到这里,你应该差不多了解开发eclipse的插件。