IntelliJ IDEA插件开发系列教程之新建项目

简介: Smart Input Source插件推荐给大家使用,它可以实现根据输入处上下文自动切换到对应的输入法,将开发者从杂乱繁琐的输入法切换中解救出来。具体效果请查看《IntelliJ IDEA插件实现自动切换输入法》,欢迎到插件市场下载安装。IntelliJ IDEA插件开发系列教程综述IntelliJ IDEA插件开发系列教程之开发思路IntelliJ IDEA插件开发系列教程之新建项目进行代码演

Smart Input Source插件推荐给大家使用,它可以实现根据输入处上下文自动切换到对应的输入法,将开发者从杂乱繁琐的输入法切换中解救出来。具体效果请查看《IntelliJ IDEA插件实现自动切换输入法》,欢迎到插件市场下载安装。

  1. IntelliJ IDEA插件开发系列教程综述
  2. IntelliJ IDEA插件开发系列教程之开发思路
  3. IntelliJ IDEA插件开发系列教程之新建项目

进行代码演示的项目可以从Github获取idea-plugin-demo

新建项目

新建项目比较简单,操作路径File->New->Project->IDE Plugin,开发插件可以使用Java和Kotlin两种语言,Kotlin我也不会,但是IntelliJ Platform很多代码是用Kotlin写的,不过没有关系,大概能看懂个意思会使用其API就行。JDK最好选择17及以上,因为2022版本IDEA已经是基于JDK17开发的。

项目构建

项目创建完成之后就开始自动构建,最耗时的步骤在于下载用于调试的idea完整版,因此有600多兆,只有耐心的等待下载完成,如果期间失败了,点击左上角圆圈刷新后继续。

依赖下载完成之后可以打开Gradle的ToolWindow,点击buildPlugin就可以开始编译整个项目,并在项目根目录下面生成build文件夹。

项目结构

新建项目编译完后结构如下所示,gradle、build.gradel.kts、settings.gradel.kts、gradlew、gradlew.bat都是与Gradle相关的文件,其中gradle文件夹包含了完整的gradle运行环境,是为了解决版本迭代对项目的影响,一般不要动,build.gradel.kts类似Maven的Pom文件,配置了项目相关的依赖和插件等。gradlew、gradlew.bat分别是Linux系统和windows系统的命令工具,一般不要动。

build是编译输出的产物,其中distributions就是最终生成的插件,可以传播并从disk进行安装,idea-sandbox是调试idea的沙箱环境,其中idea-sandbox/system/log/idea.log是调试时idea打的日志。

plugin.xml文件是插件非常重要的配置文件,IntelliJ Platform加载插件的时候会首先读取插件的这个文件进行加载。

pluginIcon.svg是插件的ICON文件,不过需要SVG格式的图片,后面会讲解去哪里可以找到合适的ICON资源。

Gradle管理

最新版的IDEA插件项目已经是采用Kotlin版Gradle进行依赖管理,如果你看一些比较老的插件代码,它们可能采用Maven或者Groovy版Gradle进行依赖管理,Maven版本的应该是很难见到了,但是Groovy版Gradle管理依赖的插件很是有很多,Groovy版Gradle的配置配置文件名为build.gradle,两个版本的配置文件的语法是非常不同的,所以不要搞错了。

plugins是指Gradle的插件,我们整个项目的语言环境是Java,所以我们需要使用Java的插件,另外intellij也提供了Gradel插件方便我们编译调试等。group和version类似Maven,repositories中指定使用maven的中央仓库,dependencies管理项目的依赖,implementation指定依赖的使用范围实在编译期和运行期,依赖定位跟maven一样使用groupId、artificId、version。

intellij里面配置插件调试的运行环境,version执行IDEA的版本,type指定IDEA的类型,IC表示community版本,IU表示ultimate版本,一般使用community版进行调试就好了,ultimate版本调试依然需要输入License。

targetCompatibility表示依赖的Jdk版本,如果你是windows系统可能出现使用错误的编码导致编译失败,所以可以在这里指定编码options.encoding = "UTF-8"。sinceBuild表示插件支持的IDEA起始版本,untilBuild表示插件支持的IDEA最大版本,只有在支持范围之内的IDEA版本才能使用该插件,这里的IDEA版本看着有点奇怪,它其实是IDEA的编译版本,区别于IDEA的发行版本“2022.1.4”,不过他们之间也有一定的规则,比如发行版本“2022.1.4”对应的编译版本号前缀应该是“221.”,年份后两位22加中间的1。

plugins {
    id("java")
    id("org.jetbrains.intellij") version "1.9.0"
}

group = "com.example"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework:spring-web:5.3.23")
    implementation("com.squareup.okhttp3:okhttp:4.7.2")
    implementation("com.alibaba:fastjson:1.2.54.sec06")
}

// Configure Gradle IntelliJ Plugin
// Read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html
intellij {
    version.set("2022.1.4")
    type.set("IC") // Target IDE Platform
}

