本文正在参与「金石计划」
在上节 《自定义IDEA插件 → 划词翻译替换(上)》 中,杰哥先是踩了个 JDK版别问题的大坑,借鉴网上教程 写了个简略Demo跑起来,最终 凭借ChatGPT快速实现了划词翻译替换功用。
写完就刻不容缓想发这个插件给亲朋好友分 (zhuang)享(bi),但翻译用到的APPID和KEY都是写死我自己的。所以不太好Share,所以本节就来为这个插件开发一个 简略的设置页,让插件用户能够填写自己的翻译APPID和KEY。当然,顺带也讲下 插件的打包及发布。
话不多说,直接开冲~
0x1、编写设置页UI
相同,直接问ChatGPT:
十分简略明了,直接CV这个 applicationConfigurable 标签的代码到 plugin.xml中:
直接报错,em…又开端瞎编了是吧 (也可能是版别问题),并没有找到这两个引用,configurableClass显着是指向设置Class的。试了下特点,implementation 能够,可是现已废弃,点开详细的类 ConfigurableEP,发现能够用 instance 代替:
新建一个 CpStringFormatConfig 类继承 com.intellij.openapi.options.Configurable 类:
createComponent() 这个办法会生成设置面板的UI,这儿直接Copy了ChatGPT供给的代码示例,接着装备下plugin.xml:
履行runIde运转一波:
nice,在Settings页面能够看到咱们的插件设置页了,接着完善下这个设置页,这儿就 不手敲+脑补UI 了,究竟awt的API咱们也不熟,直接运用 Swing Designer
拖拉控件,主动生成:
定义表单UI为 → PluginSettingUI:
左边会生成两个文件 → .form文件及对应的.java文件
点击from文件开端界面设计:
从右侧拖拽组件到画板,然后按需调整组件特点就不必介绍了吧,这儿杰哥简略拖拉出页面~
翻开对应的java文件,能够看到 field name对应的便是控件实例,顺带写一个回来根Panel的办法:
回到咱们的设置类 CpStringFormatConfig,实例化一个PluginSettingUI实例,然后重写 createComponent(),调用 getContentPanel() 回来布局:
运转看看作用:
nice!这儿本来加了一个清空和保存的按钮,不往后边想想有些呆,直接在点击Apply或许OK时保存就完事了~
0x2、设置参数的读写
然后,咱们需求一个东西来保存 设置页的装备参数,办法有许多,这儿直接用最简略的方式 → 内置的 com.intellij.ide.util.PropertiesComponent,经过键值对的方式保存装备信息。接着便是读写参数的流程:
- 翻开设置页,读取参数,有的话主动填充;
- 点击Apply,保存参数;
组件类 PluginSettingUI 加点代码,露出读写appId和key的办法:
然后回到 CpStringFormatConfig 改下代码:
接着运转验证,能够发现设置的参数现已保存成功了。接着便是在需求用到翻译的Action读写appid和key了,直接改 TranslateUtil:
编译运转后,测验不填写appid和key,直接转换,弹窗如愿出现:
接着输入自己的appid和key,点击apply,如果这两个参数无误的话,插件就能正常工作啦~
接着就能够跟亲朋好友share啦~
0x3、插件打包
双击Gradle面板的 buildPlugin Task即可开端打包:
留意 plugin.xml 黄框部分的信息要完善下哦,不然会打包失败!!!
打包后会在根目录生成build文件夹,打包后的插件就在 \build\distributions 目录下,无依靠的插件是JAR包,有依靠的插件是ZIP包。
然后就能够在其它IDE里装置这个插件,比方我搞到我的AS里,顺次:File → Settings → Plugins → 点小齿轮 → 挑选Install Plugin from Disk → 选中插件包:
然而,报错了:
我擦,到这一步你跟我说 写了大半天的插件 不能放到新的IDEA上???
裤子都TM脱了,抛弃是不可能抛弃的,然后看到了这篇文章 《IDEA 2021及以上版别Lombok插件无法装置的问题》,简略归纳下处理流程:
- 解压软件直接翻开插件Zip包 → Jar包 (不是解压!!!)
- 进入META-INF文件夹下,翻开plugin.xml文件;
- 找到:<idea-version> 标签,把 since-build、until-build 改成自己的IDE版别。
比方我生成的插件包:
我的AS对应的IDEA版别:
改成:
<idea-version since-build="211" until-build="211.*"/>
然后保存,压缩软件一般会弹窗:
是,然后再次装置,TM就能够了:
当然,这是治标不治本的办法,我不可能每次打包完都自己手动改一遍吧?然后又发现了这篇文章:IntelliJ Plugin – 插件发布多版别兼容性,它给出的处理办法如下:
① plugin.xml 中 直接指定插件支撑的最低和最高版别:
<idea-plugin>
<idea-version since-build="211" until-build="213.*" />
</idea-plugin>
② build.gradle 的 intellij dsl里将 updateSinceUntilBuild设置为false:
intellij {
version 'xx.x.x'
updateSinceUntilBuild = false
}
再次编译会报错:
The CpStringFormat (id=cn.coderpig.CpStringFormat, path=~\IdeaProjects\CpStringFormat\build\idea-sandbox\plugins\CpStringFormat, version=1.0-SNAPSHOT) plugin is incompatible (reason: since build 211.0 > IC-202.8194.7, target build range is 211 to 213.*)
可是插件包却正常生成了,翻开它的plugin.xml文件,能够看到设置收效了,并且插件包也能正常装置~
装置后翻开Setting找到咱们的插件,输入下百度翻译的appID和key,就能高兴游玩啦~
0x4、发布市场
翻开 Marketplace,需求注册一个 Jetbrains账号,也能够用第三方账号授权登录 (如Google、Github等)。登陆完点击右上角的 Upload plugin 提交插件:
顺次是:挑选插件包、挑选License、源码URL(由于我选的开源协议)、标签
然后点击Upload即可上传至 Marketplace,然后会跳转插件详情页,能够在这儿完善一些插件细节,图片描述啥的:
然后便是等系统审阅了,一般在两个工作日内完成,审阅完就能够在Marketplace中搜索到插件下载运用啦。
别的,Gradle还支撑 直接将本地的插件发布到提交到插件存储库中,前提是手动提交过一次,由于需求 Token,审阅经往后,在这儿生成Token即可。
由于我的插件还没审阅经过,没法演示,详细流程能够参考这篇文章:《Idea插件开发(二)——插件的创建打包及发布》,应该相差无几~
0x5、小结
本节先在原有插件的基础上添加了一个 设置页,让用户能够填写自己的百度翻译appId和Key,接着履行 buildPlugin 打包插件,在装置到自己的AS时 遇到插件兼容的问题,经过调整装备,终究成功装置,并发布到 Marketplace 上。
开发这个插件的过程真的是一波N折啊,不过所幸仍是搞出来了,当然现在还很粗陋,可是 可订制啊!!!读者有什么字符串格式化的需求能够在评论区提,着手能力强的甚至能够自己上手改代码~
直接给出仓库地址:CpStringFormat,懒得折腾得的直接下插件包:CpStringFormat-0.0.1-SNAPSHOT.zip
最终安利一个不错的仓库:judasn/IntelliJ-IDEA-Tutorial,玩转IDEA插件必备啊,就酱~