成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

技術調研,IDEA 插件怎么開發「腳手架、低代碼可視化編排、接口生成測試」?

開發 前端
聽到這個故事就像有時候我因為需要解決某些問題去搜索、折騰、驗證、排除的技術方案,因為方向不對,所以努力也就白費。

[[419846]]

目錄

一、前言

二、拋出問題

三、開發插件涉及的問題

四、開發插件的兩種配置

1. 基礎配置

2. 遇到問題

五、寫個測試案例

1. 工程結構

2. AnAction

3. MyToolWindowFactory

4. plugin.xml

5. 測試結果

六、插件開發能做啥都

1. 快速生成 CRUD 工程代碼

2. 在 IDEA 中摸魚聊天

3. 可視化流程編排

七、總結

一、前言

不踩些坑,根本不是成熟的碼農!

你覺得肯德基全家桶是什么?一家人一起吃的桶嗎,就那么一點點?不是,肯德基全家桶說的是,雞的全家桶!

聽到這個故事就像有時候我因為需要解決某些問題去搜索、折騰、驗證、排除的技術方案,因為方向不對,所以努力也就白費。只能一次次在眾多的資料、文檔、源碼中一點點找到并組合出適合自己的問題場景的技術處理手段。

但這個過程有時候又是必須經歷的,很少有時候能一次就找到正確的答案或者人,哪怕開始就找到了,也會再去排查下其他的資料,看看還有沒有更好的。是不,這就是你吧?

二、拋出問題

我又要沖IDEA插件開發了!

在研究字節碼插樁的相關技術后,??考慮著除了通常的用在代碼上線后的非入侵式監控外,是不是也可以用于研發在開發階段對系統接口的提取呢?

帶著這個從腦袋中冒出的想法,想到如果要處理這個事情,最核心的問題就是開發一款IDEA插件+字節碼插樁能力,在代碼運行時對運行方法增強,提取相關的必要信息。別說案例還真做出來了,如下:

  • 案例地址:基于IDEA插件開發和字節碼插樁技術,實現研發交付質量自動分析
  • 后續問題:其實實現到這里還只能算是一個案例,對于 IDEA 插件開發能力并沒有完全弄透,比如這個 IDEA 插件需要做一些基礎配置,那么在哪里打開呢?還有實時監控并產生的接口信息能在 IDEA 界面右側展示出來或者支持導出嗎?如果我再有一些集合 IDEA 插件開發的能力做的其他的功能引入咋辦呢?這里用到了哪些技術呢?等等,這些問題都需要去一一解決掉,才能完完整整的開發一個可用的 IDEA 插件,為此,需要做更深入的資料整理和實踐驗證。

三、開發插件涉及的問題

問題匯總:開發一個 IDEA 插件基本要涉及到的問題過程如下:

  • 開發方式:在官網的描述中,創建IDEA插件工程的方式有兩種分別是,IntelliJ Platform Plugin 模版創建和 Gradle 構建方式。
  • 框架入口:一個 IDEA 插件開發完,要考慮把它嵌入到哪,比如是從 IDEA 窗體的 Edit、Tools 等進入配置還是把窗體嵌入到左、右工具條還是IDEA窗體下的對話框。
  • UI:思考的是窗體需要用到什么語言開發,沒錯,用的就是 Swing、Awt 的技術能力。
  • API:在 IDEA 插件開發中,一般都是圍繞工程進行的,那么基本要從通過 IDEA 插件 JDK 開發能力中獲取到工程信息、類信息、文件信息等。
  • 外部功能:這一個是用于把插件能力與外部系統結合,比如你是需要把拿到的接口上傳到服務器,還是從遠程下載文件等等。

四、開發插件的兩種配置

  • 官方文檔:https://plugins.jetbrains.com/docs/intellij/disposers.html
  • 官方案例:https://github.com/JetBrains/intellij-sdk-docs

1. 基礎配置

  • IntelliJ IDEA 2019.3.1 x64
  • JDK 需要配置 IntelliJ Platform Plugin JDK,在 Project Setting 中設置,這樣才可以正常開發 IDEA 插件
  • id 'org.jetbrains.intellij' version '0.6.3'
  • gradle-5.2.1 與 2019 IDEA 版本下的插件開發匹配
  • Settings -> Build, Execution,Deloyment -> Build Tools,配置 Gradle。Gradle user home = D:/Program Files (x86)/gradle/gradle-5.2.1/.gradle User Gradle from =gradle-wrapper.properties 或者 Specified location 具體如下圖:

