jetBrains 插件开发第一课-- 在主菜单栏新增一个菜单
环境搭建完了,接下来可以开始写代码了:
1、新建 plugin 项目

2、编辑 plugin.xml,修改一下里面的插件名那些信息,该文件的配置项可以看这里:plugin.xml
其中比较关键的有一个是 <depends>com.intellij.modules.platform</depends>,如果不加这个,你点击运行的时候插件可以正常运作,但是打包之后安装却会用不了。
<idea-plugin>
<id>com.eleven24.helloWorld</id>
<name>HelloWorld</name>
<version>1.0</version>
<vendor email="rubymay21s@gmail.com" url="http://www.cnblogs.com/eleven24">YourCompany</vendor> <description><![CDATA[
Hello World Plugin.
]]></description> <change-notes><![CDATA[
first version.
]]>
</change-notes> <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
<idea-version since-build="145.0"/> <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
on how to target different products -->
<!-- uncomment to enable plugin in all products
<depends>com.intellij.modules.lang</depends>
-->
<depends>com.intellij.modules.platform</depends> <extensions defaultExtensionNs="com.intellij">
<!-- Add your extensions here -->
</extensions> <actions>
<!-- Add your actions here -->
</actions> </idea-plugin>
基本的信息如上,下面会添加一些菜单项的配置以及注册插件的配置
3、初始化的方法
package com.eleven24; import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.components.ApplicationComponent;
import org.jetbrains.annotations.NotNull; public class HelloWorldRegistration implements ApplicationComponent {
@NotNull
public String getComponentName() {
return "HelloWorldPlugin";
} public void initComponent() {
ActionManager am = ActionManager.getInstance();
MenuAction menuAction = new MenuAction(); am.registerAction("menuAction", menuAction); DefaultActionGroup windowsM = (DefaultActionGroup) am.getAction("WindowMenu"); windowsM.addSeparator();
windowsM.add(menuAction);
} // Disposes system resources.
public void disposeComponent() {
}
}
4、添加应用组件的配置到 plugin.xml 中,这样 ide 才会知道我们这个插件要做什么
<application-components>
<component>
<implementation-class>com.eleven24.HelloWorldRegistration</implementation-class>
</component>
</application-components>
5、添加一个点击菜单之后的处理方法,需要继承 AnAction 类
package com.eleven24; import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.ui.Messages; public class MenuAction extends AnAction {
@Override
public void actionPerformed(AnActionEvent anActionEvent) {
Messages.showInfoMessage("Hello World!", "First Plugin");
}
}
5、添加菜单,这个的话在 plugin.xml 中配置,同时也要指定该菜单点击之后对应的处理类(上面的menuAction)
我们添加一个组名叫 "HelloWorld" 的菜单组,添加到主菜单栏末尾,然后在其下添加一个名为 "menu action" 的菜单。具体配置如下:
<actions>
<!-- Add your actions here -->
<group id="HelloWorld" text="_HelloWorld">
<add-to-group group-id="MainMenu" anchor="last" />
</group> <action class="com.eleven24.MenuAction" id="menuAction" text="menu action">
<add-to-group group-id="HelloWorld" anchor="first" />
</action>
</actions>
6、到此为止,我们已经完成了菜单的添加,点击右上角的运行按钮可以查看效果,运行的时候会再打开一个 ide,会有点慢。

7、效果图


