idea插件开发
前两天遇到一个好玩的事,我的前前前。。。公司的同事,做了一个他们的软件产品介绍的直播,然后中间他有用到ecplise自定义了插件,做一个文件的转换,看起来好像挺好玩的。于是我就想,idea市面上也有很多的插件,我也想自己做一个玩玩。说干就干,开搞,菜鸡就是爱玩!!!
一:idea插件和jdk版本问题
idea更新迭代频率还是挺高的,基本每个月都会有更新,所以我们在开发idea插件时,jdk也会有所要求。
本人配置如下:
idea:2022.2.1;jdk:11.0.16.1
二:开发前准备
在idea本身的插件管理中,安装:Plugin DevKit;
具体操作:左上角File->Setting->Plugins,搜索plugin dev就能看到对应的插件,直接安装插件(有些idea是已经自动安装了这个插件的)。

讯享网
三:创建插件项目
具体操作:
1)File->New->Project…,
2)选择IDE Plugin(某些版本的idea是IDE Platform Plugin)
3)输入项目名称(例如:ideaPlugin),选择项目路径,Type选择Plugin,语言选择Java;
Group和Artifact自己定义,基本和spring项目一致。
4)JDK版本选择,按照上面的要求选择JDK11(如果版本不匹配,会报错)


四:项目配置
idea Plugin的项目是有Gradle管理的,并不是maven。所以在项目创建完成后,需要下载一个Gradle;在项目打开构建时,idea会自动帮你执行下载,但是应该需要翻墙的,所以下载会很慢,甚至失败。(就算翻墙了,有时候idea下载依然很慢,气死!!!)
下面提供一个手动下载的方法
1)找到项目的gradle目录下的gradle-wrapper.properties文件,直接复制distributionUrl的路径,然后在浏览器中直接访问这个路径下载(记得去掉\,并确保你的网络能正常访问这个地址。);
2)下载至本地之后,在文件夹中打开


3)然后,复制.zip文件,放入gradle的默认文件夹中;一般是在
C:\Users\xxx\.gradle\wrapper\dists\gradle-7.5-bin
讯享网
,其中xxx为当前的Windows用的名称;


至此,gradle安装完成!
4)重新加载一下gradle项目。找到gradle操作框(如果之前有打开过maven项目,应该和maven的操作位置一样),点击Reload All Gradle Projects,等待gradle项目构建完成(和maven加载依赖类似)。

五:项目结构搭建
具体操作如下:
1)点击:File->Project Structure…

2)左侧选择SDKs,点击+号,选择Add Intellij Platform plugin SDK…

3)选择当前idea安装目录

4)点击ok,弹出sdk选择框,选择sdk11

点击ok,然后apply。
六:插件开发
插件功能类创建,两种方案:
方案一
在src.main.java.com.xxx包中,右键New->Plugin DevKit->Action;按照如图所示,输入自己的相关内容。



方案二:
1)手动新建一个Java class,然后继承AnAction,然后重写actionPerformed()方法;比如:FileConvertorAction类,

2)找到resource.META-INF目录下的plugin.xml文件,在actions节点中,新建一个action(可以配置多个)节点,配置内容如下:
讯享网<idea-plugin> <!-- 其他配置项... --> <actions> <action id="com.win.FileConvertorAction" class="com.win.FileConvertorAction" text="File convertor" description="excel file convert to other files"> <!-- 指定父节点 action 或 action group 被添加到的位置 --> <add-to-group group-id="HelpMenu" anchor="first"/> </action> <!-- 其他action配置项... --> </actions> </idea-plugin>
七:插件功能开发
在XXXAction类中的actionPerformed方法中,完成自己想要的功能:
public class Hello extends AnAction { @Override public void actionPerformed(AnActionEvent e) { Project project = e.getData(PlatformDataKeys.PROJECT); String txt= Messages.showInputDialog(project, "What is your name?", "Question", Messages.getQuestionIcon()); Messages.showMessageDialog(project, "Hello, " + txt + "!\nI am glad to see you.", "Information", Messages.getInformationIcon()); } }
八:运行并调试插件
1)右上角直接启动,


