最近一段时间学习了一下idea的插件开发相关,一起也写了一个自己的插件,方便自己在工作中运用。写的时分发现idea插件国内的资料也不太多,所以计划写一篇整理一下插件开发的要点

1.全体介绍

从业务开发视点来讲,我以为idea插件能够分为两部,一部分为可视化窗口,一部分为扩展点和监听器完成(需装备在plugin.xml中)

1.1文件目录介绍

doc-demo
├── build.gradle   //gradle装备文件,详解看下面
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle  //项目称号
└── src
├── main
│   ├── java
│   └── resources
│       └── META-INF  
│           └── plugin.xml
└── test
├── java
└── resources

进行扩展点监听器等的装备,全体装备demo如下

<!-- url 是可选的,会在页面显现插件的home -->
<idea-plugin url="https://example.com/my-plugin-site">
  <!--
  插件的仅有id,应该设置为全限定称号,不能和其它插件抵触,
  在更新插件版别的时分,不能修改id,
  假如不设置,会运用name(不引荐) 
  -->
  <id>com.example.myplugin</id>
  <!--  插件称号  -->
  <name>My Framework Support</name>
  <!-- 插件版别,能够去 https://jubianchi.github.io/semver-check 查看自己的版别号是否合规  -->
  <version>1.0.0</version>
    <!-- 作者信息,url是作者homepage -->
  <vendor
      url="https://plugins.jetbrains.com/my-company"
      email="contact@example.com">My Company</vendor>
  <!--
  收费插件需求用到,免费插件不需求装备,也能够在收费插件中设置免费功用,了解更多查看 https://plugins.jetbrains.com/build-and-market
  -->
  <product-descriptor
      code="PMYPLUGIN"
      release-date="20210901"
      release-version="20211"
      optional="true"/>
  <!-- 约束idea版别,在idea哪些版别中能够运用,能够不设置,默许跟 build.gradle中界说的intellij.version的约束相同 -->
  <idea-version since-build="193" until-build="193.*"/>
  <!--
  idea的介绍,能够运用html标签,假如运用html标签,必须用 <![CDATA[ ]]> 包装 ,了解更多 https://plugins.jetbrains.com/docs/marketplace/plugin-overview-page.html#plugin-description
  -->
  <description>
  <![CDATA[
    Provides support for <a href="https://example.com/my-framework">My
    Framework</a>.
    <p>Includes support for:
    <ul>
      <li>code completion</li>
      <li>references</li>
      <li>refactoring</li>
    </ul>
    </p>
  ]]>
  </description>
    <!-- 描述新版别的功用,能够运用html标签,假如运用html标签,必须用 <![CDATA[ ]]> 包装  -->
  <change-notes>Initial release of the plugin.</change-notes>
    <!--为IDE指定需求依靠的其它插件或模块 ,假如目标IDE不包括该依靠,插件不能正常运转-->
  <depends>com.intellij.modules.platform</depends>
  <depends>com.example.third-party-plugin</depends>
    <!--可选的,假如安装了com.example.my-second-plugin插件,mysecondplugin.xml(格式和plugin.xml一样)装备才会加载 -->
  <depends
      optional="true"
      config-file="mysecondplugin.xml">com.example.my-second-plugin</depends>
  <!--
  加载装备文件,下面装备表明 /messages/MyPluginBundle.properties 会被加载,  "action.[ActionID].text|description" 中的ActionID能够运用,
  https://www.ideaplugin.com/idea-docs/Part%20I%20%E6%8F%92%E4%BB%B6/PluginStructure/Extension%20Points.html#%E7%A4%BA%E4%BE%8B 中的 带 @Attribute注解的成员变量也能够用 
  -->
  <resource-bundle>messages.MyPluginBundle</resource-bundle>
  <!--
  界说扩展点,其它插件能够经过这个扩展点来供给某些数据
  https://www.ideaplugin.com/idea-docs/Part%20I%20%E6%8F%92%E4%BB%B6/PluginStructure/Extension%20Points.html
  -->
  <extensionPoints>
    <extensionPoint
        name="testExtensionPoint"
        beanClass="com.example.impl.MyExtensionBean"/>
    <applicationService
        serviceImplementation="com.example.impl.MyApplicationService"/>
    <projectService
        serviceImplementation="com.example.impl.MyProjectService"/>
  </extensionPoints>
  <!--
  Application-level 运用级的监听器. 
  https://www.ideaplugin.com/idea-docs/Part%20I%20插件/PluginStructure/Listeners.html#注册运用级-application-level-监听器
  -->
  <applicationListeners>
    <listener
        class="com.example.impl.MyListener"
        topic="com.intellij.openapi.vfs.newvfs.BulkFileListener"/>
  </applicationListeners>
  <!--
 Project-level 项目级的监听器. 
  https://www.ideaplugin.com/idea-docs/Part%20I%20插件/PluginStructure/Listeners.html#注册项目级-project-level-监听器
  -->
  <projectListeners>
    <listener
        class="com.example.impl.MyToolwindowListener"
        topic="com.intellij.openapi.wm.ex.ToolWindowManagerListener"/>
  </projectListeners>
  <!--
  Actions 操作. 了解更多,请看:
  https://www.ideaplugin.com/idea-docs/Part%20II%20%E2%80%94%20Base%20Platform/Actions/
  -->
  <actions>
    <action
        id="VssIntegration.GarbageCollection"
        class="com.example.impl.CollectGarbage"
        text="Collect _Garbage"
        description="Run garbage collector">
      <keyboard-shortcut
          first-keystroke="control alt G"
          second-keystroke="C"
          keymap="$default"/>
    </action>
  </actions>
    <!--  自界说扩展   https://www.ideaplugin.com/idea-docs/Part%20I%20%E6%8F%92%E4%BB%B6/PluginStructure/Extensions.html  -->
  <extensions defaultExtensionNs="VssIntegration">
    <myExtensionPoint implementation="com.example.impl.MyExtensionImpl"/>
  </extensions>
</idea-plugin>

1.2可视化窗口

可视化窗口是基于java的swing进行开发,idea支撑可视化拖拽,或者自界说完成

可视化界面

idea插件开发基础介绍

自界说完成

idea插件开发基础介绍

1.3扩展点&监听器

扩展点&监听器就是用来处理窗口展现和业务逻辑的地方,例如将窗口展现在编译器界面的右侧 则需求完成ToolWindowFactory接口

idea插件开发基础介绍
并在对于的plugin.xml中进行装备

idea插件开发基础介绍
即可将对于的窗体显现到编译器上

idea插件开发基础介绍
idea官网对一切的监听器或者扩展点的功用没有进行太多介绍,这点需求自己额定费点心思。但是com.intellij.generalEditorOptionsExtension – IntelliJ Platform Explorer | JetBrains Marketplace idea供给了一切扩展点和监听器对应的开源项目集合,能够在其中找到你需求的完成的扩展点或者监听器的实例

2.项目的创立

idea引荐运用gradle进行开发,所以我运用的也是gradle进行开发

2.1 运用Gradle向导创立项目

idea插件开发基础介绍

idea插件开发基础介绍

2.2 拉取github官方插件模板

idea插件开发基础介绍
两种方式不管哪种,都能够快速创立插件开发模板

最后

引荐一个idea中文开发文档地址,翻译的仍是比较具体的

概览 | idea插件开发文档 (ideaplugin.com)