在idea中新建的text文件_開發屬于自己的第一款 IDEA 插件!

往期熱門文章:

1、往期精選優秀博文都在這里了!2、又一個程序員跑路刪庫跑路被抓了,導致服務器癱瘓 36 個小時!3、恕我直言,有了這款 IDEA 插件,你可能只需要寫 30% 的代碼。。。4、Java8 的 Stream API 的確牛X,但性能究竟如何呢?5、關于MySQL索引面試題的6連炮!招架的住嗎?6、真香!IDEA 最新版本,支持免打擾和輕量模式!

作者:木杉來源:http://dwz.date/BxH寫Java代碼的時候,經常會涉及到重復性的操作,這個時候就會想要是有這樣一個插件就好了,如果是大家都會遇到的場景,IDE或許已經提供了,再不然也有可能有人編寫了相關的插件。要是這個操作是你們的編碼環境特有的,那就只能自己寫工具了。所以這里來學學如何編寫IDEA插件,讓自己的編程環境更加強大,更好的進行裝逼。

一、開發環境

開發IDEA插件有以下這些依賴:
  • IntelliJ IDEA Community Edition
  • IntelliJ IDEA Community Edition 源碼
  • Plugin DevKit 插件
  • IntelliJ Platform SDK

1.1、安裝IntelliJ IDEA Community Edition

你可能已經安裝了Ultimate版本,但是你還是需要安裝IDEA的社區版本。因為商業版是閉源的,所以在調試時無法調試核心代碼。

1.2、下載IntelliJ IDEA Community Edition源碼

社區版的安裝包里是不包含源碼的,所以我們需要手動從github上clone一份:
git clone --depth 1 git://git.jetbrains.org/idea/community.git idea
關于從源碼運行IDEA的方法參考 Check Out And Build Community Edition:http://www.jetbrains.org/intellij/sdk/docs/basics/checkout_and_build_community.html

1.3、添加IDEA jdk

雖然不知道原因,但是根據Check Out And Build Community Edition:http://www.jetbrains.org/intellij/sdk/docs/basics/checkout_and_build_community.html我們需要建立一個IDEA jdk來運行插件:c4a631f45c111af7471d31e664bb4c5a.png除非你在Mac上使用官方JDK,否則你需要手動添加/lib/tools.jar到classpath中。

1.4、配置IntelliJ Platform SDK

打開File | Project Structure新建一個IntelliJ Platform SDK5dab124a992013d6286185e33e92bb51.pngJava SDK選擇我們剛剛建立的IDEA jdk19ea4fddac6813a1723253082b5d8e1d.png然后我們可以把下載的IDEA社區版源碼添加到源碼路徑中,這樣在調試時,就可以調試IDEA自身的代碼了:7f58119f1fdc500c41fa4b27ac2b0a06.png296bb022b8130c309daba2031f58c2a0.png

二、第一個插件

我們來編寫一個最簡單的插件來學習編寫一個插件的完整步驟。

2.1、新建工程

