Intellij IDEA插件开发指南
一、开发背景
因为项目需求,接口开发需要注册服务到数据库。原始的注册是有一个小工具,但是该工具只支持window系统,没有mac版的。所以每次使用都需要开虚拟机,使用非常不方便。于是萌生了自己开发一个小工具的想法。
起初的想法是开发一个独立的工具,有自己的页面,后来一想,有些麻烦,且mac和windows不能兼容,且最近有看到lombok的使用,所以就想仿着写一块服务注册插件。
二、参考资料
官方资料:IntelliJ Platform SDK DevGuide
参考博文:
1、干货|IntelliJ IDEA插件开发
2、IntelliJ IDEA插件开发入门教程(一)
三、开发环境
开发工具:InterlliJ Platform Plugin
- 下载开源代码intellij-community
- 配置jdk,mac版配置路径:File->Platform Setting->SDKs->+
- 创建第一个HelloWorld工程
工程目录结构
|-projectName
|------src
|-------resources
|---------META-INF
|---------plugin.xml
新建一个java类继承com.intellij.openapi.actionSystem.AnAction
源码如下:
package com.jetbrains.action;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import java.util.HashMap;
import java.util.Map;
public class HelloWorldAction extends AnAction {
@Override
public void actionPerformed(AnActionEvent e) {
Project project=e.getData(PlatformDataKeys.PROJECT);
// String name=project.getName();
// String virtualFile=project.getProjectFile().getUrl();
// String basePath=project.getBasePath();
// String projectFilePath=project.getProjectFilePath();
// Map<String,String> map=ImmutableMap.of("name",name,"virtualFile",virtualFile,"basePath",basePath,"projectFilePath",projectFilePath);
Map<String,String> map=new HashMap<String,String>();
String title="标题";
Messages.showMessageDialog(project,map.toString(),title, Messages.getInformationIcon());
}
}
plugin.xml增加配置
<idea-plugin>
<id>com.your.company.unique.plugin.id</id>
<name>CsfPlagin</name>
<version>1.0</version>
<vendor email="11111@yourcompany.com" url="http://www.yourco1mpany.com">Asiainfo</vendor>
<description><![CDATA[
Enter short description foryour plugin here.<br>
<em>most HTML tags may be use</em>
]]></description>
<change-notes><![CDATA[
Add change notes he .<br>
<em>most HTML tags may be used</em>
]]>
</change-notes>
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
<idea-version since-build="173.0"/>
<!-- 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>
-->
<extensions defaultExtensionNs="com.intellij">
<!-- Add your extensions here -->
</extensions>
<actions>
<group id="MyPlugin.SampleMenu" text="Greeting" description="Greeting menu">
<add-to-group group-id="MainMenu" anchor="last"/>
<action id="Myplugin.Textboxes" class="com.jetbrains.HelloAction" text="Hello" description="Says hello"/>
</group>
<action class="com.jetbrains.action.GenateSqlAction" id="genateSqlAction1" text="genateAction">
<add-to-group group-id="EditorPopupMenu" anchor="first"/>
</action>
<action class="com.jetbrains.action.GenateUipSqlAction" id="genateSqlAction2" text="genateUipAction">
<add-to-group group-id="EditorPopupMenu" anchor="first" />
</action>
</actions>
</idea-plugin>
plugin.xml配置项介绍:
- id name description 这些不再赘述。
- actions配置所有的操作菜单
- MainMenu 是主菜单,和File,Help等菜单同级
- add-to-group下配置的是该group的子菜单
- EditorPopupMenu 是在代码区右键的弹出菜单
- 所有的菜单列表可以在resources.jar PlatformActions.xml下查看
- anchor 设置菜单所在位置,末尾,首位等。
插件编译打包
Bulid->Prepare All plugin Modules For Deployment
编译完成后,在工程第一级目录下有一个ProjectName.jar 或者ProjectName.zip 。
如果没有引入其他jar包,打出的plugin 后缀名为.jar ,否则就是.zip
安装插件
Preferences->plugins->Setting(设置图标,不同版本展示不同)->Install plugin from Disk->选中ProjectName.jar/.zip ->确认->重启
效果
在主菜单可以看到一个Greeting的菜单项,点击有一个Hello子菜单项
四、总结
-
该SDK不能使用maven来管理工程,因此引入其他jar包只能手动引入。
-
未完待续。