找不到想用的插件?那就自己敲一个!
一、开发工具
下载 IntelliJ IDEA 2021.1.3(最新版2023.1.4的是使用 kotlin开发 + gradle.ktx 管理版本)
二、新建项目
1. new project,选择我们的 IDEA 版本,之后即可新建一个Plugin项目
2. 关键类介绍
- plugin.xml 是关于这个插件工程的描述文件
- *.iml 主要用于文件管理和依赖包管理
3. 创建 Action
4. 补充相关参数
a. ActionID:一个IDE中不能存在两个id相同的 Action
b. ClassName:新建的Action类名
c. Name:Action 名 - 显示在菜单中的名字
d. Description:具体描述,鼠标停留在菜单中时的提示描述信息
e. Add to Group:要添加在哪个组,比如选择 NewGroup,就会添加到右键文件夹的New展开项下,Last 会添加到最后一个
f. Keyboard Shortcuts:默认快捷键
5. 新建后会有一个类,同时在 plugin.xml 配置文件中可以进行后续的调整修改
6. 引用外部工具包
- maven 下载
- 本地依赖jar
- 下载jar包后放在lib下
- .iml 添加 jar 包依赖节点
7. UI 的开发 - SwingUI
- 如果插件需要UI,可以新建一个弹窗
- 然后根据输入选择等等来做你需要做的事,如:
8. 运行 Plugin
- 调整代码,增加一个输入框,并将输入框的内容显示出来
- 运行代码
- 此时会拉起一个新的 IntelliJ IDE
a. 这是一个IDEA的临时镜像
b. 你也可以以debug模式运行插件 - 随便选择一个项目进入,如果嫌卡也可以选择一个空文件夹
- 打开Plugin可以看到已经安装了我们新写的插件
- 点击后会弹窗
- 输入HelloWorld!点击ok ->
三、打包
1. 无外部依赖的打包
直接在 Build -> Prepare Plugin 即可生成 jar 包,将jar包发布或者直接本地安装到 IDE 即可
2. 依赖了三方jar包的打包
如果依赖了 三方 jar 包,直接 Prepare Plugin 生成的将不再是 jar包,而是一个 zip 压缩包。
这个包也一样可以直接拖入 IDE 中加载为插件,放心~
四、常用 API 分享
1. JDialog
JDialog 弹出时默认会挤在一起,可以使用 dialog.pack() 方法使用布局文件中的首选尺寸来显示
- dialog.setLocation可以设置显示位置
- dialog.setVisible(true) 来替代 show() 提高显示性能
2. File 相关
- IDEA 插件中使用 PSI 系统解析文件,获取当前编辑的文件,光标位置,Editor 等等,这里api太多了,就不做过多介绍了
- FileChooserDescriptor 弹出文件选择窗
3. 弹窗 - Message
// 弹出一条消息
Messages.showMessageDialog(msg, title, Messages.getInformationIcon());
// 弹出一条 yes/no 弹窗
Messages.showYesNoDialog(msg, title, Messages.getWarningIcon());
// 弹出一条错误提示
Messages.showErrorDialog(msg, title);
4. 通知
在操作成功之后,在 IDEA 右下角通知用户,使用 NotificationGroup 类即可。
public class NotificationUtil {
private static final NotificationGroup notificationGroup = new NotificationGroup("ApiDoc.NotificationGroup", NotificationDisplayType.BALLOON, true);
public static void warnNotify(String message) {
Notifications.Bus.notify(notificationGroup.createNotification(message, NotificationType.WARNING), Application.project);
}
public static void infoNotify(String message) {
Notifications.Bus.notify(notificationGroup.createNotification(message, NotificationType.INFORMATION), Application.project);
}
public static void errorNotify(String message) {
Notifications.Bus.notify(notificationGroup.createNotification(message, NotificationType.ERROR), Application.project);
}
}
5. 用户行为记录
PropertiesComponent.getInstance(project),可以获取当前project此插件的一些操作记录
- 通过 setValue 记下用户的操作
- 通过 getValue 取出上次的操作,这样就不用每次都选择或者要求用户输入了