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