本文正在参与「金石计划」

在上节 《自定义IDEA插件 → 划词翻译替换(上)》 中,杰哥先是踩了个 JDK版别问题的大坑,借鉴网上教程 写了个简略Demo跑起来,最终 凭借ChatGPT快速实现了划词翻译替换功用

 自定义IDEA插件 → 划词翻译替换(下)

写完就刻不容缓想发这个插件给亲朋好友分 (zhuang)享(bi),但翻译用到的APPID和KEY都是写死我自己的。所以不太好Share,所以本节就来为这个插件开发一个 简略的设置页,让插件用户能够填写自己的翻译APPID和KEY。当然,顺带也讲下 插件的打包及发布

 自定义IDEA插件 → 划词翻译替换(下)

话不多说,直接开冲~


0x1、编写设置页UI

 自定义IDEA插件 → 划词翻译替换(下)

相同,直接问ChatGPT:

 自定义IDEA插件 → 划词翻译替换(下)

十分简略明了,直接CV这个 applicationConfigurable 标签的代码到 plugin.xml中:

 自定义IDEA插件 → 划词翻译替换(下)

直接报错,em…又开端瞎编了是吧 (也可能是版别问题),并没有找到这两个引用,configurableClass显着是指向设置Class的。试了下特点,implementation 能够,可是现已废弃,点开详细的类 ConfigurableEP,发现能够用 instance 代替:

 自定义IDEA插件 → 划词翻译替换(下)

新建一个 CpStringFormatConfig 类继承 com.intellij.openapi.options.Configurable 类:

 自定义IDEA插件 → 划词翻译替换(下)

createComponent() 这个办法会生成设置面板的UI,这儿直接Copy了ChatGPT供给的代码示例,接着装备下plugin.xml:

 自定义IDEA插件 → 划词翻译替换(下)

履行runIde运转一波:

 自定义IDEA插件 → 划词翻译替换(下)

nice,在Settings页面能够看到咱们的插件设置页了,接着完善下这个设置页,这儿就 不手敲+脑补UI 了,究竟awt的API咱们也不熟,直接运用 Swing Designer 拖拉控件,主动生成:

 自定义IDEA插件 → 划词翻译替换(下)

定义表单UI为 → PluginSettingUI

 自定义IDEA插件 → 划词翻译替换(下)

左边会生成两个文件 → .form文件及对应的.java文件

 自定义IDEA插件 → 划词翻译替换(下)

点击from文件开端界面设计:

 自定义IDEA插件 → 划词翻译替换(下)

从右侧拖拽组件到画板,然后按需调整组件特点就不必介绍了吧,这儿杰哥简略拖拉出页面~

翻开对应的java文件,能够看到 field name对应的便是控件实例,顺带写一个回来根Panel的办法:

 自定义IDEA插件 → 划词翻译替换(下)

回到咱们的设置类 CpStringFormatConfig,实例化一个PluginSettingUI实例,然后重写 createComponent(),调用 getContentPanel() 回来布局:

 自定义IDEA插件 → 划词翻译替换(下)

运转看看作用:

 自定义IDEA插件 → 划词翻译替换(下)

nice!这儿本来加了一个清空和保存的按钮,不往后边想想有些呆,直接在点击Apply或许OK时保存就完事了~


0x2、设置参数的读写

然后,咱们需求一个东西来保存 设置页的装备参数,办法有许多,这儿直接用最简略的方式 → 内置的 com.intellij.ide.util.PropertiesComponent,经过键值对的方式保存装备信息。接着便是读写参数的流程:

  • 翻开设置页,读取参数,有的话主动填充
  • 点击Apply,保存参数

组件类 PluginSettingUI 加点代码,露出读写appId和key的办法:

 自定义IDEA插件 → 划词翻译替换(下)

然后回到 CpStringFormatConfig 改下代码:

 自定义IDEA插件 → 划词翻译替换(下)

接着运转验证,能够发现设置的参数现已保存成功了。接着便是在需求用到翻译的Action读写appid和key了,直接改 TranslateUtil

 自定义IDEA插件 → 划词翻译替换(下)

编译运转后,测验不填写appid和key,直接转换,弹窗如愿出现:

 自定义IDEA插件 → 划词翻译替换(下)

接着输入自己的appid和key,点击apply,如果这两个参数无误的话,插件就能正常工作啦~

 自定义IDEA插件 → 划词翻译替换(下)

接着就能够跟亲朋好友share啦~


0x3、插件打包

双击Gradle面板的 buildPlugin Task即可开端打包:

 自定义IDEA插件 → 划词翻译替换(下)

