如何成为IntelliJ IDEA死忠粉?从你开发的第一款插件开始...

写Java代码的时候,经常会涉及到重复性的操作,这个时候就会想要是有这样一个插件就好了,如果是大家都会遇到的场景,IDE或许已经提供了,再不然也有可能有人编写了相关的插件。要是这个操作是你们的编码环境特有的,那就只能自己写工具了。所以这里来学学如何编写IDEA插件,让自己的编程环境更加强大,更好的进行。

开发环境

开发IDEA插件有以下这些依赖:

  • IntelliJ IDEA Community Edition
  • IntelliJ IDEA Community Edition 源码
  • Plugin DevKit 插件
  • IntelliJ Platform SDK

安装IntelliJ IDEA Community Edition
你可能已经安装了Ultimate版本,但是你还是需要安装IDEA的社区版本。因为商业版是闭源的,所以在调试时无法调试核心代码。

下载IntelliJ IDEA Community Edition源码
社区版的安装包里是不包含源码的,所以我们需要手动从github上clone一份:

git clone --depth 1 git://git.jetbrains.org/idea/community.git idea

添加IDEA jdk
虽然不知道原因,但是根据上面链接的内容,我们需要建立一个IDEA jdk来运行插件:

除非你在Mac上使用官方JDK,否则你需要手动添加/lib/tools.jar到classpath中。

配置IntelliJ Platform SDK
打开File | Project Structure新建一个IntelliJ Platform SDK:

Java SDK选择我们刚刚建立的IDEA jdk:

然后我们可以把下载的IDEA社区版源码添加到源码路径中,这样在调试时,就可以调试IDEA自身的代码了:

第一个插件

我们来编写一个最简单的插件来学习编写一个插件的完整步骤。

新建工程
选择IntellJ Platform Plugin,然后Project SDK指定刚刚新建的plugin sdk:

新建的插件项目:

插件根目录下有两个目录src和resources。src是插件代码目录,resource是插件资源目录,其中META-INF/plugin.xml是插件的描述文件,就像Java web项目的web.xml一样。

plugin.xml默认的内容如下:

<idea-plugin>
<id>com.your.company.unique.plugin.id</id>
<name>Plugin display name here</name>
<version>1.0</version>
<vendor email="[email protected]" url="http://www.yourcompany.com">YourCompany</vendor>

<description><![CDATA[
      Enter short description for your plugin here.<br>
      <em>most HTML tags may be used</em>
    ]]></description>

