Intellij IDEA 插件开发 -- 快速发布插件到自建仓
Intellij IDEA 有一个自己的官方的插件仓库,但是当我们的开发的 Intellij IDEA 的插件不能够对外公开时,我们就需要搭建自己的 Intellij IDEA 的插件仓库。
搭建 Intellij IDEA 插件仓库
Intellij IDEA 的官方文档里面有提到怎么去新建一个插件仓库,但是,这部分的文档却不在 Intellij IDEA 插件的开发文档里面,而是在插件相关功能的使用文档里面:https://www.jetbrains.com/help/idea/2016.3/adding-plugins-to-enterprise-repositories.html
这里简单对这个文档进行一个说明,如果需要新建一个插件仓库,非常简单,只需要提供一个 URL,当访问这个 URL 的时候,返回如下的一个 XML 即可:
<plugins>
<plugin id="com.taobao.middleware.HotCode2Plugin" url="http://localhost/downloads/hotcode2-idea-plugin.jar" version="0.1"/>
<plugin id="com.alipay.sofa.andromeda" url="http://localhost/idea/download/com.alipay.sofa.andromeda-1.1.34.zip" version="1.1.34"/>
</plugins>
其中:
-
id
为插件的 ID,需要跟在插件的plugin.xml
里面的设定的 ID 一致。 -
url
为插件的 ZIP 包下载的地址。 -
version
是插件的版本号。
这个 XML 可以由服务器动态生成或者可以是一个写死的 XML。
使用 Gradle 来快速发布插件到自建仓库
当然,每次都手工更新插件仓库有点 low,作为程序员,总想把能够自动化的事情全部自动化掉。Jetbrains 官方提供了一个 Gradle Intellij Plugin 来帮助我们构建发布 Intellij IDEA 插件(这方面的教程,大家可以看 http://blog.qianlicao.cn/technology/2016/11/03/build-plugins-with-gradle/)。对于发布 Intellij IDEA 插件的支持,默认行为是发布到 Jetbrains 的官方的仓库上面去的,不过在最新的 SNAPSHOT 版本中,这个插件提供了一个属性 host
可以设置自定义的仓库,我们可以在自己的 build.gradle
文件里面设置这个 host
属性:
publishPlugin.doFirst {
publishPlugin.host = 'http://ysera.alipay.net:9000/'
}
设置好了之后,就可以直接使用 gradle publishPlugin
来发布 Intellij IDEA 插件了。
但是,等等,虽然设置好了自建的插件仓库的地址,然后我们并不是知道 gradle publishPlugin
这个命令上传插件的时候的 http request 是张什么样子的,我们的自建仓库也就无法处理上传插件的请求。我在试验的过程中,通过 Charles 抓了一下这个命令发送的 http 请求,结果如下:
从上面这个图看到,gradle publishPlugin
这个命令会将插件发布到 host
的 /plugin/uploadPlugin
这个路径下,提交的请求体包含了如下的信息:
-
userName
:用户名 -
password
:密码 -
xmlId
:插件的 ID,也就是在plugin.xml
里面定义的 ID。 -
file
:插件的 ZIP 包。
知道了上面的请求信息,我们就可以写出自己的处理请求的代码,来让 gradle publishPlugin
这个命令可以直接将插件上传到自建的仓库上了。
需要注意的一点是,我们自建的仓库可以不用用户名密码就可以上传,这个时候再
build.gradle
里面,可以将用户名,密码设置为空,如果不为空,执行gradle publishPlugin
的时候会报错。
蚂蚁金服招聘中间件工程师,有兴趣的请联系 khotyn.huangt@alibaba-inc.com