留意 plugin.xml 黄框部分的信息要完善下哦,不然会打包失败!!!

 自定义IDEA插件 → 划词翻译替换(下)

打包后会在根目录生成build文件夹,打包后的插件就在 \build\distributions 目录下,无依靠的插件是JAR包有依靠的插件是ZIP包

 自定义IDEA插件 → 划词翻译替换(下)

然后就能够在其它IDE里装置这个插件,比方我搞到我的AS里,顺次:FileSettingsPlugins点小齿轮挑选Install Plugin from Disk → 选中插件包:

 自定义IDEA插件 → 划词翻译替换(下)

然而,报错了:

 自定义IDEA插件 → 划词翻译替换(下)

我擦,到这一步你跟我说 写了大半天的插件 不能放到新的IDEA上???

 自定义IDEA插件 → 划词翻译替换(下)

裤子都TM脱了,抛弃是不可能抛弃的,然后看到了这篇文章 《IDEA 2021及以上版别Lombok插件无法装置的问题》,简略归纳下处理流程:

  • 解压软件直接翻开插件Zip包 → Jar包 (不是解压!!!)
  • 进入META-INF文件夹下,翻开plugin.xml文件;
  • 找到:<idea-version> 标签,把 since-builduntil-build 改成自己的IDE版别。

比方我生成的插件包:

 自定义IDEA插件 → 划词翻译替换(下)

我的AS对应的IDEA版别:

 自定义IDEA插件 → 划词翻译替换(下)

改成:

<idea-version since-build="211" until-build="211.*"/>

然后保存,压缩软件一般会弹窗:

 自定义IDEA插件 → 划词翻译替换(下)

是,然后再次装置,TM就能够了:

 自定义IDEA插件 → 划词翻译替换(下)

当然,这是治标不治本的办法,我不可能每次打包完都自己手动改一遍吧?然后又发现了这篇文章:IntelliJ Plugin – 插件发布多版别兼容性,它给出的处理办法如下:

① plugin.xml 中 直接指定插件支撑的最低和最高版别

<idea-plugin>
    <idea-version since-build="211" until-build="213.*" />
</idea-plugin>

build.gradleintellij 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文件,能够看到设置收效了,并且插件包也能正常装置~

 自定义IDEA插件 → 划词翻译替换(下)

装置后翻开Setting找到咱们的插件,输入下百度翻译的appID和key,就能高兴游玩啦~

 自定义IDEA插件 → 划词翻译替换(下)


0x4、发布市场

翻开 Marketplace,需求注册一个 Jetbrains账号,也能够用第三方账号授权登录 (如Google、Github等)。登陆完点击右上角的 Upload plugin 提交插件:

 自定义IDEA插件 → 划词翻译替换(下)

顺次是:挑选插件包挑选License源码URL(由于我选的开源协议)标签

 自定义IDEA插件 → 划词翻译替换(下)

然后点击Upload即可上传至 Marketplace,然后会跳转插件详情页,能够在这儿完善一些插件细节,图片描述啥的:

 自定义IDEA插件 → 划词翻译替换(下)

然后便是等系统审阅了,一般在两个工作日内完成,审阅完就能够在Marketplace中搜索到插件下载运用啦。

别的,Gradle还支撑 直接将本地的插件发布到提交到插件存储库中,前提是手动提交过一次,由于需求 Token,审阅经往后,在这儿生成Token即可。

 自定义IDEA插件 → 划词翻译替换(下)

由于我的插件还没审阅经过,没法演示,详细流程能够参考这篇文章:《Idea插件开发(二)——插件的创建打包及发布》,应该相差无几~


0x5、小结

本节先在原有插件的基础上添加了一个 设置页让用户能够填写自己的百度翻译appId和Key,接着履行 buildPlugin 打包插件,在装置到自己的AS时 遇到插件兼容的问题,经过调整装备,终究成功装置,并发布到 Marketplace 上。

 自定义IDEA插件 → 划词翻译替换(下)

开发这个插件的过程真的是一波N折啊,不过所幸仍是搞出来了,当然现在还很粗陋,可是 可订制啊!!!读者有什么字符串格式化的需求能够在评论区提,着手能力强的甚至能够自己上手改代码~

直接给出仓库地址:CpStringFormat,懒得折腾得的直接下插件包:CpStringFormat-0.0.1-SNAPSHOT.zip

最终安利一个不错的仓库:judasn/IntelliJ-IDEA-Tutorial,玩转IDEA插件必备啊,就酱~

 自定义IDEA插件 → 划词翻译替换(下)