美文网首页Intellij IDEAAndroidIntelliJ IDEA 专注
Intellij IDEA 插件开发 -- 快速发布插件到自建仓

Intellij IDEA 插件开发 -- 快速发布插件到自建仓

作者: khotyn | 来源:发表于2016-11-25 18:01 被阅读1737次

    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

    相关文章

      网友评论

      • AlexLjn:你好,看到你的文章很受益,请问:如何设置publishPlugin中的username和password为空
        khotyn:官方文档中有样例的哦:https://github.com/JetBrains/gradle-intellij-plugin#buildgradle

      本文标题:Intellij IDEA 插件开发 -- 快速发布插件到自建仓

      本文链接:https://www.haomeiwen.com/subject/xzlwpttx.html