Eclipse插件开发二:初识hello word的配置信息

在之前的文章中,我们创建了一个例子,现在我们来认识这个例子。
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 复制代码
<?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.定义命令

xml 复制代码
<!--定义命令-->
<!--
	在 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

即命令和处理器,是存在关联的。

xml 复制代码
<!--定义命令处理器-->
<!--
	在 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中,放一个快捷键。

xml 复制代码
<!--定义快捷键-->
<!--
	在 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.定义菜单

跟定义快捷键一个意思,就是在菜单栏定义一个菜单。

xml 复制代码
<!--定义菜单-->
<!--
	在 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 插件开发中用于处理命令的基类。

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 中定义的抽象方法,必须被实现。这个方法在命令被触发时调用。
	@Override
	public Object execute(ExecutionEvent event) throws ExecutionException {
		//获取当前工作窗口
		IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
		//弹出信息对话框
		MessageDialog.openInformation(
				window.getShell(),
				"Hello",
				"Hello, Eclipse world");
		return null;
	}
}

相信到这里,你应该差不多了解开发eclipse的插件。

相关推荐
即将进化成人机4 分钟前
springboot项目创建方式
java·spring boot·后端
教练、我想打篮球12 分钟前
117 javaweb servlet+jsp 项目中修改了 数据库连接配置, 却怎么都不生效
java·servlet·jdbc·jsp
你不是我我14 分钟前
【Java 开发日记】我们来说一说 Redis IO 多路复用模型
java·开发语言·redis
SadSunset16 分钟前
(13)复杂查询
java·笔记·架构·mybatis
浩瀚地学17 分钟前
【Java】ArrayList
java·开发语言·经验分享·笔记
阿杰同学25 分钟前
Java 设计模式 面试题及答案整理,最新面试题
java·开发语言·设计模式
这样の我25 分钟前
java 模拟chrome指纹 处理tls extension顺序
java·开发语言·chrome
Genevieve_xiao30 分钟前
【数据结构与算法】【xjtuse】面向考纲学习(下)
java·数据结构·学习·算法
4311媒体网32 分钟前
php和c++哪个更好学?C++难学吗?
java·c++·php
毕设源码-朱学姐37 分钟前
【开题答辩全过程】以 基于SpringBoot的流行音乐网站的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端