<change-notes><![CDATA[
      Add change notes here.<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="145.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>
<!-- Add your actions here -->
</actions>

</idea-plugin>

新建一个Action

插件扩展IDEA最常见的方式就是在菜单栏或者工具栏中添加菜单项,用户通过点击菜单项来触发插件功能。IDEA提供了AnAction类,这个类有一个虚方法actionPerformed,这个方法会在每次菜单被点击时调用。

新建一个自定义的Action有两个步骤:

继承AnAction类,在actionPerformed方法中实现插件逻辑
注册action,有两种方式,通过代码注册和通过plugin.xml注册
我们先写一个简单的Action类:

public class TextBoxes extends AnAction {
// 如果通过Java代码来注册,这个构造函数会被调用,传给父类的字符串会被作为菜单项的名称
// 如果你通过plugin.xml来注册,可以忽略这个构造函数
public TextBoxes() {
// 设置菜单项名称
super("Text _Boxes");
// 还可以设置菜单项名称,描述,图标
// super("Text _Boxes","Item description",IconLoader.getIcon("/Mypackage/icon.png"));
    }

public void actionPerformed(AnActionEvent event) {
        Project project = event.getData(PlatformDataKeys.PROJECT);
        String txt= Messages.showInputDialog(project, "What is your name?", "Input your name", Messages.getQuestionIcon());
        Messages.showMessageDialog(project, "Hello, " + txt + "!\n I am glad to see you.", "Information", Messages.getInformationIcon());
    }
}

然后我们在plugin.xml中注册这个Action:

<actions>
  <group id="MyPlugin.SampleMenu" text="_Sample Menu" description="Sample menu">
    <add-to-group group-id="MainMenu" anchor="last"  />
       <action id="Myplugin.Textboxes" class="Mypackage.TextBoxes" text="Text _Boxes" description="A test menu item" />
  </group>
</actions>

这里我们新建了一个菜单组,其中text字符串的下划线表示这个字母作为快捷键。这个菜单显示的效果如下:

除了手动新建Action,IDEA还提供了快速新建的方法,在代码目录上点击新建,可以看到Action:

可以在这个面板中填写你要新建的Action信息,IDEA会帮你新建类,还有在plugin.xml中帮你注册:

运行插件

运行插件特别简单,和运行普通Java代码一样,点击运行或者调试的按钮,就会启动一个新的IDEA实例,这个实例中插件是生效的。

点击Text Boxes就可以看到插件的效果了。

原文地址:https://blog.51cto.com/14528283/2470575

时间: 2024-10-16 15:57:30

如何成为IntelliJ IDEA死忠粉?从你开发的第一款插件开始...的相关文章

YoMail,Gmail死忠粉的福音——直接收发Gmail邮件

之前,不知道听谁说过一句话,叫做"中国人爱 IM,美国人爱邮件".细想一下,还真是如此.从QQ,YY语言等个人即时通信到阿里旺旺贸易通的商务IM,国内的IM做的风生水起,但是相比之下,国内的邮件客户端发展却倍感老态龙钟,甚至说给我一种被IM排挤的感觉.不过,即使是在这种大环境下,还是有一款邮件客户端毅军突起让我刮目相看,它给我的第一感觉可以用四个字来形容:简单高效!今天,咱们就八一八这款邮件客户端--YoMail. 一,Gmail死忠粉的福音--直接收发Gmail邮件Gmail在国内无

死忠粉分享的捕鱼寻宝攻略,亲测有效!

说起海洋,各位先想到的是什么?反正我第一感觉就是宝藏!宝箱!金子!(感觉这是看多了电影的后遗症),现在很多游戏里,都会设置一些寻宝任务,而这些任务的完成地点不是在山里的山洞就是在海里的深处.作为一个<满贯捕鱼>的死忠粉来说,很乐意把自己的一些攻略和心得体会分享给大家,前几天看到有小伙伴对深海寻宝任务的玩法有疑惑,接下来我就来说说自己的一些玩法. 首先玩家需要在登录界面选择"经典模式",进入该模式之后,玩家可以在三个渔场的任意房间开始游戏,然后点击右上角的"寻宝&q

在intellij 下用java spring + Mysql + Hibernate 开发的第一个数据库demo

准备: 1.安装mysql. 2.安装maven. 3.准备好你的ide(eclipse,或intellij都行) 正题: 用spring的框架来构建项目,首先就是要知道AOP和DI是什么.(自己查) 实现过程中有两类疑问? 1.第一个是spring怎么实现我们没有new Bean然而能够拿到一些bean组件 2.hibernate和Dao是什么,DaoSupport是什么,为什么有DaoImpl.Impl里面的templete是什么.   第一类问题是来自对AOP,和DI不理解造成的.在spr

为什么我这个 Java 死忠倒向了 Node.js?

作为一个在Sun微系统公司Java SE团队工作了十多年的人,难道不应该是体内流淌着Java字节码的血.只要一息尚存就要不断实现抽象接口吗?但对于我这个前Java SE团队成员来说,2011年学习了Node.js平台后就像是呼吸到了新鲜空气一样--我在2009年1月被Sun裁退之后(正好在Oracle收购之前),开始学习Node.js并被它深深所吸引. 我是怎样被吸引的?从2010年起,我就开始写各种关于Node.js编程的东西了.具体来说,写了四版<Node.js Web开发>,加上一些其他

IntelliJ IDEA 常用设置

说明 IntelliJ IDEA 有很多人性化的设置我们必须单独拿出来讲解,也因为这些人性化的设置让我们这些 IntelliJ IDEA 死忠粉更加死心塌地使用它和分享它. 常用设置 1.代码提示不区分大小写 IntelliJ IDEA 的代码提示和补充功能有一个特性:区分大小写.默认就是 First letter 区分大小写的. 区分大小写的情况是这样的:比如我们在 Java 代码文件中输入 stringBuffer IntelliJ IDEA 是不会帮我们提示或是代码补充的,但是如果我们输入

IntelliJ IDEA 常用设置讲解

说明 IntelliJ IDEA 有很多人性化的设置我们必须单独拿出来讲解,也因为这些人性化的设置让我们这些 IntelliJ IDEA 死忠粉更加死心塌地使用它和分享它. 常用设置 IntelliJ IDEA 的代码提示和补充功能有一个特性:区分大小写.如上图标注 1 所示,默认就是 First letter 区分大小写的. 区分大小写的情况是这样的:比如我们在 Java 代码文件中输入 stringBuffer IntelliJ IDEA 是不会帮我们提示或是代码补充的,但是如果我们输入 S

IntelliJ IDEA 常用设置讲解3

IntelliJ IDEA 有很多人性化的设置我们必须单独拿出来讲解,也因为这些人性化的设置让我们这些 IntelliJ IDEA 死忠粉更加死心塌地使用它和分享它. 常用设置 如上图 Gif 所示,当我们在编辑某个文件的时候,自动定位到当前文件所在的 Project 组件窗口位置. 如上图 Gif 所示,即使我们项目没有使用版本控制功能,IntelliJ IDEA 也给我们提供了本地文件历史记录.除了简单的记录之外,我们还可以给当前版本加标签. 如上图 Gif 所示,我们还可以根据选择的代码,

IntelliJ IDEA 常用设置讲解2

IntelliJ IDEA 有很多人性化的设置我们必须单独拿出来讲解,也因为这些人性化的设置让我们这些 IntelliJ IDEA 死忠粉更加死心塌地使用它和分享它. 常用设置 如上图 Gif 所示,当我们设置了组件窗口的 Pinned Mode 属性之后,在切换到其他组件窗口的时候,已设置该属性的窗口不会自动隐藏. 如上图 Gif 所示,我们可以通过 Alt + F1 + 1 快捷键来定位当前文件所在 Project 组件窗口中的位置. 如上图 Gif 所示,我们可以勾选此设置后,增加 Ctr

IntelliJ IDEA 常用设置讲解1

IntelliJ IDEA 有很多人性化的设置我们必须单独拿出来讲解,也因为这些人性化的设置让我们这些 IntelliJ IDEA 死忠粉更加死心塌地使用它和分享它. 常用设置 IntelliJ IDEA 的代码提示和补充功能有一个特性:区分大小写.如上图标注 1 所示,默认就是 First letter 区分大小写的. 区分大小写的情况是这样的:比如我们在 Java 代码文件中输入 stringBuffer IntelliJ IDEA 是不会帮我们提示或是代码补充的,但是如果我们输入 Stri