初识Intellij 插件开发

本文详细介绍了如何利用IntelliJ社区版本的源码进行插件开发,从下载源码、编译环境搭建,到Action和Extension的实现,旨在帮助开发者突破社区不成熟的问题,提供一个高效的学习路径。

走进IDE的世界

做Intellij插件开发是个比较麻烦的事,最大的问题就是社区不成熟,而插件开发本来也是松散的知识点居多,所以难免让人觉得举步维艰。

比较好的参考资料是JetBrains官方的文档,但是内容仍然太少,如果想只依靠它开发,那是有相当的难度。

所幸Intellij的community版本是开源的,这就表示:**其实你可以通过看源码来了解如何开发!**这听起来有点疯狂,但是如果付出足够的时间,这可能是最有效的方法。

编译community代码

Intellij-community的源码在https://github.com/JetBrains/intellij-community。没什么技巧,clone下来就可以了。这是个艰难的过程,我是半夜挂了一晚才下载好的。

下载好源码,还需要编译才能使用。先git tag选择一个合适的版本,例如idea/129.1521,这是截止本文时候,IDEA 12的最新版。

然后用Ant编译之:ant。过程依然很漫长。

使用Intellij开发插件

编译完成,先不着急。这个编译好的Intellij会作为容器,这是我们开发插件的运行环境。但是我们插件的开发环境,我们依然可以使用平时使用顺手的Intellij版本。之后新编译好的community为SDK,并附加上源码,此时就可以顺畅的开发了。

Intellij SDK一览

Intellij SDK由一系列依赖组成。Intellij里集成了一些常用的开源库,例如guava,httpclient,netty等等,而插件开发相关主要的API在openapi.jar里。openapi的结构是按照功能模块组织的,相应的概念比较多,但是大部分都不算太复杂。

开发第一个插件

这里还是推荐一下官方的一个demo,是一个基于生成基于Guava API的compare方法的工具:

视频: http://blog.jetbrains.com/idea/2012/12/webinar-recording-live-coding-a-plugin-from-scratch/

代码: https://github.com/yole/comparisonChainGen

Action

其实初学插件开发,80%时间都在做一件事:寻找扩展点。

例如我要在菜单里加一个button,那么这个button按照什么规范写,放到什么地方?

Action是Intellij插件的入口,它可能是一个button,一个菜单项等等。用户操作了这部分控件,就会触发Action。开发第一个Action很简单,实现AnAction接口即可。Action的入口有一个Group,Group可以理解为插件留给其他插件的扩展点,每个group有一个group-id。例如菜单有Menu,工具栏有MainToolBar,等等。可惜这些个文档不太全,怎么办呢?

这个时候源码就派上用场的了。假设我们想要在工具栏添加一个按钮,但是我们不知道group-id。那么可以先随便添加一个id,然后debug,不出意外就抛出异常了,然后我们通过断点,顺藤摸瓜,找到可用的Group,再分析可能的group-id,然后测试,如此往复…

Extension

如果说Action是主动触发的扩展点,那么Extension则是在插件的运行过程中,被动插入的扩展点。

例如execution模块负责Java程序的启动和debug,它预留了扩展点java.programPatcher,用于在启动之前,修改启动参数。

<extensions defaultExtensionNs="com.intellij">
     <java.programPatcher implementation="com.dianping.idea.mocksocks.MocksocksRunPatcher"/>
  </extensions>

就写到这吧,Intellij 插件开发资料实在太少,做东西有点艰难,写个文章记录一下。

转载于:https://my.oschina.net/flashsword/blog/204095

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值