如果你是使用 IDEA New Project 默認的 IntelliJ Platform Plugin 方式,其實只關注1、2兩步驟就可以了,但如果你需要 Gradle,那么需要注意3、4、5步驟的設置。當然通常也更推薦使用 Gradle 來搭建工程,這樣你在需要一些額外的 Jar 包時候,只需要在 Gradle build.gradle 配置即可,而不是把需要的 Jar 包復制到工程的 lib 下。

2. 遇到問題

在使用 Gradle 構建項目后,你會遇到幾個問題;

  • 提前下載好 Gradle 5.2.1 版本并配置上,否則構建工程自動下載會比較慢 https://gradle.org/next-steps/?version=5.2.1&format=all
  • 構建工程時候拉取相關內容,會比較慢,如果你有代理會好一些。
  • 【麻煩的問題】基于 Gradle 的 IDEA 插件開發會在構建過程中,會下載一個匹配版本的 IDEA 軟件用于啟動測試開發插件,幾百兆那種zip包 ideaIC-2019.3.1.zip。這個時候基本你會遇到一個崩潰的報錯 Could not resolve all files for configuration ':detachedConfiguration1'. 咋辦呢,如果你不嫌棄麻煩可以手動下載并SHA1加密后把下載的文件放到緩存文件夾中 .gradle\caches\modules-2\files-2.1 具體操作如下:
    • 打開系統盤下當前用戶的.gradle目錄,進入.gradle\caches\modules-2\files-2.1目錄,即為緩存文件的目錄。這個目錄是你的報錯構建過程中的報錯地址,Could not get resource D:\Program Files (x86)\gradle\gradle-5.2.1\.gradle\caches\modules-2\files-2.1\com.jetbrains.intellij.idea\ideaIC\2019.3.1
    • 加密文件夾2dae8e50d4b0508cad2e680b53414f657954f390目錄名稱(你的可能不是這樣的),我去,這個應該是加密過的,但是是什么加密呢?,經過了解知道了這個是SHA1加密,且是對文件進行SHA1的加密生成的唯一字符串,但是windows上沒有這個命令,在線SHA1也太麻煩了,還要上傳文件,于是想到了Java的API,還有就是通過git hash命令行來實現。把我們的文件ideaIC-2019.3.1.zip先臨時拷貝到這個目錄。運行sha1sum.exe ideaIC-2019.3.1.zip命令,生成唯一的唯一字符串(用來校驗文件的完整性),這樣就拿到這個2dae8e50d4b0508cad2e680b53414f657954f390目錄名
    • 接下來在2019.3.1目錄下,新建目錄2dae8e50d4b0508cad2e680b53414f657954f390,將ideaIC-2019.3.1.zip移動進去即可。
  • 【堆棧溢出】在 Gradle 構建的過程中,消耗內存較大,可能會報錯 Java heap space 所以也可以 在IDEA項目根目錄下,新建文件gradle.properties,添加如下內容,變更gradle Jvm參數 org.gradle.jvmargs=-Xmx2024m -XX:MaxPermSize=512m 別說還挺好用,竟然構建成功了。

五、寫個測試案例

1. 工程結構

  1. PluginGuide 
  2. ├── .gradle 
  3. └── src 
  4.     ├── main 
  5.     │   └── java 
  6.     │       ├── HiClazz.java 
  7.     │       ├── MyDumbAwareAction.java 
  8.     │       ├── MySearchableConfigurable.java 
  9.     │       ├── MyToolWindowFactory.java     
  10.     │       └── TestUI.java     
  11.     └── resources 
  12.         ├── icons   
  13.         └── META-INF 
  14.             └── plugin.xml  
  • HiClazz 是繼承 AnAction 的實現類,用于附著到 IDEA 的窗體上,點擊后打開對應頁面
  • MyDumbAwareAction、MyToolWindowFactory,配合使用,用于在 IDEA 最下面的窗體設置,與你看見的控制臺輸出信息位置一樣。
  • MySearchableConfigurable,可以用于 Settings 中配置窗體。
  • TestUI 是基于 Swing 開發的窗體,驗證在 AnAction 實現類中打開。
  • plugin.xml 是整個 IDEA 咖啡的配置文件,你所有的窗體都會在這個配置文件里有所體現。

2. AnAction

  1. public class HiClazz extends AnAction { 
  2.  
  3.     @Override 
  4.     public void actionPerformed(AnActionEvent e) { 
  5.         Project project = e.getData(PlatformDataKeys.PROJECT); 
  6.         PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE); 
  7.         String classPath = psiFile.getVirtualFile().getPath(); 
  8.         String title = "Hello World!"
  9.         Messages.showMessageDialog(project, classPath, title, Messages.getInformationIcon()); 
  10.     } 
  11.  

