一、引言
在开发合并检查插件的时候,作者也遇到了不少问题,主要是自己摸索,没有其他人的经验。不过这种从0到1的技术研究对个人还是有好处的,就像作者之前自己捣鼓了一个微信小程序和到huggingface研究AI一样,虽然很麻烦,但是可以说很少有东西作者自己研究不了的。
言归正传,接下来分享一些作者觉得会绕弯路的经验。
二、经验
1、环境
idea的插件基本都是用Gradle进行开发的,主要是官方支持还有方便,社区也很活跃。IntelliJ IDEA对Gradle有良好的支持和集成。使用Gradle进行构建,可以方便地在IDE中进行项目配置、依赖管理和任务执行。
在idea的file-project structure里面,需要下载并且设置IntelliJ IDEA IU的sdk
2、build.gradle
build.gradle用于定义项目的构建脚本。它包含了项目的构建逻辑、依赖管理、任务定义等信息
Plugins用于扩展 Gradle 的功能。例如,java
插件用于构建 Java 项目,org.jetbrains.intellij
插件用于构建 IntelliJ IDEA 插件。
repositories
块用于定义项目依赖的仓库位置。通过配置 repositories
,Gradle 可以从指定的仓库中解析和下载项目所需的依赖项。flatDir指定打包放的目录,mavenCentral
是 Maven 中央仓库
sourceSets
块用于定义项目的源代码和资源文件的位置
allprojects
块用于配置所有子项目的通用设置
intellij
块用于配置 IntelliJ IDEA 插件开发的相关设置,version
指定版本后,Gradle 会下载并使用该版本的 IntelliJ IDEA 进行构建和运行,下载的时间会比较长而且不能中断,要是断了还得重头再来。type
用于指定 IntelliJ IDEA 的类型。常见的类型包括:
'IC'
:IntelliJ IDEA Community Edition(社区版)'IU'
:IntelliJ IDEA Ultimate Edition(旗舰版)
patchPluginXml
块用于配置和修改 IntelliJ IDEA 插件的 plugin.xml
文件,changeNotes
用于指定插件的变更日志或发布说明,sinceBuild
用于指定插件兼容的最低 IntelliJ IDEA 构建版本,untilBuild
用于指定插件兼容的最高 IntelliJ IDEA 构建版本
这个兼容版本作者看的挺奇怪的,231.*应该就是指2023第一期的任意小版本
plugins {
id 'java'
id 'org.jetbrains.intellij' version '1.12.0'
}
group 'com.merge.check.designer'
version '1.0.2'
sourceCompatibility = 1.8
repositories {
flatDir {
dirs 'libs'
}
mavenCentral()
maven {
url "https://oss.sonatype.org/content/repositories/snapshots/"
}
}
sourceSets.main.resources {
srcDirs = ['src/main/java', 'src/main/resources']
include '**/*.xml'
include '**/*.png'
include '**/*.ico'
include '**/*.gif'
}
allprojects {
dependencies {
implementation fileTree(dir: 'libs', includes: ['*.jar'])
}
}
// See https://github.com/JetBrains/gradle-intellij-plugin/
intellij {
version = '2022.3'
type = 'IU'
plugins = ['java','Git4Idea']
}
patchPluginXml {
changeNotes = """
<em>1.0.0 首发版本</em><br>
1. 首发版本 <br>
"""
sinceBuild = '162.*'
untilBuild = '231.*'
}
3、plugin.xml
plugin.xml
定义插件的元数据、依赖、兼容性、描述、变更日志、扩展点、组件和资源绑定等信息,基本上插件的按钮、实现功能、切入、监听都需要在这里进行定义。
比如这样就是实现监听vfs的文件监听
<applicationListeners>
<listener class="com.merge.check.idea.plugin.listener.ChangeListener"
topic="com.intellij.openapi.vfs.newvfs.BulkFileListener"/>
</applicationListeners>
4、gradle-wrapper.properties
这个文件就是用来设置gradle版本的
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
5、上传
做好的插件始终是要上传插件市场的,毕竟手动安装比较麻烦,很难推广
在jetBrains注册,点击自己的账号,然后点击upload plugin,就可以上传了,上传之后会有一个自动检测,一般是要描述符合规范,还有不能使用一些过期方法
后面会有工作人员邮件联系,一般是要求放开源码给他检测,还有对功能描述做进一步的要求,人工审核都比较麻烦,要打回来几次
My profile | JetBrains Marketplace
三、总结
没有做过的读者可以试试,也许会火呢,不会做但是有想法的也可以给作者提提意见,作者去实现