赞
踩
工欲善其事必先利其器,虽然IntelliJ IDEA的功能已经足够的强大,但是也无法满足开发人员想要的一切功能。对于此,IDEA提供了API接口供开发者进行插件开发扩展,但目前来说,网上对于IDEA插件开发的文档大多讲的不是很清楚,自己最近也开发了一个IDEA插件,中间踩了不少坑,在此总结下。
一般来说,开发人员开发的IntelliJ平台插件主要分为如下几类:
IDEA中提供的用于进行插件开发的接口非常多,本文主要介绍几个开发时常见的接口和类。
目前来说,IDEA插件开发有两种模式,第一种是直接在IDEA中创建插件开发的项目,第二种是使用Gradle来构建Intellij插件。下面两种方式都会介绍下:
创建plugin项目:
这时就完成了插件项目的创建,如下所示:
可以看到创建出的project非常的简单,仅在META-INF文件夹中有一个plugin.xml配置文件~plugin.xml配置文件会在后面具体介绍。
Gradle的好处就不多说了,已经完全占领了Android的构建编译。使用Gradle来构建Intellij插件需要添加官方的插件支持。
首选需要创建一个Gradle项目:
创建好的Gradle项目中会出现一堆与Gradle相关的文件夹和文件,这个时候只需要关注build.gradle即可。
这时我们需要在build.gradle中新增相关的依赖,让项目能够支持构建IDEA插件。步骤如下:
1.添加 IntelliJ build plugins仓库地址
plugins {
id 'org.jetbrains.intellij' version '0.3.1'
}
2.使用IntelliJ IDEA的插件
apply plugin: "org.jetbrains.intellij"
apply plugin: 'java'
apply plugin: 'idea'
3.设置运行插件的IntelliJ的版本以及沙箱地址
intellij {
version = '2017.3' //调试我们插件的版本
sandboxDirectory = project.rootDir.canonicalPath + "/.sandbox" //插件生成的临时文件的地址,可以省略
}
设置好了后,登陆Gradle构建成功即可
4.需要在resources目录下新建META-INF/plugin.xml文件。即完成了插件项目的构建
1.对于IDEA创建的插件项目在运行时需要创建一个plugin的运行方式,如下图所示:
创建好了后需要配置两个参数,如下所示:
2.对于使用Gradle编译的插件项目,需要创建gradle的运行方式,如下图所示:
创建好后参数配置为:
选择相应的project,Tasks为 :runIde
IDEA插件的工程创建完毕后,都会在META目录下创建一个plugin.xml文件,对Android开发比较熟悉的同学可以将它理解为AndroidMainFest.xml,里面定义了一些组件、事件等需要注册的内容。
一个新创建好的项目中plugin.xml的内容为:
?xml version="1.0" encoding="UTF-8"?>
<idea-plugin>
<id>com.your.company.unique.plugin.id</id>
<name>Plugin display name here</name>
<vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor>
<version>1.0.0</version>
<description><![CDATA[
Enter short description for your plugin here.<br>
<em>most HTML tags may be used</em>
]]></description>
<category>Tools Integration</category>
<!-- 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>
-->
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
<idea-version since-build="162.00"/>
<extensions defaultExtensionNs="com.intellij">
<!-- Add your extensions here -->
</extensions>
<actions>
<!-- Add your actions here -->
</actions>
<change-notes><![CDATA[
]]>
</change-notes>
</idea-plugin>
在这里说明下上面的 plugin.xml 中出现的几个名词
<application-components>
<component>
<implementation-class>com.test.Application</implementation-class>
</component>
</application-components>
<project-components>
<component>
<implementation-class>com.test.Project</implementation-class>
</component>
</project-components>
<module-components>
<component>
<implementation-class>com.test.Module</implementation-class>
</component>
</module-components>
插件里有三个可选的组建可以创建, 他们分别是Application level components,Project level components,Module level components.
这3个组件的相应实现类需要分别实现ApplicationComponent接口、ProjectComponent接口和ModuleComponent接口,分别需要实现相应的initComponent()和disposeComponent()方法
需要注意的是, Application 级别的 initComponent 只会执行一次, Project 和 Module 级别的 init 和 Dispose 函数会根据项目工程的变化而被多次调用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。