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

IntelliJ IDEA插件之開發兩種方式創建插件工程

開發 前端
對于碼農這一行業的編程學習生涯來說,會遇到很多的不會,不會搭建IDEA工程、不會寫老師的案例、不會完成書中的效果、不會做項目的需求、不會實現復雜的邏輯、不會抽象工程的結構等等。

[[429681]]

本文轉載自微信公眾號「bugstack蟲洞棧」,作者小傅哥。轉載本文請聯系bugstack蟲洞棧公眾號。

一、前言

并不是所有的不會,都是真不會!

對于碼農這一行業的編程學習生涯來說,會遇到很多的不會,不會搭建IDEA工程、不會寫老師的案例、不會完成書中的效果、不會做項目的需求、不會實現復雜的邏輯、不會抽象工程的結構等等。但這些不會當中并不是所有的不會,都因為太復雜學不會,而是很大一部分內容因為找不到好的資料、沒有清晰的文檔、缺少完整的案例,導致不知道所以不會。

正好最近在折騰IDEA插件開發的時候,市面的資料確實不多,也沒有成體系完整的開發指導手冊,所以就遇到了很多不知道就不會的事情,需要一點點查詢搜索源碼、驗證API接口,最終把各項功能實現,當然在這個過程中也確實踩了不少坑!

好!沉淀下來,接下來在這個專欄會把一些關于 IDEA 插件開發用到的各項知識做成案例輸出出來,一方面可以讓自己縷清所有的知識項,另一方面也可以幫助到更多的有需要的研發人員使用。

二、需求目的

可能你會想什么場景會需要用到插件開發,其實插件開發算是一種通用的解決方案,由服務平臺定義標準讓各自使用方進行自需的擴展。

這就像我們非常常用的 P3C 代碼檢查插件、代碼審計插件、腳手架工程創建插件、自動化API提取插件、單元測試統計插件等等,這些都是在 IDEA 代碼開發平臺擴展出來的各項功能插件。

插件也可以說是一種解決方案,其實與你在代碼編程時使用人家已經定義好的標準結構和功能下,擴展出自己的功能時是一樣的。而這種方式也可以非常好的解決一些屬于代碼開發期間不易于放到代碼提測后問題場景,并能及時提醒研發人員作出響應的修改處理。

三、環境說明

  • IntelliJ Platform Plugin JDK 不是自己安裝的JDK1.8等,只有插件JDK才能開發插件
  • IntelliJ IDEA 2019.3.1 x64 如果你是其他版本,會涉及到 插件工程創建后版本修改
  • gradle-5.2.1 與 2019 IDEA 版本下的插件開發匹配,如果遇到一些環境問題可以參考我們開篇介紹

在官方文檔 https://plugins.jetbrains.com/docs/intellij/disposers.html 介紹開發 IDEA 插件的工程方式有兩種,分別是模板方式和 Gradle 工程方式。這里我們分別演示下不同方式下工程的創建和所涉及到知識點內容的介紹,雖然兩種方式都能創建 IDEA 插件工程,但更推薦使用 Gradle 方式。

四、模板方式創建

1. 創建引導

  1. New -> Project -> IntelliJ Platform Plugin 

2. 工程結構

guide-idea-plugin-create-project-by-platform

├── resources

│ └── META-INF

│ └── plugin.xml

└── src

└── cn.bugstack.guide.idea.plugin

└── MyAction.java

源碼:https://github.com/fuzhengwei/guide-idea-plugin-create-project-by-platform

  • plugin.xml 插件配置:開發描述、版本信息、Action事件入口、擴展信息(數據存放等)
  • src 具體的事件、UI窗體、工程邏輯代碼開發
  • 另外類似 MyAction 的創建并不是直接創建普通類,而是通過 New -> Plugin DevKit -> Action 的方式進行創建,因為這樣的創建方式可以在 plugin.xml 中自動添加 action 配置。當然如果你要是自己手動創建普通類那樣創建 Action 類,則需要自己手動處理配置信息。