2)项目启动后,会新打开一个idea的窗口(如果是第一次调试,会出现idea刚安装打开时的界面,会让你选择创建项目,或者打开项目等),选择open一个文件或者项目(这个不重要,关键是打开idea窗口);
3)点击Action新建时的菜单位置(我选择的是File),此时对应菜单下就会出现我们自定义的插件按钮名称(中文有可能乱码,后面给出解决方案)



这样,就完成了一个简单的插件功能。
九:其他问题
1)乱码问题:在build.gradle.kts中找到以下内容,并添加 options.encoding = “UTF-8”
讯享网tasks { // Set the JVM compatibility versions withType<JavaCompile> { //输出字符集 options.encoding = "UTF-8" //其他配置 sourceCompatibility = "11" targetCompatibility = "11" }
2)gradle添加依赖问题:在build.gradle.kts中找到以下内容,并添加对应的依赖,
dependencies { implementation("org.projectlombok:lombok:1.18.22") implementation("com.alibaba:easyexcel:3.3.2") }
我这里添加了lombok和easyExcel的依赖,其他的依赖参照上面的写好即可,然后Reload All Gradle Project;
3)插件开发完成后,安装至自己的idea:
1.在idea功能菜单中,Build->Build Project(如果已经调试过,应该已经build好了,可用跳过);

2.在项目的build.libs文件夹中,找到对应的jar包

3.将jar拷至自己电脑某个文件夹中(我直接放在桌面);

4.然后File->Setting->Plugins->Install Plugin from Disk

5.选择刚刚复制出来的插件jar包,点击ok;然后在Installed里面,就能看到刚刚自己开发的插件plugin


6.点击apply;然后等待idea自动加载完成。然后就能在当前的idea窗口看到插件了。

至于怎么删除插件,就不用我多说了吧!
十:插件上传
1)访问https://plugins.jetbrains.com/
2)登录,使用github账号或者其他支持的方式
3)上传插件,点击自己的用户名,选择Upload plugin

选择自己的插件jar包,

License选择apache 2.0

源码地址、标签、通道自己更具实际情况选择。
最后点击上传,等待审核完成即可!
注:待解决问题
插件控制台打印中文,出现了乱码,哭死!!!
尝试过以下方案:
1)修改Custorm VM Options,在里面添加
讯享网-Dfile.encoding=UTF-8


2)File->Setting->File Encondings;修改Project Enconding

3) 启动配置项:VM Options 添加配置(大小写都试过)
-Dfile.encoding=utf-8

Action源码
讯享网public class FileConvertorAction extends AnAction { @Override public void actionPerformed(@NotNull AnActionEvent anActionEvent) { Project project = anActionEvent.getData(PlatformDataKeys.PROJECT); if (project != null) { JPanel panel = new JPanel(); // 创建文件选择框描述符 FileChooserDescriptor descriptor = new FileChooserDescriptor(true, false, false, false, false, false); descriptor.setTitle("请选择一个文件!"); //过滤文件 descriptor.withFileFilter(file -> { String extension = file.getExtension(); return extension != null && (extension.equals("xls") || extension.equals("xlsx") || extension.equals("XLS") || extension.equals("XLSX")); }); // 添加文件选择框到面板 VirtualFile[] virtualFiles = FileChooser.chooseFiles(descriptor, project, null); for (VirtualFile virtualFile : virtualFiles) { try { ExcelReaderBuilder read = EasyExcel.read(virtualFile.getInputStream()); String name = virtualFile.getName(); System.out.println(" =======>>>>>>> you select a file :"+name); Messages.showMessageDialog(project,"你选择了:"+name,"tips",Messages.getInformationIcon()); } catch (IOException e) { throw new RuntimeException(e); } JLabel label = new JLabel(virtualFile.getPath()); panel.add(label); } // 显示带有文件选择框的自定义弹窗 Messages.wrapToScrollPaneIfNeeded(panel,6,6); } } }
运行效果


控制台打印

望大佬指点。。。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/20641.html