技术专栏丨小插件大用途,带你走进IDE插件的世界

Posted TalkingData

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技术专栏丨小插件大用途,带你走进IDE插件的世界相关的知识,希望对你有一定的参考价值。

1
      前言     


工欲善其事,必先利其器!如果将开发者比做沙场上的战士,那么 IDE 就是战士手中的兵刃,重要程度可想而知,如果 IDE 挑选合适,不仅能让你得心应手,而且还可以事半功倍。

好的 IDE 在开发过程中会为你提供全方外的支持,例如针对于项目方面的:创建、编译、构建和部署等,编码方面的:关键字高亮、语法提示、错误警告、代码自动生成和重构等,以及其它很多方面的帮助。但 IDE 所能做的工作远不仅如此,为了最大限度的发挥自身价值,提供了插件平台,允许第三方在遵循插件平台集成条款的前提下,使用插件平台对外提供的能力,扩展出更广泛更丰富的功能。这一点上 IntelliJ IDEA 做的非常不错,目前插件数量商业版的已经达到3000,社区版的2800多,内容涉及了方方面面,至此,插件平台不单单是一个平台,而更像一个生态圈,在这个生态圈里面 IntelliJ、第三方和开发者共赢。


说了这么多,其实就想告诉你一点:小小的插件,大大的用途。如果你有兴趣,请跟随我的脚步一起走进 IDEA 的插件世界。


2
插件安装方式

插件在 IDEA 中的通过下面两种方式安装:

1、直接通过 IDEA 内置界面安装

技术专栏丨小插件大用途,带你走进IDE插件的世界

2、安装本地已下载的 IDEA 插件

之后通过 Preference > Plugins > Install plugin form disk 安装;

成功安装插件后,需要重启 IDEA。

3
插件文件结构

插件的文件格式是zip,zip内必须包含插件配置文件 META-INF/plugin.xml,在 plugin.xml 中必须定义插件的名称、描述、版本以及实现的扩展功能等,下面就是插件的文件结构:

技术专栏丨小插件大用途,带你走进IDE插件的世界

4
  插件组件  

组件是插件集成的基本概念,在 IDEA 中定义了三种不同级别的组件:

1、Application level components:应用级别组件

技术专栏丨小插件大用途,带你走进IDE插件的世界IDEA 在首次启动时会创建该实例,接下来不管启动多少 IDEA 项目,都会共享唯一实例,可以通过:

ApplicationManager.getApplication().getComponent(Class<ApplicationComponent> aClass) 

获取该实例。

2、Project level components:项目级别组件

技术专栏丨小插件大用途,带你走进IDE插件的世界

启动一个 IDEA 项目就会创建一个实例,项目之间不共享,模块之间共享,可以通过当前 Project 实例方法:

getComponent(Class<ApplicationComponent> aClass) 

获取该实例。

3、Module level components:模块级别组件

技术专栏丨小插件大用途,带你走进IDE插件的世界

IDEA 的项目自身可能包含多个模块,那么项目启动时,每个模块会创建一个实例,项目之间、模块之间不共享,可以通过 ModuleManager 根据当前 Project 实例获取:

ModuleManager.getInstance(project).getModules()

5
   插件扩展   

IDEA 插件平台定义了扩展和扩展点的概念,通过扩展和扩展点,插件与IDEA之间的交互成为可能,不仅如此,还可以与其它插件进行交互。

  • 扩展点

提供插件的同时,如果允许其它插件扩展,必须声明扩展点,针对每个扩展点定义匹配的类或接口。

  • 扩展

扩展 IDEA 平台本身的功能,必须声明一个或多个扩展。

在下面的一幅图中我列举了 IDEA 平台本身的扩展,仅供参考:

技术专栏丨小插件大用途,带你走进IDE插件的世界

6
插件动作:Action


IDEA 中菜单栏项目的选择或工具栏按钮的点击,会通过命令模式创建 AnAction 派生类的实例,之后调用派生实例的 actionPerformed 方法。通过 Action 系统你还可以扩展 IDEA 的主菜单、项目菜单、编辑器菜单和工具栏,将插件功能加入其中。

7
插件配置文件:plugin.xml

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>


8
      后续     

在接下来的章节中我们会跟大家分享:快速的开发 IDEA 插件,如果你已经仔细的阅读上面的内容,熟知 IDEA 插件的基本概念,相信开发插件绝非难事。


推荐阅读:





更多技术专栏文章,请点击阅读原文

以上是关于技术专栏丨小插件大用途,带你走进IDE插件的世界的主要内容,如果未能解决你的问题,请参考以下文章

瞄一眼,带你走进SparkSQL的世界

基于JDK11的javaSE,带你走进全新的java世界概述

(深入篇)漫游语音识别技术—带你走进语音识别技术的世界

云原生技术分享 | 带你走进RocketMQ的世界

漫游语音识别技术——带你走进语音识别技术的世界

一个"收纳箱"带你走进数据库的世界