插件开发教程1

1,562 阅读5分钟

作为码农,手里的工具一定要用的熟练。通过对IDEA的插件的开发,可以编写一些符合自己习惯的插件,提高开发效率。基本的IDEA插件开发其实很简单,掌握很少的知识就可以完成一些不错的功能的开发。本文介绍怎么配置插件开发环境,我在配置插件开发环境的时候按照网上找的教程总是运行不起来,所以记录一下我的搭建过程。

IDEA插件开的两种模式

在开发之前需要特别注意一下IDEA的版本号,我使用的是2020.3.4的社区版本。

  • 使用Gradle开发

我在搭建Gradle环境时花费了很多时间。因为Gradle构建过程中会访问一些国外的资源,国内访问很慢,我们可以通过一些方法减少下载时间。首先创建一个Gradle插件项目

clipboard.png

问题1

项目创建完成后在我的环境里并不能直接启动。

1.png

点击重新构建后会报错

Could not resolve all artifacts for configuration ‘:classpath‘.

这个问题基本都是因为源访问不到导致的。

解决办法

我在build.gradle文件里增加了源的配置

repositories { 
    mavenCentral() 
    jcenter(){ url 'https://jcenter.bintray.com/'} 
}

再次点击重新构建就不会报这个错了(有时候会报访问超时的错,或者其他莫名其妙的错,多点几次重新构建大部都可以解决),但是会遇到问题2。

问题2

创建好项目之后,gradle会以项目根目录下的build.gradle文件进行构建,在第一次进行构建时可能会非常慢,它会去下载一个叫ideaIC-2020.3.4.zip和ideaIC-2020.3.4-sources.jar的文件,这两个文件一个500多M,一个100多M。下载不仅慢还经常下载失败。

解决方法

我们可以直接使用浏览器下载这两个文件(速度比IDEA快很多),然后再将文件放进资源目录下就可以跳过下载的步骤。可以在 www.jetbrains.com/intellij-re…查找需要的依赖文件。

例如,我要找的版本是 ideaIC-2020.3.4 ,所以我需要先找到2020.3.4版本再下载 ideaIC.pom,ideaIC.zip两个文件(页面较长,可以直接搜索com.jetbrains.intellij.idea快速跳转)。然后将文件放入Gradle的资源目录里。

[gradle根目录]\caches\modules-2\files-2.1\

我们知道Gradle将资源文件下载到这个文件夹下。我们进入到这个文件夹下可以看到这下面和maven的仓库一样有很多资源

2.png

ideaIC-2020.3.4 这个文件会放在com.jetbrains.intellij.idea文件夹下,

3.png

这些文件夹的命名规则是sha1码值,可以通过git的sha1sum.exe命令求得

4.png

也可以通过这个网站直接获得 d2cico3c979uwg.cloudfront.net/com/jetbrai…

5.png 之后把下载好的两个文件分别放在对应的目录里,然后点击重新构建,就可以解决Gradle构建下载慢的问题了

6.png

亲身经历,有时候ideaIC-2020.3.4-sources.jar文件即使按照上述步骤操作了gradle还是会去下载源文件。这个时候如果你需要看源码的话只能等它下载完成,这个过程大概一两个小时就可以了,只有100多M,只要下载一次,下次就不需要等了。如果你不想等,可以在build.gradle文件里加上downloadSources = false配置,gradle就不会下载源码。

intellij { 
    version = '2020.3.4' 
    downloadSources = false 
}

然后运行runIde就可以了。

使用DevKit开发

使用DevKit开发会比Gradle开发更简单快捷,不需要联网。首先要做的是配置SDK,这个SDK和我们常用的JAVASDK不是一种。需要新建一个专门用于插件的SDK,在新建SDK页面选最后一个。

7.png

可以直接使用我们的IDEA当作插件开发SDK

8.png

配置好了以后就可以新建项目了

9.png

新建项目后注意这个文件,如果要上传到git的时候,这个文件也是要上传的。要不然在别的机器上打开的时候无法构建项目。

10.png

使用Devkit开发没有对依赖包的管理方式(Gradle开发方式有),如果我们需要用到第三方依赖包,需要手工导入。例如这个项目,用到了commons lang包,可以放到自建的lib目录下

11.png

然后在project structure里配置好即可。

12.png

两种开发模式的区别

在开源社区里很多插件都是用Gradle开发的,使用Gradle开发对依赖管理会比较方便,不需要像用Devkit开发一样手动管理依赖。使用Devkit开发的好处就是不用Gradle那么麻烦,如果只是为了开发自己的插件,用Devkit开发更好用。

Hello World

环境准备好后我们可以开始helloworld的学习。idea插件开发的helloworld版本在网上有很多但最好还是通过jetbrains官方的例子来学习。官方例子在github地址如下:

github.com/JetBrains/i…

我们从最简单的Action Basics这个项目开始学习,通过下面的gif图可以看出这个项目可以实现弹出一个弹出框显示你现在所选择的文件名的功能。

action.gif

Action Basics 项目plugin.xml文件的关键配置如下

13.png

可以看到实现上面的功能需要配置action,官方文档对action的描述是

14.png

我理解成action是最简单的触发器就可以了。在action的配置里有几点是需要注意的。

  1. id必须是唯一的
  2. class是我们自己的实现类,description是文本描述,icon是图标
  3. add-to-group 标签表明的是这个action要加在Tools的工具栏下
  4. override-text 标签负责控制显示标签的文字Pop Dialog Action
  5. keyboard-shortcut 与mouse-shortcut 控制快捷键

我们再看一下实现类org.intellij.sdk.action.PopupDialogAction。该类有两个主要的方法

15.png

update方法负责控制此action是否可用,是否会显示。

16.png

actionPerformed方法是action的核心方法。通过AnActionEvent获取当前选取到的组件信息。通过Navigatable获取左侧栏的选择信息。通过Message类像UI发送信息。总体来说都是比较好理解的。

插件开发教程2

插件开发教程3