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的插件。

相关推荐
J不A秃V头A3 小时前
自定义SqlSessionFactory时mybatis-config.xml失效
java·开发语言
静水楼台x4 小时前
Java中json的一点理解
java·后端·json
晴空๓4 小时前
如何查看特定版本的Spring源码
java·spring boot·spring
Yeats_Liao5 小时前
Java List过滤 Stream API filter() 应用
java·开发语言·list
阿昊真人5 小时前
ESP8266 AP模式 网页配网 arduino ide
ide·github
qingy_20465 小时前
【算法】图解二叉树的前中后序遍历
java·开发语言·算法
macrozheng5 小时前
Jenkins+Docker一键打包部署项目!步骤齐全,少走坑路!
java·spring boot·后端·docker·jenkins
天航星5 小时前
VSCode 使用默认profile打开文件
ide·vscode·编辑器
!!!5256 小时前
MyBatis-增删改查操作&一些细节
java·数据库·spring boot·mybatis
azhou的代码园6 小时前
基于Java+SpringBoot+Vue的前后端分离的体质测试数据分析及可视化设计
java·vue.js·spring boot