在之前的文章中,我们创建了一个例子,现在我们来认识这个例子。
Eclipse插件开发一:hello word
以下是目录结构,主要有一个java类,一个MANIFEST.MF配置,一个plugin.xml配置
1.MANIFEST.MF
MANIFEST.MF 文件的主要作用是提供插件的元数据,使得 Eclipse 平台能够正确加载和管理插件。它定义了插件的基本信息、依赖关系和执行环境要求,确保插件在运行时能够找到所需的资源和其他插件。
通过MANIFEST.MF中配置的这些信息,Eclipse 可以在启动时识别插件,处理插件之间的依赖关系,并确保在合适的 Java 环境中运行插件。
通过查看MANIFEST.MF代码信息,我们可以看到完整的配置信息
以下是各配置的介绍。
java">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><extensionpoint="org.eclipse.ui.commands"><categoryid="com.hutao.hello.commands.category"name="Sample Category"></category><commandcategoryId="com.hutao.hello.commands.category"name="Sample Command"id="com.hutao.hello.commands.sampleCommand"></command></extension><extensionpoint="org.eclipse.ui.handlers"><handlerclass="com.hutao.hello.handlers.SampleHandler"commandId="com.hutao.hello.commands.sampleCommand"></handler></extension><extensionpoint="org.eclipse.ui.bindings"><keycommandId="com.hutao.hello.commands.sampleCommand"schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"contextId="org.eclipse.ui.contexts.window"sequence="M1+6"></key></extension><extensionpoint="org.eclipse.ui.menus"><menuContributionlocationURI="menu:org.eclipse.ui.main.menu?after=additions"><menuid="com.hutao.hello.menus.sampleMenu"label="Sample Menu"mnemonic="M"><commandcommandId="com.hutao.hello.commands.sampleCommand"id="com.hutao.hello.menus.sampleCommand"mnemonic="S"></command></menu></menuContribution><menuContributionlocationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions"><toolbarid="com.hutao.hello.toolbars.sampleToolbar"><commandid="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
-->
<extensionpoint="org.eclipse.ui.commands"><categoryid="com.hutao.hello.commands.category"name="Sample Category"></category><commandcategoryId="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这个类将处理对应的命令
-->
<extensionpoint="org.eclipse.ui.handlers"><handlerclass="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)
-->
<extensionpoint="org.eclipse.ui.bindings"><keycommandId="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 扩展点中定义了菜单和工具栏
-->
<extensionpoint="org.eclipse.ui.menus"><!--在菜单中添加了一个命令,允许用户通过菜单执行 sampleCommand--><menuContributionlocationURI="menu:org.eclipse.ui.main.menu?after=additions"><menuid="com.hutao.hello.menus.sampleMenu"label="Sample Menu"mnemonic="M"><commandcommandId="com.hutao.hello.commands.sampleCommand"id="com.hutao.hello.menus.sampleCommand"mnemonic="S"></command></menu></menuContribution><!--在工具栏中添加了一个命令按钮,带有图标和提示信息--><menuContributionlocationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions"><toolbarid="com.hutao.hello.toolbars.sampleToolbar"><commandid="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 插件开发中用于处理命令的基类。
java">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 中定义的抽象方法,必须被实现。这个方法在命令被触发时调用。@Overridepublic Object execute(ExecutionEvent event) throws ExecutionException {//获取当前工作窗口IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);//弹出信息对话框MessageDialog.openInformation(window.getShell(),"Hello","Hello, Eclipse world");return null;}
}
相信到这里,你应该差不多了解开发eclipse的插件。