从 0 编写自己的第一款 IDEA 插件!
写Java代码的时候,经常会涉及到重复性的操作,这个时候就会想要是有这样一个插件就好了,如果是大家都会遇到的场景,IDE或许已经提供了,再不然也有可能有人编写了相关的插件。
要是这个操作是你们的编码环境特有的,那就只能自己写工具了。所以这里来学学如何编写IDEA插件,让自己的编程环境更加强大,更好的进行装逼。
开发环境
开发IDEA插件有以下这些依赖:
IntelliJ IDEA Community Edition
IntelliJ IDEA Community Edition 源码
Plugin DevKit 插件
IntelliJ Platform SDK
安装IntelliJ IDEA Community Edition
你可能已经安装了Ultimate版本,但是你还是需要安装IDEA的社区版本。因为商业版是闭源的,所以在调试时无法调试核心代码。
下载IntelliJ IDEA Community Edition源码
社区版的安装包里是不包含源码的,所以我们需要手动从github上clone一份:
git clone --depth 1 git://git.jetbrains.org/idea/community.git idea
关于从源码运行IDEA的方法参考 Check Out And Build Community Edition:
http://www.jetbrains.org/intellij/sdk/docs/basics/checkout_and_build_community.html
添加IDEA jdk
虽然不知道原因,但是根据Check Out And Build Community Edition:
http://www.jetbrains.org/intellij/sdk/docs/basics/checkout_and_build_community.html
我们需要建立一个IDEA jdk
来运行插件:
除非你在Mac上使用官方JDK,否则你需要手动添加/lib/tools.jar
到classpath中。关注微信公众号:互联网架构师,在后台回复:8,可以获取我整理的干货。
配置IntelliJ Platform SDK
打开File | Project Structure
新建一个IntelliJ Platform SDK
:
Java SDK选择我们刚刚建立的IDEA jdk
:
然后我们可以把下载的IDEA社区版源码添加到源码路径中,这样在调试时,就可以调试IDEA自身的代码了:
第一个插件
我们来编写一个最简单的插件来学习编写一个插件的完整步骤。
新建工程
选择IntellJ Platform Plugin
,然后Project SDK指定刚刚新建的plugin sdk:
新建的插件项目:
插件根目录下有两个目录src
和resources
。src
是插件代码目录,resource
是插件资源目录,其中META-INF/plugin.xml
是插件的描述文件,就像Java web项目的web.xml
一样。
plugin.xml默认的内容如下:
<idea-plugin> <id>com.your.company.unique.plugin.id</id> <name>Plugin display name here</name> <version>1.0</version> <vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor> <description><!\[CDATA\[ Enter short description for your plugin here.<br> <em>most HTML tags may be used</em> \]\]></description> <change-notes><!\[CDATA\[ Add change notes here.<br> <em>most HTML tags may be used</em> \]\]> </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> --> <extensions defaultExtensionNs="com.intellij"> <!\-\- Add your extensions here --> </extensions> <actions> <!\-\- Add your actions here --> </actions> </idea-plugin>
新建一个Action
插件扩展IDEA最常见的方式就是在菜单栏或者工具栏中添加菜单项,用户通过点击菜单项来触发插件功能。IDEA提供了AnAction
类,这个类有一个虚方法actionPerformed
,这个方法会在每次菜单被点击时调用。
新建一个自定义的Action有两个步骤:
继承
AnAction
类,在actionPerformed
方法中实现插件逻辑注册action,有两种方式,通过代码注册和通过
plugin.xml
注册
我们先写一个简单的Action类:
publicclass TextBoxes extends AnAction { // 如果通过Java代码来注册,这个构造函数会被调用,传给父类的字符串会被作为菜单项的名称 // 如果你通过plugin.xml来注册,可以忽略这个构造函数 public TextBoxes() { // 设置菜单项名称 super("Text _Boxes"); // 还可以设置菜单项名称,描述,图标 // super("Text _Boxes","Item description",IconLoader.getIcon("/Mypackage/icon.png")); } public void actionPerformed(AnActionEvent event) { Project project = event.getData(PlatformDataKeys.PROJECT); String txt= Messages.showInputDialog(project, "What is your name?", "Input your name", Messages.getQuestionIcon()); Messages.showMessageDialog(project, "Hello, " \+ txt + "!\\n I am glad to see you.", "Information", Messages.getInformationIcon()); }
}
然后我们在plugin.xml
中注册这个Action:
<actions> <group id="MyPlugin.SampleMenu" text="_Sample Menu" description="Sample menu"> <add-to-group group-id="MainMenu" anchor="last" /> <action id="Myplugin.Textboxes"class="Mypackage.TextBoxes" text="Text _Boxes" description="A test menu item" /> </group>
</actions>
这里我们新建了一个菜单组,其中text字符串的下划线表示这个字母作为快捷键。这个菜单显示的效果如下:
除了手动新建Action,IDEA还提供了快速新建的方法,在代码目录上点击新建,可以看到Action:
可以在这个面板中填写你要新建的Action信息,IDEA会帮你新建类,还有在plugin.xml中帮你注册:
运行插件
运行插件特别简单,和运行普通Java代码一样,点击运行或者调试的按钮,就会启动一个新的IDEA实例,这个实例中插件是生效的。
点击Text Boxes就可以看到插件的效果了。
来源:木杉的博客 http://imushan.com/
关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。
猜你喜欢
1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结
2、如何才能成为优秀的架构师?
3、从零开始搭建创业公司后台技术栈
4、程序员一般可以从什么平台接私活?
5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...
6、滴滴业务中台构建实践,首次曝光
7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事
8、15张图看懂瞎忙和高效的区别
9、2T架构师学习资料干货分享
从 0 编写自己的第一款 IDEA 插件!相关推荐
- 在idea中新建的text文件_开发属于自己的第一款 IDEA 插件!
往期热门文章: 1.<往期精选优秀博文都在这里了!>2.又一个程序员跑路删库跑路被抓了,导致服务器瘫痪 36 个小时!3.恕我直言,有了这款 IDEA 插件,你可能只需要写 30% 的代码 ...
- idea 2020.2 如何设置classpath_开发属于自己的第一款IDEA插件!
作者:木杉 http://imushan.com/ 写Java代码的时候,经常会涉及到重复性的操作,这个时候就会想要是有这样一个插件就好了,如果是大家都会遇到的场景,IDE或许已经提供了,再不然也有可 ...
- 我的第一款 Drone 插件
女主宣言 本文的作者为奇舞团前端工程师怡红公子,他是高人气开源博客平台 Firekylin (over 1.2k Stars) 的作者,今天他分享的是基于 Nodejs 编写一个 Telegram 消 ...
- 小米2s Android pie,Android 9.0 Pie正式版发布,小米MIX 2S率先升级,国内第一款!
2018-8-8 12:22 [天极网手机频道]期待已久的的Android 9.0正式版终于到来,对应的甜品名称也正式揭晓--Android 9.0 Pie(派).与往年一样,谷歌亲儿子Pixel系列 ...
- 上缘星天V1.0——第一款统计命理学软件
"上缘星天"是世界上第一款公开发布的统计命理学软件,可以对大量出生日期[时间]的隐含特征进行批量统计分析.其界面简洁,易学易用,独特的数据挖掘引擎,使其可以对数以亿万计的出生日期[ ...
- 如何从0到1打造一款AI产品?
2019-11-04 15:56:32 随着AI技术的不断发展,我们看到有越来越多成功的AI产品被研发出来,它们有效地改善了人们的生活与工作.在这样的背景下,AI产品设计正在成为一项重要的技能,被人们 ...
- 我决定开发自己的第一款iPhone应用
为更好地掌握编程,我决定开发自己的第一款iPhone应用. 我是一名设计师和前端开发者,曾用服务器端编程语言(PHP)写过一些程序,不但会使用Ruby.PHP等语言,还从更高层次了解了这些语言.但遗憾 ...
- 我开发的第一款HTML5游戏《驴子跳》
转自 http://www.iteye.com/topic/1122395 经过两个多月断断续续的开发,我的第一款游戏<驴子跳>终于完成了,此时,我已经迫不及待地想跟大家分享这个过程, ...
- Spring Boot(1)——开发你的第一款Spring Boot应用(Edition1)
Spring Boot(1)--开发你的第一款Spring Boot应用(Edition1) 准备工作: java:java 8 或者 java 9: Spring框架:5.0.8.RELEASE或以 ...
- 浅谈Unity与VR产业,用Unity开发第一款VR应用
部分内容为整合与装载 浅谈VR VR(Virtual Reality的缩写,中文翻译-虚拟现实)概念早在80年代初就被提出来的,其具体是指借助计算机及最新传感器技术创造的一种崭新的人机交互手段. 中国 ...
最新文章
- ip classless作用
- Java 中日期的几种常见操作 —— 取值、转换、加减、比较
- 用蛾子触角当天线,用气味导航!美国博士发明奇特生物技术无人机
- oracle 拆分逗号转行_一个列用逗号隔开,列转行,看看是否有更好的办法。
- 部署SAP UI5应用到ABAP服务器时,Webcontent path的determine逻辑
- ES5-12 【utils】继承深入、call、apply、圣杯模式、模块化
- git完全cli指南之详细思维导图整理分享
- EJB - 无状态SessionBean简单示例
- python输出100到200的素数_python输出2到100之间的素数
- C# interview questions--- 国外大公司c#技术面试必看(总结贴一)
- delphi listbox 使用
- SpringBoot集成Dubbo+Zookeeper
- 几个非常实用性的在线学习Ethical Hacking的网站
- 使用vcpkg安装numcpp与opencv4[contrib,world]
- 民建李汉宇:运用大数据为监察体制改革插上科技翅膀
- Java10-I/O
- H5 集成微信自定义分享(兼容 ios android)
- 9,kubernetes-Helm及其他功能性组件
- NVM详细安装及使用
- 【网络编程】Linux tcpdump命令详解---编辑中
热门文章
- VIM问题合集(持续更新)
- [翻译] 用 CSS 背景混合模式制作高级效果
- 境外自助游服务平台澳乐网获戈壁千万级投资
- OA选型案例:建筑行业选型华天OA系统
- 错误代码: 1005 Can't create table 'hibernate.bill' (errno: 150)
- 进制之间的转换(转)
- 单/多文档的窗体类属性修改(VC_MFC)
- 基于WinForm的多语言开发之界面加载
- hdu 3466 Proud Merchants
- Mac 麦克风不工作?6 种修复方法