3. plugin.xml 配置

  1. <idea-plugin> 
  2.   <id>cn.bugstack.guide.idea.plugin</id> 
  3.   <name>CreateProjectByPlatform</name
  4.   <version>1.0</version> 
  5.   <vendor email="184172133@qq.com" url="https://bugstack.cn">小傅哥</vendor> 
  6.  
  7.   <description><![CDATA[ 
  8.       基于IDEA插件模板方式創建測試工程<br> 
  9.       <em>1. 學習IDEA插件工程搭建</em> 
  10.       <em>2. 驗證插件基礎功能實現</em> 
  11.     ]]></description> 
  12.  
  13.   <change-notes><![CDATA[ 
  14.       插件開發學習功能點<br> 
  15.       <em>1. 工程搭建</em> 
  16.       <em>2. 菜單讀取</em> 
  17.       <em>3. 獲取配置</em> 
  18.       <em>4. 回顯頁面</em> 
  19.     ]]> 
  20.   </change-notes> 
  21.  
  22.   <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description --> 
  23.   <idea-version since-build="173.0"/> 
  24.  
  25.   <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html 
  26.        on how to target different products --> 
  27.   <depends>com.intellij.modules.platform</depends> 
  28.  
  29.   <extensions defaultExtensionNs="com.intellij"
  30.     <!-- Add your extensions here --> 
  31.   </extensions> 
  32.  
  33.   <actions> 
  34.     <!-- Add your actions here --> 
  35.     <action id="MyAction" class="cn.bugstack.guide.idea.plugin.MyAction" text="MyAction" description="MyAction"
  36.       <add-to-group group-id="FileMenu" anchor="first"/> 
  37.     </action
  38.  
  39.   </actions> 
  40.  
  41. </idea-plugin> 

這里重點看 actions 其他上面的工程信息、版本描述、個人資料都按照自己的信息填寫就行,不會影響插件運行。

actions 下是關于所有事件入口的配置,也就是你希望讓你的 IDEA 插件在 IDEA 窗體中什么地方展示,以及配置快捷鍵等。這里的配置說明是在 FileMenu 下的第一個入口即為你的插件。

4. MyAction 事件入口

  1. ![1-04](https://bugstack.cn/assets/images/middleware/guide-idea-plugin-1-04.png)![1-04](https://bugstack.cn/assets/images/middleware/guide-idea-plugin-1-04.png)public class MyAction 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.  
  9.         Messages.showMessageDialog(project, "guide-idea-plugin-create-project-by-platform: " + classPath, "Hi IDEA Plugin", Messages.getInformationIcon()); 
  10.     } 
  11.  
  • 在 MyAction 事件入口中獲取 Project 工程信息、PsiFile 文件信息,以及對應的類路徑。
  • 最后在 Messages.showMessageDialog 下打印,這樣把鼠標放到工程類下,在點這個按鈕的時候就可以看到類的路徑彈窗了。

5. 運行測試

運行過程

  • 點擊 Plugin 綠色箭頭,和正常啟動程序一樣
  • 這個時候它會打開一個新的 IDEA 工程,并在這個工程中默認安裝你開發好的插件
  • 在新打開的 IDEA 插件工程中,選中工程類后,點擊 File -> MyAction

運行結果

通過測試運行效果可以看到,已經可以打出工程下類的路徑信息了。你也可以嘗試把Action的入口放到其他按鈕下進行測試

五、Gradle 方式創建

1. 創建引導

New -> Project -> Gradle 選中 Java & IntelliJ Platform Plugin

2. 工程結構

  1. guide-idea-plugin-create-project-by-gradle 
  2. ├── .gradle 
  3. └── src 
  4.     ├── main 
  5.     │   └── java 
  6.     │    └── cn.bugstack.guide.idea.plugin  
  7.     │        └── MyAction.java     
  8.     ├── resources 
  9.     │   └── META-INF 
  10.     │       └── plugin.xml  
  11.     ├── build.gradle   
  12.     └── gradle.properties 

源碼:https://github.com/fuzhengwei/guide-idea-plugin-create-project-by-gradle

  • 與模板方式創建 Gradle 主要差異在 build.gradle、gradle.properties 內容的配置,這兩個文件主要是處理 Gradle 相關信息的,其中 gradle.properties 用于配置 JVM Xmx 參數的,避免下載耗費資源較大崩潰。
  • plugin.xml 配置插件入口等內容,MyAction 是事件入口。

