技术专栏丨小插件大用途,带你走进IDE插件的世界
Posted TalkingData
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技术专栏丨小插件大用途,带你走进IDE插件的世界相关的知识,希望对你有一定的参考价值。
工欲善其事,必先利其器!如果将开发者比做沙场上的战士,那么 IDE 就是战士手中的兵刃,重要程度可想而知,如果 IDE 挑选合适,不仅能让你得心应手,而且还可以事半功倍。
好的 IDE 在开发过程中会为你提供全方外的支持,例如针对于项目方面的:创建、编译、构建和部署等,编码方面的:关键字高亮、语法提示、错误警告、代码自动生成和重构等,以及其它很多方面的帮助。但 IDE 所能做的工作远不仅如此,为了最大限度的发挥自身价值,提供了插件平台,允许第三方在遵循插件平台集成条款的前提下,使用插件平台对外提供的能力,扩展出更广泛更丰富的功能。这一点上 IntelliJ IDEA 做的非常不错,目前插件数量商业版的已经达到3000,社区版的2800多,内容涉及了方方面面,至此,插件平台不单单是一个平台,而更像一个生态圈,在这个生态圈里面 IntelliJ、第三方和开发者共赢。
说了这么多,其实就想告诉你一点:小小的插件,大大的用途。如果你有兴趣,请跟随我的脚步一起走进 IDEA 的插件世界。
插件在 IDEA 中的通过下面两种方式安装:
之后通过 Preference > Plugins > Install plugin form disk 安装;
成功安装插件后,需要重启 IDEA。
插件的文件格式是zip,zip内必须包含插件配置文件 META-INF/plugin.xml,在 plugin.xml 中必须定义插件的名称、描述、版本以及实现的扩展功能等,下面就是插件的文件结构:
组件是插件集成的基本概念,在 IDEA 中定义了三种不同级别的组件:
1、Application level components:应用级别组件
IDEA 在首次启动时会创建该实例,接下来不管启动多少 IDEA 项目,都会共享唯一实例,可以通过:
ApplicationManager.getApplication().getComponent(Class<ApplicationComponent> aClass)
获取该实例。
启动一个 IDEA 项目就会创建一个实例,项目之间不共享,模块之间共享,可以通过当前 Project 实例方法:
getComponent(Class<ApplicationComponent> aClass)
获取该实例。
IDEA 的项目自身可能包含多个模块,那么项目启动时,每个模块会创建一个实例,项目之间、模块之间不共享,可以通过 ModuleManager 根据当前 Project 实例获取:
ModuleManager.getInstance(project).getModules()
IDEA 插件平台定义了扩展和扩展点的概念,通过扩展和扩展点,插件与IDEA之间的交互成为可能,不仅如此,还可以与其它插件进行交互。
扩展点
提供插件的同时,如果允许其它插件扩展,必须声明扩展点,针对每个扩展点定义匹配的类或接口。
扩展
扩展 IDEA 平台本身的功能,必须声明一个或多个扩展。
在下面的一幅图中我列举了 IDEA 平台本身的扩展,仅供参考:
IDEA 中菜单栏项目的选择或工具栏按钮的点击,会通过命令模式创建 AnAction 派生类的实例,之后调用派生实例的 actionPerformed 方法。通过 Action 系统你还可以扩展 IDEA 的主菜单、项目菜单、编辑器菜单和工具栏,将插件功能加入其中。
plugin.xml 是插件最核心的内容,通过下面的示例说明,你可以了解到 plugin.xml 涉及到的所有层级元素:
注:滑动查看完整代码
1<idea-plugin url="http://www.jetbrains.com/idea">
2
3 <!-- 为你的插件设计一个响亮的名字 -->
4 <name>VssIntegration</name>
5
6 <!-- 插件的唯一标识,一经创建,永不更改,如为空则依据 name 字段 -->
7 <id>VssIntegration</id>
8
9 <!-- 你应该描述下插件具体的功能 -->
10 <description>Vss integration plugin</description>
11
12 <!-- 插件随着版本的不断升级的过程中,所做的更改清单 -->
13 <change-notes>Initial release of the plugin.</change-notes>
14
15 <!-- 插件版本 -->
16 <version>1.0</version>
17
18 <!-- 插件的开发者信息 -->
19 <vendor url="错误! 超链接引用无效。 email="support@jetbrains.com">support@jetbrains.com"/>
20
21 <!-- 依赖插件的唯一标识 -->
22 <depends>MyFirstPlugin</depends>
23 <!-- 可选择的依赖其它插件标识 -->
24 <depends optional="true" config-file="mysecondplugin.xml">MySecondPlugin</depends>
25
26 <!-- 帮助系统支持 -->
27 <helpset file="myhelp.jar" path="/Help.hs"/>
28
29 <!-- 插件适用于 IDEA 的版本区间 -->
30 <idea-version since-build="3000" until-build="3999"/>
31
32 <!-- 插件多语支持 -->
33 <resource-bundle>messages.MyPluginBundle</resource-bundle>
34
35 <!-- 应用级别组件声明 -->
36 <application-components>
37 <component>
38 <interface-class>com.foo.Component1Interface</interface-class>
39 <implementation-class>com.foo.impl.Component1Impl</implementation-class>
40 </component>
41 </application-components>
42
43 <!-- 项目级别组件声明 -->
44 <project-components>
45 <component>
46 <interface-class>com.foo.Component2</interface-class>
47 <implementation-class>com.foo.Component2Impl</implementation-class>
48 <option name="workspace" value="true"/>
49 <loadForDefaultProject/>
50 </component>
51 </project-components>
52
53 <!-- 模块级别组件声明 module components -->
54 <module-components>
55 <component>
56 <interface-class>com.foo.Component3</interface-class>
57 <implementation-class>com.foo.Component3Impl</implementation-class>
58 </component>
59 </module-components>
60
61 <!-- 动作 -->
62 <actions>
63 <action id="VssIntegration.GarbageCollection" class="com.foo.impl.CollectGarbage" text="Collect _Garbage"
64 description="Run garbage collector">
65 <keyboard-shortcut first-keystroke="control alt G" second-keystroke="C" keymap="$default"/>
66 </action>
67 </actions>
68
69 <!-- 扩展点声明 -->
70 <extensionPoints>
71 <extensionPoint name="testExtensionPoint" beanClass="com.foo.impl.MyExtensionBean"/>
72 </extensionPoints>
73
74 <!-- 扩展声明 -->
75 <extensions xmlns="VssIntegration">
76 <testExtensionPoint implementation="com.foo.impl.MyExtensionImpl"/>
77 </extensions>
78</idea-plugin>
在接下来的章节中我们会跟大家分享:快速的开发 IDEA 插件,如果你已经仔细的阅读上面的内容,熟知 IDEA 插件的基本概念,相信开发插件绝非难事。
推荐阅读:
更多技术专栏文章,请点击阅读原文
以上是关于技术专栏丨小插件大用途,带你走进IDE插件的世界的主要内容,如果未能解决你的问题,请参考以下文章