測試在 IDEA 中讀取鼠標停留在類文件中的信息。我們可以把這個 AnAction 配置到各個 IDEA 菜單中。

3. MyToolWindowFactory

  1. public class MyToolWindowFactory implements ToolWindowFactory { 
  2.  
  3.     @Override 
  4.     public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) { 
  5.  
  6.         toolWindow.setToHideOnEmptyContent(true); 
  7.  
  8.         class MyPanel extends SimpleToolWindowPanel { 
  9.  
  10.             public MyPanel(boolean vertical) { 
  11.                 super(vertical); 
  12.  
  13.                 DefaultActionGroup group = new DefaultActionGroup(); 
  14.                 group.add(new MyDumbAwareAction("Login1")); 
  15.                 group.add(new MyDumbAwareAction("Login2")); 
  16.                 group.add(new MyDumbAwareAction("Login3")); 
  17.  
  18.                 ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar("ToolBar"groupfalse); 
  19.                 setToolbar(toolbar.getComponent()); 
  20.             } 
  21.  
  22.         } 
  23.  
  24.         // 添加一個頁 
  25.         toolWindow.getContentManager().addContent(ContentFactory.SERVICE.getInstance().createContent(new MyPanel(false), "First"false), 0); 
  26.  
  27.     } 
  28.  
  • 在 IDEA 的最下面窗體中,如果想展示自己的窗體,則需要開發對應的 ToolWindowFactory 實現類,這樣才可以展示你的內容。
  • 這里的思想基本是 Swing 技術的開發方式,如果你不熟悉 Swing 最這塊內容會比較陌生。

4. plugin.xml

  1. <extensions defaultExtensionNs="com.intellij"
  2.     <!-- Add your extensions here --> 
  3.     <toolWindow canCloseContents="true" anchor="bottom" 
  4.                 id="SmartIM" 
  5.                 factoryClass="MyToolWindowFactory"
  6.     </toolWindow> 
  7.      
  8.     <!-- 在Setting中添加自定義配置模版 --> 
  9.     <projectConfigurable groupId="Other Settings" displayName="My Config" id="thief.id" 
  10.                          instance="MySearchableConfigurable"/> 
  11. </extensions> 
  12.  
  13. <actions> 
  14.     <!-- Add your actions here --> 
  15.     <action id="HiId_FileMenu" class="HiClazz" text="HiName"
  16.         <add-to-group group-id="FileMenu" anchor="first"/> 
  17.         <add-to-group group-id="MainMenu" anchor="first"/> 
  18.         <add-to-group group-id="EditMenu" anchor="first"/> 
  19.         <add-to-group group-id="ViewMenu" anchor="first"/> 
  20.         <add-to-group group-id="CodeMenu" anchor="first"/> 
  21.         <add-to-group group-id="AnalyzeMenu" anchor="first"/> 
  22.         <add-to-group group-id="RefactoringMenu" anchor="first"/> 
  23.         <add-to-group group-id="BuildMenu" anchor="first"/> 
  24.         <add-to-group group-id="RunMenu" anchor="first"/> 
  25.         <add-to-group group-id="ToolsMenu" anchor="first"/> 
  26.         <add-to-group group-id="WindowMenu" anchor="first"/> 
  27.         <add-to-group group-id="HelpMenu" anchor="first"/> 
  28.     </action
  29.     <action id="HiId_EditorPopupMenu" class="HiClazz" text="HiName"
  30.         <add-to-group group-id="EditorPopupMenu" anchor="first"/> 
  31.     </action
  32.     <action id="HiId_MainToolBar" class="HiClazz" text="HiName"
  33.         <add-to-group group-id="MainToolBar" anchor="first"/> 
  34.     </action
  35. </actions> 

在 plugin.xml 的配置中,主要是把各個功能實現窗體配置到對應的菜單下,比如 Tools 下、toolWindow 里等。

5. 測試結果

啟動運行

  • IDEA 插件開發運行會基于 Plugin 或者 Gradle 下配置的 ::runIde

運行界面

  • 在 IDEA 的各個菜單中都可以看到新增加的 HiName 插件,在你實際開發的時候選擇需要的內容進行配置即可。

運行效果

當鼠標點到類的上,在點 HiName 就可以看到對應的工程類信息了。

六、插件開發能做啥都

在 GitHub 上搜索 IDEA 插件開發,一共有44頁內容,https://github.com/search?p=41&q=idea%E6%8F%92%E4%BB%B6&type=Repositories 涉及到自動化測試、工程腳手架、API生成、生成數據庫的DAO類、一些常用工具,當然還有一些比較有意思的,比如:摸魚看書、聽郭德綱相聲、微信聊天、局域網聊天、英語翻譯等等。這里我給大家列舉幾個,開闊開闊思路。

