Intellij IDEA Plugin DEV (一)


5/22/2017 IDEA

IDEA Plugin 开发记录 hello world 篇.

为什么没有 Intellij 插件开发入门, 因为网上已经有很多入门的教程了, 随便一搜, 大部分都是 Hello World 入门教程, 这里再写就没有意义了, 接下来的几篇都将围绕自己开发的几个插件, 将用到的没有用到的都写出来, 一是做一个记录, 二是希望能帮助那些想开发自己的插件的老铁.

前期主要是为插件开发做准备, 搜索了很多 Intellij 插件开发的博文, 如果搜到的不满意, 可以尝试以 "Android Stutio 插件开发" 关键字进行搜索, 毕竟 Android Stutio 是根据 Intellij IDEA 进行二次开发的.

这里现将看到的有价值的博文地址分享一些, 谢谢他们的分享.

街头客-简书

一共 9 篇插件开发的博文, 非常好.

使用 Gradle 开发 Intellij 插件

官方使用 Intellij 的 Intellij Platform Plugin 来创建插件项目, 用惯了 Maven, 没用项目管理工具, 感觉一下子回到了解放前, 这里不用 Maven 而用 Gradle,是为了学习下 Gradle.

Gradle 版的 Intellij IDEA Plugin Hello World

安装 Gradle

brew install gradle
1

查看安装后的信息

 ~ brew info gradle
gradle: stable 3.4.1
Build system based on the Groovy language
https://www.gradle.org/
/usr/local/Cellar/gradle/2.14.1 (171 files, 47.4MB) *
  Built from source on 2016-09-28 at 10:22:44
From: https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git/Formula/gradle.rb
==> Requirements
Required: java >= 1.7 ✔
==> Options
--with-all
	Installs Javadoc, examples, and source in addition to the binaries
1
2
3
4
5
6
7
8
9
10
11
12

设置环境变量 (zsh)

GRADLE_HOME="/usr/local/Cellar/gradle/2.14.1"
export GRADLE_HOME
export PATH=$PATH:$GRADLE_HOME/bin
1
2
3

记得

source ~/.zshrc
1

查看版本信息

 ✘  ~  gradle -version

------------------------------------------------------------
Gradle 2.14.1
------------------------------------------------------------

Build time:   2016-07-18 06:38:37 UTC
Revision:     d9e2113d9fb05a5caabba61798bdb8dfdca83719

Groovy:       2.4.4
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_72 (Oracle Corporation 25.72-b15)
OS:           Mac OS X 10.12.4 x86_64
1
2
3
4
5
6
7
8
9
10
11
12
13

创建插件项目

这里直接使用 Intellij 创建 Gradle 项目

接下需要设置下 "三要素", 同 Maven 一样, 然后一路 next

然后设置 gradle

最后创建完成的样子

src目录结构是我自己加的, 直接创建目录就行了, gradle会自动识别文件结构 (目录结构同Maven)

设置 build.gradle

buildscript {
    repositories {
        mavenCentral()
        maven { url 'http://dl.bintray.com/jetbrains/intellij-plugin-service'}
    }
}

// 添加 intellij build plugins 仓库地址
plugins {
    id "org.jetbrains.intellij" version "0.1.10"
}

repositories {
    mavenCentral()
}

tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}

// 使用 intellij idea 的插件
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.jetbrains.intellij'

sourceCompatibility = 1.8

// 设置运行插件的 intellij 版本以及沙箱地址
intellij {
    version 'IC-14.1.4'
    sandboxDirectory = project.rootDir.canonicalPath + "/.sandbox" //插件生成的临时文件的地址
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

添加 plugin.xml

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

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

  <change-notes><![CDATA[
      Add change notes here.<br>
      <arraydsj@163.com>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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

最后的目录结构

运行

还是写个 Hello World 吧, 不然怎么知道这个是否可行呢?

当初按照官方的教程, 照着写了一遍 Hello World, 然后使用 Gradle 再来一遍, 可是 "User classpath of module" 一直为 [none]

搞毛啊, 没有这个启动不了插件,就调试不了啊, 后来想了想 Maven, Maven 有很多插件, 什么 maven-source-plugin , maven-compiler-plugin , maven-deploy-plugin 什么的

再看看 Gradle

右键 运行 或者 debug

或者 直接

gradle runI   
1

gradle-demo 源码

遇到的问题

Gradle 路径设置

由于我使用 brew 安装 Gradle, 使用 环境变量中的 /usr/local/Cellar/gradle/2.14.1 路径会造成

intellij gradle cannot save settings
1

错误.

这里贴出 解决方法:

在任意目录下创建一个 build.gradle 文件 , 里面写入

task getHomeDir << {
	println gradle.gradleHomeDir
}
1
2
3

在 build.gradle 目录下执行

gradle getHomeDir
1

输出:

:getHomeDir
/usr/local/Cellar/gradle/2.14.1/libexec
1
2

这里的输出才是真正的 gradle 目录

这里说一下 通过 brew 安装的软件的情况.

通过 brew 安装的软件会会在 /usr/local/Cellar 目录下

以 Tomcat 为例:

/usr/local/Cellar/tomcat
└── 8.5.9  
    ├── bin
    │   ├── catalina -> ../libexec/bin/catalina.sh
    └── libexec
        ├── bin
1
2
3
4
5
6

在不同的版本目录下会有 binlibexec 这2个重要的目录

bin 目录下其实是一个软连接, 真正的执行文件是 ../libexec/bin/catalina.sh

libexec 才是软件真正的安装目录.

大多数使用 brew 安装的软件都是这样的.

Gradle Intellij 依赖

由于众所周知的原因, Gradle下载很慢, 所以这里使用迅雷先把 ideaIC-14.1.4.zipideaIC-14.1.4-sources.jar 下载下来, 放在

/Users/xxxx/.gradle/caches/modules-2/files-2.1/com.jetbrains.intellij.idea/ideaIC/14.1.4/xxxxxxxxxxxx/
1

参考

Last Updated: 7/3/2019, 6:22:52 PM