選擇IntellJ Platform Plugin,然后Project SDK指定剛剛新建的plugin sdk:62307557b699c41d1778aea39287fb0b.png新建的插件項目:68843e64cdb41ef4b7acf2db3cec3624.png插件根目錄下有兩個目錄srcresourcessrc是插件代碼目錄,resource是插件資源目錄,其中META-INF/plugin.xml是插件的描述文件,就像Java web項目的web.xml一樣。plugin.xml默認的內容如下:
  com.your.company.unique.plugin.id  Plugin display name here  1.0  "support@yourcompany.com" url="http://www.yourcompany.com">YourCompany[   //mp.weixin.qq.com/s/PiAxqEhkR8g1AOYGGS5Yqw)      Enter short description for your plugin here.      most HTML tags may be used    ]]>[   //mp.weixin.qq.com/s/PiAxqEhkR8g1AOYGGS5Yqw)      Add change notes here.      most HTML tags may be used    ]]>      "145.0"/>      "com.intellij">              

2.2、新建一個Action

插件擴展IDEA最常見的方式就是在菜單欄或者工具欄中添加菜單項,用戶通過點擊菜單項來觸發插件功能。IDEA提供了AnAction類,這個類有一個虛方法actionPerformed,這個方法會在每次菜單被點擊時調用。新建一個自定義的Action有兩個步驟:
  1. 繼承AnAction類,在actionPerformed方法中實現插件邏輯
  2. 注冊action,有兩種方式,通過代碼注冊和通過plugin.xml注冊
我們先寫一個簡單的Action類:
publicclass TextBoxes extends AnAction {// 如果通過Java代碼來注冊,這個構造函數會被調用,傳給父類的字符串會被作為菜單項的名稱// 如果你通過plugin.xml來注冊,可以忽略這個構造函數public TextBoxes() {// 設置菜單項名稱super("Text _Boxes");// 還可以設置菜單項名稱,描述,圖標// super("Text _Boxes","Item description",IconLoader.getIcon("/Mypackage/icon.png"));    }public void actionPerformed(AnActionEvent event) {        Project project = event.getData(PlatformDataKeys.PROJECT);        String txt= Messages.showInputDialog(project, "What is your name?", "Input your name", Messages.getQuestionIcon());        Messages.showMessageDialog(project, "Hello, " + txt + "!\n I am glad to see you.", "Information", Messages.getInformationIcon());    }}
然后我們在plugin.xml中注冊這個Action:
  "MyPlugin.SampleMenu" text="_Sample Menu" description="Sample menu">    "MainMenu" anchor="last"  />       "Myplugin.Textboxes"class="Mypackage.TextBoxes" text="Text _Boxes" description="A test menu item" />  
這里我們新建了一個菜單組,其中text字符串的下劃線表示這個字母作為快捷鍵。這個菜單顯示的效果如下:b932a5a6216a3bc906c07bac0a7efe0f.png除了手動新建Action,IDEA還提供了快速新建的方法,在代碼目錄上點擊新建,可以看到Action:180d9f1679c10ae2fb133192b4373554.png可以在這個面板中填寫你要新建的Action信息,IDEA會幫你新建類,還有在plugin.xml中幫你注冊:29d1d8b4d11716ca12b6cee742cb8b44.png

2.3、運行插件

運行插件特別簡單,和運行普通Java代碼一樣,點擊運行或者調試的按鈕,就會啟動一個新的IDEA實例,這個實例中插件是生效的。點擊Text Boxes就可以看到插件的效果了。

三、參考資料

  • Setting Up a Development Environment
  • How to make an IntelliJ IDEA plugin in less than 30 minutes
往期熱門文章:

1、歷史文章分類導讀列表!精選優秀博文都在這里了!2、關于MySQL索引面試題的6連炮!招架的住嗎?3、MyBatis她不香嗎?為啥老外卻喜歡Hibernate/Jpa?4、代碼對比工具,我就用這7個!5、Mybatis 中經典的 9 種設計模式!面試可以吹牛了!6、海量交易訂單查詢沒做“重試”,一哥們“喜提”P3故障!7、2020年Java框架排行榜,誰居榜首?8、格式化時間用了YYYY-MM-dd,元旦當天老板喊我回去改Bug!9、除了 P 站,程序員在摸魚時還喜歡上這些網站...1039 個奇葩代碼注釋,看完笑哭了。。。0eae387bc3c00795aec63006a06373dc.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385946.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385946.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385946.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql數據庫開發的36條軍規

前言 一般的小項目,比如幾百人左右訪問的項目,訪問量幾萬的項目,如果想用緩存,單機實例完全夠用。小黃圖就是用的阿里云256MB配置的Redis緩存,日幾千的訪問量是妥妥夠用的了。Redis號稱可以支撐10wqps,當然…

mysql 替換非中文_mysql中的正則操作 匹配手機號,匹配中文,替換

mysql中的正則操作 匹配手機號,匹配中文,替換正則匹配hy_user表內tel字段的電話號碼:SELECT * FROM hy_user WHERE tel REGEXP "[1][35678][0-9]{9}"SELECT tel FROM hy_user WHERE tel REGEXP "[1][35678][0-9]{9}"SELE…

mysql數據庫引擎怎么看,值得收藏!

什么是Service Mesh 作為Service Mesh技術探索和實踐的先行者,全球第一個真正的Service Mesh項目Linkerd負責人、Buoyant公司創始人兼CEO William Morgan第一次完整地闡述了Service Mesh。按照William Morgan的定義,Service Mesh是一個致力于解決服務間…

mysql error -1_【Mysql】SQLException:?Got?error?-1?from?storage?engine?問題解決!

錯誤信息:Caused by: java.sql.BatchUpdateException: Got error -1 from storageengineatcom.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.atcom.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.atorg.apache.spark.sql.…

Mysql 查詢blob數據很慢_blob存入數據庫很慢

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云數據庫專家保駕護航,為用戶…

mysql數據庫文件位置

01 前言 辛苦奮斗兩個月,秋招終于圓滿收官,拿到了頭條、字節、菜鳥、騰訊、網易的offer,這要多虧了意外得到的這份資料文檔,這么多面試全都靠它了,哈哈~~有好東西還是要分享出來給大家,一起學習呀 Java核心…

mysql的altertable_mysqlaltertable修改表命令詳細介紹

MySQL ALTER語法如下:ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]alter_specification:ADD [COLUMN] create_definition [FIRST | AFTER column_name ]or ADD INDEX [index_name] (index_col_name,...)or ADD PRIMARY KEY (index_col_name,...)or…

mysql數據庫連接失敗,挑戰大廠重燃激情!

一、阿里 (會員中臺) 1. Java 重寫hashcode()是否需要重寫equals(),不重寫會有什么后果 2. 并發 自旋鎖和阻塞鎖的區別公平鎖和非公平鎖的區別jdk中哪種數據結構或工具可以實現當多個線程到達某個狀態時執行一段代碼柵欄和閉鎖的區別如何…

mysql 鏈式查詢_MySQL的鏈接查詢

內連接 inner join ....on...../join ....on... :將兩個表中同時符合on條件的記錄查詢出來 inner可以省略select *from person inner join card on person.cardidcard.cardid;外連接 分為左連接、右連接,完全連接左連接:left join ....on…

大廠必備!不斷提升自己創造溢價的能力

前言: 金九銀十過了金三銀四還會遠嘛,本文后面分享面試題給正準備跳槽,準備找工作的你,這次面試字節跳動也是做了很多的準備,還好順利拿到了offer,特分享一下這次的4面技術面真題,可能有些記不全了&#x…

MySQL安裝板多少錢_MySQL安裝板怎么安裝

展開全部1首先,你需要個安裝包,自個去下0如何在官網下載MySQL 數據庫2第一步中,選擇32313133353236313431303231363533e58685e5aeb931333365666165I accept license term,然后Next3默認選第一項Developer Default ,然后Next4這一步中&#xf…

大廠必備!阿里、字節跳動、京東、騰訊、小米等名企高頻面試

一、前言 k8s全稱kubernetes,是目前大熱的一個可移植容器的編排管理工具,像AWS、Azure、Google、阿里云、騰訊云等主流的公有云提供的都是基于k8s的容器服務,很多其他廠商也在努力跟進中,所以說“kubernetes”是目前容器行業中最…

mysql myisam 鎖機制_MySQL--MyISAM之鎖機制

一、概述MySQL有三種鎖的級別:頁級、表級、行級。MyISAM存儲引擎采用的是表級鎖(table-level locking);MySQL這3種鎖的特性可大致歸納如下:表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大&#…

大廠架構師經驗分享!成功跳槽字節跳動

前言 毫不夸張地說,JVM是現代軟件工程最成功的案例之一。因為它自帶GC,又有無數可以微調的參數,且運行極其穩定可靠,所以,許多廠商的核心業務系統,才敢放心地用Java編寫,運行在JVM之上。 近幾…

java停車場管理系統程序設計代碼_社區養老服務管理系統,java程序設計

登錄界面菜單功能界面1菜單功能界面2菜單功能界面3社區養老服務管理系統設計與實現springspringMVCmybatis框架對象(javaBean,pojo)設計:服務工單javaBean創建語句如下:package project.model;import org.springframework.format.annotation.DateTimeFor…

大廠面試必問!50w字+的Java技術類校招面試題匯總

前言 剛剛過去的雙十一,讓“高性能”“高可用”“億級”這3個詞變成了技術熱點詞匯,也讓很多人再次萌發成為「架構師」的想法。先問大家一個問題:你覺得把代碼熟練、完成需求加上點勤奮,就能成為架構師么?如果你這么認…

c++客戶端發送加鎖_MySQL語句加鎖分析詳解

前言建立一個存儲三國英雄的hero表:CREATE TABLE hero ( number INT, name VARCHAR(100), country varchar(100), PRIMARY KEY (number), KEY idx_name (name)) EngineInnoDB CHARSETutf8;然后向這個表里插入幾條記錄:INSERT INTO hero V…

大廠面試必問!如何寫出高效率的SQL

前言 Spring框架自2002年誕生以來一直備受開發者青睞,它包括SpringMVC、SpringBoot、Spring Cloud、Spring Cloud Dataflow等解決方案。有人親切的稱之為:Spring 全家桶。 很多研發人員把spring看作心目中最好的java項目,沒有之一。所以這是…

accsess轉成mysql語句_輕松教你SQL轉ACCESS

SQL數據庫轉access數據庫步驟: 1. 建立access數據庫:在access中建立access數據庫和表,access字段類型與sql中字段類型的對應關系。 2. 在Access中建表是應注意它的保留關鍵字:比如Password 如果表中的某個字段使用了關鍵字&#x…

大廠首發:2021年Java工作或更難找

前言 提起MySQL,其實網上已經有一大把教程了,為什么我還要寫這篇文章呢,大概是因為網上很多網站都是比較零散,而且描述不夠直觀,不能系統對MySQL相關知識有一個系統的學習,導致不能形成知識體系。為此我撰…