3. build.gradle 配置

  1. plugins { 
  2.     id 'java' 
  3.     id 'org.jetbrains.intellij' version '0.6.3' 
  4.  
  5. group 'cn.bugstack.guide.idea.plugin' 
  6. version '1.0-SNAPSHOT' 
  7.  
  8. sourceCompatibility = 1.8 
  9.  
  10. repositories { 
  11.     mavenCentral() 
  12.  
  13. dependencies { 
  14.     testCompile group'junit'name'junit', version: '4.12' 
  15.  
  16. // See https://github.com/JetBrains/gradle-intellij-plugin/ 
  17. intellij { 
  18.     version '2019.3.1' 
  19. patchPluginXml { 
  20.     changeNotes ""
  21.       <![CDATA[ 
  22.       插件開發學習功能點<br> 
  23.       <em>1. 工程搭建</em> 
  24.       <em>2. 菜單讀取</em> 
  25.       <em>3. 獲取配置</em> 
  26.       <em>4. 回顯頁面</em> 
  27.     ]]>""

gradle 與 maven 的使用配置上,還是可以相通的找到一些類似的地方的,如果沒有使用過 gradle 也是可以使用的。

這里需要注意 plugins 中 id 'org.jetbrains.intellij' version '0.6.3' 默認創建工程的版本有點高,與 gradle 5.x 不匹配。不過你可以嘗試調試合適版本進行使用

4. MyAction 事件入口

  1. public class MyAction 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.  
  9.         Messages.showMessageDialog(project, "guide-idea-plugin-create-project-by-gradle: " + classPath, "Hi IDEA Plugin", Messages.getInformationIcon()); 
  10.     } 
  11.  

這里與模板方式創建的案例是一樣的,為了區別兩個插件測試,我們這里打印了工程的名稱。當然你也可以使用 project.getName() 獲取工程名稱。

5. 運行測試

Gradle 測試運行相當于是運行 :runIde ,也是和普通的代碼調試一樣。

運行結果

通過測試運行效果可以看到,已經可以打出工程下類的路徑信息了。

六、總結

整篇內容的學習還是蠻簡單的,哪怕你之前沒開發過 IDEA 插件,按照這樣的套路往下折騰也是可以完成插件開發的。類似這樣的知識內容只是平時常做業務開發所以接觸的也不多,乍一聽上去還是很陌生的,不過有這樣的資料就可以上手了。

本章節初步介紹 IDEA 插件的方式和一個非常簡單的基本功能,后續我們在 Gradle 創建插件的基礎上,繼續開發其他案例功能,逐步學習 IDEA 插件開發用到的各項技巧用于完成所需要解決的問題。 

在學習的過程中可以自行嘗試擴展一些其他組件入口,打印不同的工程信息。就像你使用的一些的插件一樣,幫助你生成get、set,或者提取采集接口信息,也包括你寫了多少行代碼,思考它們是如何實現的。

 

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

2023-11-13 18:01:15

開發工具Java

2016-01-14 09:52:21

JavaIntelliJ ID插件

2011-03-23 11:22:14

oracle dbli

2024-10-08 22:00:29

2023-10-10 14:54:31

插件開發

2023-12-03 18:26:25

IDEA插件

2011-03-03 10:26:04

Pureftpd

2010-08-03 13:27:04

FlexBuilder

2023-09-21 22:56:32

插件開發

2009-06-04 20:26:45

2022-06-29 08:59:46

Java插件開發

2025-03-04 03:00:00

Java開發IDEA

2023-05-14 22:55:00

插件IntelliJIDEA

2019-07-12 09:18:22

IntelliJ ID插件插件庫

2023-07-06 14:37:05

2023-11-01 18:01:02

改進WakaTime編程

2015-10-09 09:51:29

Web API認證

2022-04-29 11:13:08

K8s資源Linux

2024-02-02 18:14:17

IDEA插件開發

2009-04-01 17:18:20

IntelliJ IDIDE聲控插件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 男女免费观看在线爽爽爽视频 | 国产精品视频久久久久久 | 国产亚洲欧美日韩精品一区二区三区 | 国产精品高潮呻吟久久 | 日本三级网址 | 免费看片在线播放 | 亚洲精品1区 | 免费h在线 | 久久国产激情视频 | 亚洲一区二区三区四区视频 | 欧美精品综合在线 | 国产激情视频网 | 黄色一级毛片免费看 | 中文字幕一区二区三区四区 | 国产精品一二区 | 在线免费视频一区 | 色婷婷影院 | 国产精品入口久久 | 久久精品一级 | 一区二区国产精品 | 中文字幕av亚洲精品一部二部 | 免费一级黄色录像 | 在线看片网站 | 国产成人aⅴ | 久久久久国色av免费观看性色 | 五月激情婷婷六月 | eeuss国产一区二区三区四区 | 日韩av在线一区 | 天堂一区 | 欧美日韩国产不卡 | 黄色在线观看网址 | 手机av免费在线 | 精品久久久久久一区二区 | 精品久久久久久久人人人人传媒 | 精品国产乱码久久久久久88av | 久热久热 | 午夜影院普通用户体验区 | 中文字幕 亚洲一区 | 久久久久久免费看 | 91亚洲国产| 2022精品国偷自产免费观看 |