手把手教你5分钟从零开发一款简易的IDEA插件!项目经验/毕设不愁了!
我这个人没事就喜欢推荐一些好用的 IDEA 插件给大家。这些插件极大程度上提高了我们的生产效率以及编码舒适度。
不知道大家有没有想过自己开发一款 IDEA 插件呢?
我自己想过,但是没去尝试过。刚好有一位读者想让我写一篇入门 IDEA 开发的文章,所以,我在周末就花了一会时间简单了解一下。
不过,这篇文章只是简单带各位小伙伴入门一下 IDEA 插件开发,个人精力有限,暂时不会深入探讨太多。如果你已经有 IDEA 插件开发的相关经验的话,这篇文章就可以不用看了,因为会浪费你 3 分钟的时间。
好的废话不多说!咱们直接开始!
01 新建一个基于 Gradle 的插件项目
这里我们基于 Gradle 进行插件开发,这也是 IntelliJ 官方的推荐的插件开发解决方案。
第一步,选择 Gradle 项目类型并勾选上相应的依赖。
第二步,填写项目相关的属性比如 GroupId、ArtifactId。
第三步,静静等待项目下载相关依赖。
第一次创建 IDEA 插件项目的话,这一步会比较慢。因为要下载 IDEA 插件开发所需的 SDK 。
02 插件项目结构概览
新建完成的项目结构如下图所示。
这里需要额外注意的是下面这两个配置文件。
plugin.xml
:插件的核心配置文件。通过它可以配置插件名称、插件介绍、插件作者信息、Action 等信息。
<idea-plugin>
<id>github.javaguide.my-first-idea-plugin</id>
<!--插件的名称-->
<name>Beauty</name>
<!--插件的作者相关信息-->
<vendor email="koushuangbwcx@163.com" url="https://github.com/Snailclimb">JavaGuide</vendor>
<!--插件的介绍-->
<description><![CDATA[
Guide哥代码开发的第一款IDEA插件<br>
<em>这尼玛是什么垃圾插件!!!</em>
]]></description>
<!-- please see https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
on how to target different products -->
<depends>com.intellij.modules.platform</depends>
<extensions defaultExtensionNs="com.intellij">
<!-- Add your extensions here -->
</extensions>
<actions>
<!-- Add your actions here -->
</actions>
</idea-plugin>
build.gradle
:项目依赖配置文件。通过它可以配置项目第三方依赖、插件版本、插件版本更新记录等信息。
plugins {
id 'java'
id 'org.jetbrains.intellij' version '0.6.3'
}
group 'github.javaguide'
// 当前插件版本
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
// 项目依赖
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
// See https://github.com/JetBrains/gradle-intellij-plugin/
// 当前开发该插件的 IDEA 版本
intellij {
version '2020.1.2'
}
patchPluginXml {
// 版本更新记录
changeNotes """
Add change notes here.<br>
<em>most HTML tags may be used</em>"""
}
没有开发过 IDEA 插件的小伙伴直接看这两个配置文件内容可能会有点蒙。所以,我专门找了一个 IDEA 插件市场提供的现成插件来说明一下。小伙伴们对照下面这张图来看下面的配置文件内容就非常非常清晰了。
这就非常贴心了!如果这都不能让你点赞,我要这文章有何用!
03 手动创建 Action
我们可以把 Action 看作是 IDEA 提高的事件响应处理器,通过 Action 我们可以自定义一些事件处理逻辑/动作。比如说你点击某个菜单的时候,我们进行一个展示对话框的操作。
第一步,右键java
目录并选择 new 一个 Action
第二步,配置 Action 相关信息比如展示名称。
创建完成之后,我们的 plugin.xml
的 <actions>
节点下会自动生成我们刚刚创建的 Action 信息:
<actions>
<!-- Add your actions here -->
<action id="test.hello" class="HelloAction" text="Hello" description="IDEA插件入门">
<add-to-group group-id="ToolsMenu" anchor="first"/>
</action>
</actions>
并且 java
目录下为生成一个叫做 HelloAction
的类。并且,这个类继承了 AnAction
,并覆盖了 actionPerformed()
方法。这个 actionPerformed
方法就好比 JS 中的 onClick
方法,会在你点击的时候被触发对应的动作。
我简单对actionPerformed
方法进行了修改,添加了一行代码。这行代码很简单,就是显示 1 个对话框并展示一些信息。
public class HelloAction extends AnAction {
@Override
public void actionPerformed(AnActionEvent e) {
//显示对话框并展示对应的信息
Messages.showInfoMessage("素材不够,插件来凑!", "Hello");
}
}
另外,我们上面也说了,每个动作都会归属到一个 Group 中,这个 Group 可以简单看作 IDEA 中已经存在的菜单。
举个例子。我上面创建的 Action 的所属 Group 是 ToolsMenu(Tools) 。这样的话,我们创建的 Action 所在的位置就在 Tools 这个菜单下。
再举个例子。加入我上面创建的 Action 所属的 Group 是MainMenu (IDEA 最上方的主菜单栏)下的 FileMenu(File) 的话。
<actions>
<!-- Add your actions here -->
<action id="test.hello" class="HelloAction" text="Hello" description="IDEA插件入门">
<add-to-group group-id="FileMenu" anchor="first"/>
</action>
</actions>
我们创建的 Action 所在的位置就在 File 这个菜单下。
04 验收成果
点击 Gradle -> runIde
就会启动一个默认了这个插件的 IDEA。然后,你可以在这个 IDEA 上实际使用这个插件了。
效果如下:
我们点击自定义的 Hello Action 的话就会弹出一个对话框并展示出我们自定义的信息。
05 完善一下
想要弄点界面花里胡哨一下, 我们还可以通过 Swing 来写一个界面。
这里我们简单实现一个聊天机器人。代码的话,我是直接参考的我大二刚学 Java 那会写的一个小项目(当时写的代码实在太烂了!就很菜!)。
首先,你需要在图灵机器人官网申请一个机器人。(其他机器人也一样,感觉这个图灵机器人没有原来好用了,并且免费调用次数也不多)
然后,简单写一个方法来请求调用机器人。由于代码比较简单,我这里就不放出来了,大家简单看一下效果就好。
代码地址:https://github.com/Snailclimb/awesome-idea/tree/master/code/first-idea-plugin 。
06 深入学习
如果你想要深入学习的 IDEA 插件的话,可以看一下官网文档:https://jetbrains.org/intellij/sdk/docs/basics/basics.html 。
这方面的资料还是比较少的。除了官方文档的话,你还可以简单看看下面这几篇文章:
07 后记
我们开发 IDEA 插件主要是为了让 IDEA 更加好用,比如有些框架使用之后可以减少重复代码的编写、有些主题类型的插件可以让你的 IDEA 更好看。
我这篇文章的这个案例说实话只是为了让大家简单入门一下 IDEA 开发,没有任何实际应用意义。如果你想要开发一个不错的 IDEA 插件的话,还要充分发挥想象,利用 IDEA 插件平台的能力。
早起肝文,还要早点出门!觉得不错,大家三连一波鼓励一下这“货”? (纯粹是为了押韵,不容易!年轻人讲啥武德!哈哈哈!)
图解计算机基础+个人原创的 Java 面试手册PDF版下载地址: 链接: https://pan.baidu.com/s/1S5VBDPzFSZO3p5uPNYdMzg 密码: 56bs
手把手教你5分钟从零开发一款简易的IDEA插件!项目经验/毕设不愁了!的更多相关文章
- 手把手教你用Vue2+webpack+node开发一个H5 app
手把手教你用Vue2+webpack+node开发一个H5 app 前一篇vue2 + webpack + node 开发一个小demo说到了用vue的一些基本用法,这一篇就讲一个复杂一点的更完整的 ...
- 手牵手,使用uni-app从零开发一款视频小程序 (系列下 开发实战篇)
系列文章 手牵手,使用uni-app从零开发一款视频小程序 (系列上 准备工作篇) 手牵手,使用uni-app从零开发一款视频小程序 (系列下 开发实战篇) 扫码体验,先睹为快 可以扫描下微信小程序的 ...
- 从零开发一款自己的小程序UI组件库(一)
写在前面:有开发过小程序的朋友肯定知道组件化开发的特性,高内聚与低耦合.使用已有的UI组件库,诸如:vantUI-weapp.minUI-weapp等UI组件库的诞生使我们的开发速度大大的加快,丰富的 ...
- 从零开发一款自己的小程序UI组件库(二)
写在前面:从零开发一款自己的小程序UI组件库(一) 上节我们讲到初始化组件库模板.模板文件概述.模板上传npm以及npm包文件下载至本地并运用到项目.这节我们继续,内容主要有基础UI组件库的搭建(bu ...
- 手把手教你Pytest+Allure2.X定制报告详细教程,给自己的项目量身打造一套测试报告-02(非常详细,非常实用)
简介 前边一篇文章是分享如何搭建pytest+Allure的环境,从而生成一份精美的.让人耳目一新的测试报告,但是有的小伙伴或者童鞋们可能会问,我能不能按照自己的想法为我的项目测试结果量身打造一份属于 ...
- 从零开发一款txt小说下载器
在日常开发中,列表是一个非常常用的一个东西,可以用listview和recyclerview实现.当然,由于recyclerview更为实用且强大,它也是更好的方案. 而我以前为了方便,习惯直接拿网上 ...
- 手牵手,使用uni-app从零开发一款视频小程序 (系列上 准备工作篇)
系列文章 手牵手,使用uni-app从零开发一款视频小程序 (系列上 准备工作篇) 手牵手,使用uni-app从零开发一款视频小程序 (系列下 开发实战篇) 前言 好久不见,很久没更新博客了,前段时间 ...
- 手把手教你写Kconfig---基于tiny4412开发板
转自:http://blog.csdn.net/morixinguan/article/details/54744237 今天,我就来教大家写写最简单的Kconfig,什么是Kconfig? 我们配置 ...
- 手把手教你使用 Spring Boot 3 开发上线一个前后端分离的生产级系统(一) - 介绍
项目简介 novel 是一套基于时下最新 Java 技术栈 Spring Boot 3 + Vue 3 开发的前后端分离的学习型小说项目,配备详细的项目教程手把手教你从零开始开发上线一个生产级别的 J ...
随机推荐
- 白话k8s-Pod的组成
k8s的所有功能都是围绕着Pod进行展开的,我们经常会看到类似这样一张图 告诉我们,Pod是一组container的集合,container之间可以通过localhost:port的方式直接访问. 感 ...
- Deepin v15.11驱动安装问题
最近想用Linux跑深度学习,试了好几个发行版,最终选择了Deepin v15.11,但由于配置比较新,它不能兼容很多驱动,还得自己装,以下是我失败N次后得到的经验: 电脑配置 配置如下: 型号:DE ...
- CountDownLatch(减少计数)
public class Test04 { public static void main(String[] args) throws InterruptedException { CountDown ...
- MFiX-DEM中的串行碰撞搜索
在计算颗粒碰撞的时候,需要进行neighbor颗粒的搜寻,只知道大概是基于网格与颗粒绑定的方式,但是具体的实现方式还是比较模糊.搜寻部分代码如下 (mfix-19.2.2): 可以直接观察到的是,这里 ...
- js逻辑程序
JavaScript 是 Web 的编程语言. 所有现代的 HTML 页面都使用 JavaScript. JavaScript 非常容易学. 本教程将教你学习从初级到高级 JavaScript 知识. ...
- SPI、I2C、I2S、UART、GPIO、SDIO、CAN、JTAG的区别及使用方法。
SPI 全称及由来:SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的. ...
- cookie和webstorage
HTML 5 Web 存储 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 <!DOCTYPE html> <html> ...
- C语言之 Switch和?:运算符的反汇编
Switch条件语句 通过上面一篇了解了条件语句的使用,接下来就直接进行反汇编学习 #include <stdio.h> void print() { int b = 1; switch ...
- SharedPreferences源码分析
分析达成目标 了解基本实现 SharePreferences是否线程安全 SharePreferences的mode参数是什么 了解apply与commit的区别 导致ANR的原因 Android8. ...
- 串口服务器和modbus网关有什么不同
串口服务器是什么? 串口服务器一般也会被称之为串口设备服务器,它是一种小型电子设备,可以将以太网IP/TCP数据包转换为RS232,RS485或RS422串口数据信号,反之亦然. Modbus网关是什 ...