最近在做一個intellij idea的插件,作用是讀取數據庫的表及字段的信息和預先定義的模板來生成代碼文件(實體,service,springmvc中的controller,freemark文件等等)。
查找了很多資料,發現intellij idea插件開發的資料不僅少而且很多文檔過期了,看了下官網的下載資料,到版本8之後就沒有發佈插件開發的api和例子資料包。開發中遇到最好的開發文檔是《IntelliJ IDEA Plugin Development》(此文檔的鏈接:http://wenku.baidu.com/link?url=0wRKHIJA7PSE4OcQBx9nVw1tcLXJsF3SNQcVEvf_lPkqdB-YE0q7GKnX6iGdRpkcJkxqODjQja0nARMx8zwkDacUqOKFpI6V0_V_-kGpfk)基本概念和例子可以在這篇文檔中很好地體現,在這裏就不重複了。這裏暫且記錄下開發中遇到的幾個印象深刻的問題(開發環境,intellij idea13):
1.配置信息的持久化
《IntelliJ IDEA Plugin Development》中的配置信息持久化方法已經過期了,而且api方式有很大問題,比如用默認的的持久化類DefaultJDOMExternalizer配置信息的屬性的訪問權限只能爲public,因爲底層用的是反射方式。應該改爲如下的配置方式:
@State( name = "com.xlight.code.generator.component.DBSettingApplicationComponent",
storages = {@Storage(file = "$APP_CONFIG$/cg.xml")})
//cg.xml默認地址 C:\Users\Administrator\.IntelliJIdea13\system\plugins-sandbox\config\options
public class DBSettingApplicationComponent implements ApplicationComponent,
Configurable, PersistentStateComponent<DBSettingApplicationComponent> {
.....................其他代碼在此處省略..................
@Nullable
@Override
public void loadState(DBSettingApplicationComponent state) {
XmlSerializerUtil.copyBean(state, this);
}
@Override
public DBSettingApplicationComponent getState() {
return this;
}
}
在路徑C:\Users\Administrator\.IntelliJIdea13\system\plugins-sandbox\config\options中可以找到持久化xml文件cg.xml
2.插件打包後插件資源文件讀取失敗問題
插件項目打包後生成了zip文件(zip內包含有class文件和資源文件的jar包),安裝後發現資源文件不能正常讀取,原因在於資源文件放在了jar文件裏面,經常有可能造成和沒有打包成jar的情況時不一樣的結果。解決方法可以參考http://www.iteye.com/topic/483115