1. 快速生成 CRUD 工程代碼

  • 地址:https://github.com/mars05/crud-intellij-plugin
  • 描述:一個增刪改查的idea插件,可以根據數據庫表結構,幫助您快速生成model、dao、service、controller等相關代碼。同時支持MyBatis、JPA、MybatisPlus。

2. 在 IDEA 中摸魚聊天

地址:https://github.com/Jamling/SmartIM4IntelliJ

描述:ntelliJ IDEA上的SmartIM(原SmartQQ)插件,可以在IDEA中使用QQ或微信聊天。安裝成功后,會在底部欄出現一個SmartIM的tab(如果沒有底部欄,則在菜單View中把ToolButtons勾選上)

3. 可視化流程編排

  • 地址:https://github.com/alibaba/compileflow
  • 描述:compileflow Process引擎是淘寶工作流TBBPM引擎之一,是專注于純內存執行,無狀態的流程引擎,通過將流程文件轉換生成java代碼編譯執行,簡潔高效。當前是阿里業務中臺交易等多個核心系統的流程引擎。在阿里巴巴中臺解決方案中廣泛使用,支撐了導購、交易、履約、資金等多個業務場景。

七、總結

IDEA 開發技術涉及到了對 IDEA 插件開發 API 的熟悉以及UI界面的開發,所以如果想開發一款 IDEA 插件,基本離不開對 Swing 的編寫,不過也不需要太復雜的頁面,所有這部分技能還好。

IDEA 官網文檔僅提供了兩種構建 IDEA 插件工程的方法,但更推薦 Gradle 方式,這樣可以滿足你對后續其他功能組件的便捷引入,以及做其他內容的擴展。

IDEA 插件開發可以開發出很多用于提效研發編程的技術插件,例如一些監控、腳手架、接口API以及調試、流程化低代碼編排等等,所以這部分內容的價值還是蠻大的。

 

責任編輯:武曉燕 來源: bugstack蟲洞棧
相關推薦

2022-04-15 11:32:20

IDE工具鴻蒙操作系統

2025-05-26 08:45:00

AvueVue.js前端

2021-03-25 07:30:24

代碼開發數據

2023-07-14 10:53:00

開源前端

2014-08-15 09:36:06

2021-01-07 05:34:07

腳手架JDK緩存

2022-01-14 14:09:11

腳手架代碼自定義

2018-06-11 14:39:57

前端腳手架工具node.js

2018-08-30 16:08:37

Node.js腳手架工具

2021-11-08 09:35:09

Vue代碼前端

2021-12-23 10:35:32

SpringCloud腳手架架構

2016-09-07 15:35:06

VueReact腳手架

2025-05-16 07:24:41

Springkafka腳手架

2020-03-11 14:39:26

數據可視化地圖可視化地理信息

2021-04-28 16:10:48

開發腳手架 Spring

2021-05-13 17:02:38

MDC腳手架日志

2021-07-13 18:42:38

Spring Boot腳手架開發

2021-04-13 14:47:53

認證授權Java

2021-04-28 08:38:37

Jenkins Dashboard可視化部署

2017-02-23 09:42:53

大數據數據可視化技術誤區
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧洲精品在线观看 | 国产一区二区自拍 | 日韩综合 | 国产精品久久 | 亚洲精品久久久久国产 | 91精品久久久久久久久久入口 | 午夜视频在线免费观看 | 中国一级大毛片 | av中文字幕网 | 国产成人精品综合 | 中文字幕电影在线观看 | 国产激情一区二区三区 | 亚洲精品国产综合区久久久久久久 | 国产不卡在线观看 | 91国内外精品自在线播放 | 国产精品亚洲欧美日韩一区在线 | 久久精品99 | 午夜精品久久久久久久久久久久久 | 国产剧情一区二区三区 | 欧美一级全黄 | 久久亚洲精品久久国产一区二区 | 羞羞视频免费在线观看 | 亚洲成人网在线观看 | 精品国产乱码久久久久久久久 | 久久激情视频 | 日本成人中文字幕 | 国产在视频一区二区三区吞精 | 国产午夜精品一区二区三区四区 | 午夜精品久久久久久久久久久久久 | 丁香综合 | 久久国产欧美日韩精品 | 成人午夜精品 | 免费一区二区三区 | 国产欧美日韩在线观看 | 国产在线观看免费 | 精品久久香蕉国产线看观看亚洲 | 一区二区三区国产 | 国产精品国产成人国产三级 | 美女国内精品自产拍在线播放 | 日韩在线一区二区三区 | 涩涩视频在线播放 |