tasks {
    // Set the JVM compatibility versions
    withType<JavaCompile> {
        sourceCompatibility = "11"
        targetCompatibility = "11"
        options.encoding = "UTF-8"
    }

    patchPluginXml {
        sinceBuild.set("221")
        untilBuild.set("231.*")
    }

    signPlugin {
        certificateChain.set(System.getenv("CERTIFICATE_CHAIN"))
        privateKey.set(System.getenv("PRIVATE_KEY"))
        password.set(System.getenv("PRIVATE_KEY_PASSWORD"))
    }

    publishPlugin {
        token.set(System.getenv("PUBLISH_TOKEN"))
    }
}

plugin.xml

plugin.xml的使用会贯穿整个教程,所以这里只是简单讲解一下,后面遇到具体的功能实现再具体讲解。require-restart可以配置安装或更新插件时是否需要重启Idea。id表示该插件的id,需要唯一。name表示该插件的名称,需要使用英文,单词首字符大写,单词之间空格隔开。vender表示开发者信息。description表示插件的描述信息,支持简单html标签,会展示在插件的介绍页面,其中一定要包含英文介绍,否则无法在插件市场上架。depends表示插件的依赖,必须依赖的是platform代码。extensions表示平台的拓展点实现,IntelliJ Platform采用拓展与被拓展架构,Platform里面预先开发好了很多可以拓展的点,插件只需要实现对应的拓展,并在这里注册。具体在后面再讲吧。

<!-- Plugin Configuration File. Read more: https://plugins.jetbrains.com/docs/intellij/plugin-configuration-file.html -->
<idea-plugin require-restart="true">
    <!-- Unique identifier of the plugin. It should be FQN. It cannot be changed between the plugin versions. -->
    <id>com.example.plugin-demo</id>

    <!-- Public plugin name should be written in Title Case.
         Guidelines: https://plugins.jetbrains.com/docs/marketplace/plugin-overview-page.html#plugin-name -->
    <name>Plugin demo</name>

    <!-- A displayed Vendor name or Organization ID displayed on the Plugins Page. -->
    <vendor email="support@yourcompany.com" url="https://www.yourcompany.com">YourCompany</vendor>

    <!-- Description of the plugin displayed on the Plugin Page and IDE Plugin Manager.
         Simple HTML elements (text formatting, paragraphs, and lists) can be added inside of <![CDATA[ ]]> tag.
         Guidelines: https://plugins.jetbrains.com/docs/marketplace/plugin-overview-page.html#plugin-description -->
    <description><![CDATA[
    Enter short description for your plugin here.<br>
    <em>most HTML tags may be used</em>
  ]]></description>

    <!-- Product and plugin compatibility requirements.
         Read more: https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html -->
    <depends>com.intellij.modules.platform</depends>

    <!-- Extension points defined by the plugin.
         Read more: https://plugins.jetbrains.com/docs/intellij/plugin-extension-points.html -->
    <extensions defaultExtensionNs="com.intellij">

    </extensions>
</idea-plugin>
相关文章
|
13天前
|
Java 应用服务中间件 程序员
如何利用Idea创建一个Servlet项目(新手向)(下)
如何利用Idea创建一个Servlet项目(新手向)(下)
26 0
|
18天前
|
Java 开发工具 Maven
IntelliJ IDEA安装教程(超详细)
IntelliJ IDEA安装教程(超详细)
73 1
|
23天前
|
XML IDE 开发工具
别看你风吹头顶凉但你绝对没有过这样方便的插件Intellij IDEA 自带的 Vim
别看你风吹头顶凉但你绝对没有过这样方便的插件Intellij IDEA 自带的 Vim
40 0
|
1天前
|
Java Maven Kotlin
[AIGC] 请你写一遍博客介绍 “使用idea+kotinlin+springboot+maven 结合开发一个简单的接口“,输出markdown格式,用中文回答,请尽可能详细
[AIGC] 请你写一遍博客介绍 “使用idea+kotinlin+springboot+maven 结合开发一个简单的接口“,输出markdown格式,用中文回答,请尽可能详细
|
12天前
|
NoSQL 关系型数据库 MySQL
开发者福音:用IDEA和Iedis2加速Redis开发与调试
开发者福音:用IDEA和Iedis2加速Redis开发与调试
31 0
开发者福音:用IDEA和Iedis2加速Redis开发与调试
|
12天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
24 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
13天前
|
JSON Kubernetes Go
IDEA使用Kubernetes插件编写YAML
IDEA使用Kubernetes插件编写YAML
27 0
IDEA使用Kubernetes插件编写YAML
|
13天前
|
安全
IntelliJ IDEA 快捷键大全(三)
IntelliJ IDEA 快捷键大全
74 0
IntelliJ IDEA 快捷键大全(三)
IntelliJ IDEA - 复制文件全限定名快捷键
IntelliJ IDEA - 复制文件全限定名快捷键
770 0
IntelliJ IDEA - 复制文件全限定名快捷键
|
3月前
IntelliJ IDEA常用的快捷键
IntelliJ IDEA常用的快捷键
17 0