8、下面是最终的配置文件
<idea-plugin>
<id>com.eleven24.helloWorld</id>
<name>HelloWorld</name>
<version>1.0</version>
<vendor email="rubymay21s@gmail.com" url="http://www.cnblogs.com/eleven24">YourCompany</vendor> <description><![CDATA[
Hello World Plugin.
]]></description> <change-notes><![CDATA[
first version.
]]>
</change-notes> <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
<idea-version since-build="145.0"/> <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
on how to target different products -->
<!-- uncomment to enable plugin in all products
<depends>com.intellij.modules.lang</depends>
-->
<depends>com.intellij.modules.platform</depends> <extensions defaultExtensionNs="com.intellij">
<!-- Add your extensions here -->
</extensions> <actions>
<!-- Add your actions here -->
<group id="HelloWorld" text="_HelloWorld" description="menu group">
<add-to-group group-id="MainMenu" anchor="last" />
<action class="com.eleven24.MenuAction" id="helloWorld.menuAction" text="menu action" />
</group>
</actions> <application-components>
<component>
<implementation-class>com.eleven24.HelloWorldRegistration</implementation-class>
</component>
</application-components> </idea-plugin>
好了,就这么多了。
jetBrains 插件开发第一课-- 在主菜单栏新增一个菜单的更多相关文章
- Spring MVC第一课:用IDEA构建一个基于Spring MVC, Hibernate, My SQL的Maven项目
作为一个Spring MVC新手最基本的功夫就是学会如何使用开发工具创建一个完整的Spring MVC项目,本文站在一个新手的角度讲述如何一步一步创建一个基于Spring MVC, Hibernate ...
- visual Studio 2017 扩展开发(一)《向Visual Studio菜单栏新增一个菜单》
最近有接触到关于visual studio 2017 扩展的开发,特此记录,也是为了督促自己去深入了解其原理. 开始开发Visual Studio 扩展,在这里我安装了visual studio 20 ...
- NeHe OpenGL教程 第一课:OpenGL窗口
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Python之路第一课Day6--随堂笔记(面向对象 )
本节内容: 1. 面向对象编程介绍 2. 为什么要用面向对象进行开发? 3. 面向对象的特性:封装.继承.多态 4. 类.方法 一.面向过程 VS 面向对象 1. 编程范式 编程是 程序 员 用 ...
- Octave Tutorial(《Machine Learning》)之第一课《数据表示和存储》
Octave Tutorial 第一课 Computation&Operation 数据表示和存储 1.简单的四则运算,布尔运算,赋值运算(a && b,a || b,xor( ...
- Android入门第一课之Java基础
通知:由于本周六场地申请没通过,所以本周的培训临时取消. 今天给大家带来的是Android入门的第一课,由于教室申请的不确定性,因此,每次培训的内容都会在博客先提前释放出来.首先Android的APP ...
- vue.js学习(第一课)
学习资料 来自台湾小凡! vue.js是javascript的一个库,只专注于UI层面,核心价值永远是 API的简洁. 第一课: 不支持IE8. 1.声明式渲染: el元素的简称 element : ...
- Magento学习第一课——目录结构介绍
Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...
- <-0基础学python.第一课->
初衷:我电脑里面的歌曲很久没换了,我想听一下新的歌曲,把他们下载下来听,比如某个榜单的,但是一首一首的点击下载另存为真的很恶心 所以我想有没有办法通过程序的方式来实现,结果还真的有,而且网上已经有有人 ...
随机推荐
- 高可用Kubernetes集群-3. etcd高可用集群
五.部署高可用etcd集群 etcd是key-value存储(同zookeeper),在整个kubernetes集群中处于中心数据库地位,以集群的方式部署,可有效避免单点故障. 这里采用静态配置的方式 ...
- day02——作业讲解
# 设定⼀个理想数字⽐如:66,让⽤户输⼊数字,如果⽐66⼤,则显示猜测# 的结果⼤了:如果⽐66⼩,则显示猜测的结果⼩了;只有等于66,显示猜测结果# 正确,然后退出循环 #升级版# 可以帮我们生成 ...
- leetcode个人题解——#43 Multiply Strings
思路:高精度乘法就可以了. 有两个错误以前没在意,1.成员属性定义时候不能进行初始化, vector<); 这样隐性调用了函数进行初始化的形式特别要注意,也是错误的: 2.容器类只有分配了空间时 ...
- UI优秀框架(库)
1.vux 官网:https://doc.vux.li/zh-CN/ Github:https://github.com/airyland/vux 13818 Stars 3064 Forks ...
- 3.Airflow使用
1. airflow简介2. 相关概念2.1 服务进程2.1.1. web server2.1.2. scheduler2.1.3. worker2.1.4. celery flower2.2 相关概 ...
- loadrunner处理https请求
录制到的脚本如下: login() { lr_think_time(10); web_url("verifycode.jsp", "URL=https://192.168 ...
- wireshark解析https协议方法
本文仅介绍通过协商密钥的方式实现https解析的方法 wireshark支持pem
- 20181113-7 Beta阶段第1周/共2周 Scrum立会报告+燃尽图 04
作业要求:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2386] 版本控制:[https://git.coding.net/lglr2 ...
- 《Linux内核与分析》第四周
20135130王川东 一.用户态.内核态和中断处理过程 CPU的几种不同的执行级别: 高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种执行级别对应内核态: 低级别执行状态下,代码的掌握范 ...
- hdu 5524
由于是完全二叉树,所以我们可以预先知道整棵树的形状,因此可以判断根节点的两个子节点哪个是满二叉树,哪个不是满二叉树(必然是一边满,一边不满),对于满的子节点,我们可以直接求出它的不同子树的个数,也就是 ...