当前位置: 首页 > 后端技术 > Java

技术研究,如何开发IDEA插件“脚手架、低代码可视化编排、界面生成测试”?

时间:2023-04-02 09:14:43 Java

浣滆€咃細灏忓倕鍗氬锛歨ttps://bugstack.cn娌夋穩锛屽垎浜紝鎴愰暱锛岃鑷繁鍜屼粬浜烘湁鎵€鏀惰幏锛侌煒?.濡傛灉浣犱笉韪╁墠瑷€涓殑涓€浜涘潙锛屼綘鏍规湰灏变笉鏄竴涓垚鐔熺殑coder锛佷綘瑙夊緱鑲痉鍩哄叏瀹舵《鎬庝箞鏍凤紵鏄笉鏄叏瀹朵竴璧峰悆涓€妗讹紝灏变竴鐐圭偣锛熶笉瀵癸紝鑲痉鍩哄叏瀹舵《璇寸殑鏄偢楦″叏瀹舵《锛佸惉杩欎釜鏁呬簨灏卞儚鏈夋椂鍊欏洜涓洪渶瑕佽В鍐虫煇浜涢棶棰橈紝鎵€浠ラ渶瑕佸幓鎼滅储銆佹姌鑵俱€侀獙璇併€佹窐姹版妧鏈柟妗堛€傚洜涓烘柟鍚戦敊浜嗭紝鎴戠殑鍔姏灏辩櫧璐逛簡銆備綘鍙兘浠庢捣閲忕殑璧勬枡銆佹枃妗c€佹簮鐮佷腑涓€鐐逛竴鐐圭殑瀵绘壘鍜岀粍鍚堥€傚悎鑷繁闂鍦烘櫙鐨勬妧鏈柟妗堛€備絾杩欎釜杩囩▼鏈夋椂鏄繀椤昏缁忚繃鐨勩€傚緢闅惧湪绗竴鏃堕棿鎵惧埌姝g‘鐨勭瓟妗堟垨浜恒€傚氨绠椾竴寮€濮嬫壘鍒颁簡锛屼篃浼氬幓鏌ュ叾浠栫殑璧勬枡锛岀湅鐪嬫湁娌℃湁鏇村ソ鐨勩€傝繖涓嶆槸浣犲悧锛?.鎶涘嚭闂鎴戝噯澶囬噸鏂板紑鍙慖DEA鎻掍欢锛佺爺绌朵簡瀛楄妭鐮佹彃妗╃殑鐩稿叧鎶€鏈悗锛岎煠旇€冭檻闄や簡閫氬父浠g爜涓婄嚎鍚庣殑闈炰镜鍏ュ紡鐩戞帶澶栵紝鏄惁涔熷彲浠ュ湪寮€鍙戦樁娈电敤鏉ユ彁鍙栫郴缁熸帴鍙o紵鏈変簡杩欎釜鎯虫硶锛屾垜鎯冲鏋滆澶勭悊杩欎欢浜嬶紝鏍稿績闂鏄紑鍙戜竴涓狪DEA鎻掍欢+瀛楄妭鐮佹彃鍏ヨ兘鍔涳紝澧炲己浠g爜杩愯鏃剁殑杩愯鏂规硶锛屾彁鍙栫浉鍏冲繀瑕佷俊鎭€備笖涓嶈妗堜緥鐪熺殑鍋氫簡锛屽涓嬶細妗堜緥鍦板潃锛氬熀浜嶪DEA鎻掍欢寮€鍙戝拰瀛楄妭鐮佹娴嬫妧鏈紝鐮斿彂浜や粯璐ㄩ噺鑷姩鍒嗘瀽鍚庣画闂锛氬叾瀹炶繖閲岀殑瀹炵幇鍙兘绠楁槸涓€涓渚嬶紝瀵逛簬IDEA鎻掍欢寮€鍙戠殑鑳藉姏娌℃湁瀹屽叏浜嗚В銆傛瘮濡傝繖涓狪DEA鎻掍欢闇€瑕佸仛涓€浜涘熀鏈殑閰嶇疆锛岄偅涔堝湪鍝噷鎵撳紑鍛紵瀹炴椂鐩戞帶鍜岀敓鎴愮殑鐣岄潰淇℃伅鏄惁鍙互鍦↖DEA鐣岄潰鍙充晶鏄剧ず鎴栬€呭鍑猴紵濡傛灉鎴戞湁鍏朵粬涓€浜涢泦鎴愪簡IDEA鎻掍欢寮€鍙戣兘鍔涚殑鍔熻兘鎬庝箞鍔烇紵杩欓噷浣跨敤浜嗗摢浜涙妧鏈紵绛夌瓑锛岃繖浜涢棶棰橀兘闇€瑕佷竴涓€瑙e喅锛屾墠鑳藉畬鍏ㄥ紑鍙戝嚭涓€涓彲鐢ㄧ殑IDEA鎻掍欢锛屼负姝わ紝杩橀渶瑕佹洿娣卞叆鐨勮祫鏂欐暣鐞嗗拰瀹為檯楠岃瘉銆備笁銆佸紑鍙戞彃浠舵秹鍙婄殑闂鎬荤粨锛氬紑鍙戜竴涓狪DEA鎻掍欢鐨勫熀鏈祦绋嬪涓嬶細寮€鍙戞柟娉曪細鍦ㄥ畼缃戠殑鎻忚堪涓紝鏈変袱绉嶅垱寤篒DEA鎻掍欢椤圭洰鐨勬柟寮忥紝IntelliJ骞冲彴鎻掍欢妯℃澘鍒涘缓鍜孏radle鏋勫缓鏂规硶銆傛鏋跺叆鍙o細寮€鍙戝嚭涓€涓狪DEA鎻掍欢鍚庯紝闇€瑕佽€冭檻宓屽叆鍒板摢閲岋紝姣斿浠嶪DEA绐椾綋鐨凟dit銆乀ools绛夎繘鍏ラ厤缃紝鎴栬€呭祵鍏ョ獥浣撳埌宸﹀彸宸ュ叿鏍忔垨鑰匢DEA绐椾綋涓嬬殑瀵硅瘽妗嗐€俇I锛氭垜鎯崇殑鏄〃鍗曢渶瑕佺敤浠€涔堣瑷€寮€鍙戯紝鏄殑锛屾垜鐢ㄧ殑鏄疭wing鍜孉wt鐨勬妧鏈兘鍔涖€侫PI锛氬湪IDEA鎻掍欢寮€鍙戜腑锛屼竴鑸兘鏄洿缁曢」鐩繘琛岀殑锛屾墍浠ュ熀鏈笂闇€瑕佷粠IDEA鎻掍欢JDK寮€鍙戣兘鍔涗腑鑾峰彇椤圭洰淇℃伅銆佺被淇℃伅銆佹枃浠朵俊鎭瓑銆侲xternalfunction锛氳繖涓槸鐢ㄦ潵鍜屽閮ㄧ郴缁熺粨鍚堟彃浠惰兘鍔涚殑锛屾瘮濡傛槸鍚﹂渶瑕佸皢鑾峰彇鐨勬帴鍙d笂浼犲埌鏈嶅姟鍣紝鎴栬€呰繙绋嬩笅杞芥枃浠剁瓑銆?.寮€鍙戞彃浠剁殑涓ょ閰嶇疆瀹樻柟鏂囨。锛歨ttps://plugins.jetbrains.com/docs/intellij/disposers.html瀹樻柟妗堜緥锛歨ttps://github.com/JetBrains/intellij-sdk-docs1銆傚熀鏈厤缃甀ntelliJIDEA2019.3.1x64JDK闇€瑕侀厤缃甀ntelliJPlatformPluginJDK锛屽湪ProjectSetting涓缃紝杩欐牱IDEApluginid'org.jetbrains.intellij'version'0.6.3'gradle-5.2.1鍜?019IDEAversion灏卞彲浠ヤ簡寮€鍙戞甯告彃浠跺紑鍙戝尮閰峉ettings->Build,Execution,Deloyment->BuildTools锛岄厤缃瓽radle銆侴radleuserhome=D:/ProgramFiles(x86)/gradle/gradle-5.2.1/.gradleUserGradlefrom=gradle-wrapper.properties鎴栨寚瀹氫綅缃涓嬪浘锛氬鏋滀綘浣跨敤IDEA榛樿鐨処ntelliJ骞冲彴鏂板缓ProjectPlugin鏂规硶锛屽叾瀹炲彧鍏虫敞姝ラ1鍜?锛屼絾鏄鏋滈渶瑕丟radle锛岄渶瑕佹敞鎰忔楠?銆?銆?鐨勮缃€傚綋鐒讹紝閫氬父寤鸿浣跨敤Gradle鏉ユ瀯寤洪」鐩紝杩欐牱褰撲綘闇€瑕佷竴浜涢澶栫殑Jar鍖呮椂锛屽彧闇€瑕佸湪Gradlebuild.gradle涓厤缃嵆鍙紝鑰屼笉鐢ㄥ皢闇€瑕佺殑Jar鍖呭鍒跺埌椤圭洰鐨刲ib涓€?.閬囧埌鐨勯棶棰樹娇鐢℅radle鏋勫缓椤圭洰鍚庯紝浣犱細閬囧埌鍑犱釜闂锛涙彁鍓嶄笅杞藉苟閰嶇疆Gradle5.2.1锛屽惁鍒欐瀯寤洪」鐩嚜鍔ㄤ笅杞戒細姣旇緝鎱ttps://gradle.org/next-steps/?version=5.2.1&format=all鏃舵媺鍙栫浉鍏冲唴瀹逛細姣旇緝鎱㈠缓璁句竴涓」鐩€傚鏋滄湁浠g悊灏辨洿濂戒簡銆傘€愰夯鐑﹂棶棰樸€戝熀浜嶨radle鐨処DEA鎻掍欢寮€鍙戞瀯寤鸿繃绋嬩腑锛屼細涓嬭浇閰嶅鐗堟湰鐨処DEA杞欢鍚姩娴嬭瘯寮€鍙戞彃浠讹紝鍘嬬缉鍖卛deaIC-2019.3.1.zip鍑犵櫨鍏?杩欐椂鍊欏熀鏈細閬囧埌宕╂簝閿欒Couldnotresolveallfilesforconfiguration':detachedConfiguration1'銆傛€庝箞鍔烇紝涓嶅珜楹荤儲鐨勮瘽锛屽彲浠ユ墜鍔ㄤ笅杞斤紝鎶婁笅杞界殑鏂囦欢鐢⊿HA1鍔犲瘑锛屾斁鍒扮紦瀛樻枃浠跺す閲屻€俫radle\caches\modules-2\files-2.1鍏蜂綋鎿嶄綔濡備笅锛氭墦寮€绯荤粺鐩樹笅褰撳墠鐢ㄦ埛鐨?gradle鐩綍锛岃繘鍏?gradle\caches\modules-2\files-2.1鐩綍锛屽叾涓槸缂撳瓨鏂囦欢鐨勭洰褰曘€傝繖涓洰褰曞氨鏄綘鍦╞uild杩囩▼涓姤閿欑殑鍦板潃锛孋ouldnotgetresourceD:\ProgramFiles(x86)\gradle\gradle-5.2.1\.gradle\caches\modules-2\files-2.1\com銆俲etbrains.intellij.idea\ideaIC\2019.3.1鍔犲瘑鐨勬枃浠跺す2dae8e50d4b0508cad2e680b53414f657954f390鐩綍鍚嶏紙浣犵殑鍙兘涓嶆槸杩欐牱鐨勶級锛屾垜鍘诲惂锛岃繖涓簲璇ユ槸鍔犲瘑鐨勶紝浣嗘槸浠€涔堝姞瀵嗗憿锛燂紝浜嗚В鍚庣煡閬撹繖鏄疭HA1鍔犲瘑锛岃€屼笖鏄鏂囦欢杩涜SHA1鍔犲瘑鐢熸垚鐨勫敮涓€瀛楃涓诧紝浣嗘槸windows涓婃病鏈夎繖涓懡浠わ紝缃戜笂SHA1澶夯鐑︼紝鑰屼笖杩橀渶瑕佷笂浼犳枃浠讹紝鎵€浠ユ垜鎯冲埌浜咼avaAPI銆傝繕鏈夊氨鏄€氳繃githash鍛戒护琛屾潵瀹炵幇鐨勩€傛殏鏃跺皢鎴戜滑鐨勬枃浠秈deaIC-2019.3.1.zip澶嶅埗鍒拌鐩綍涓嬨€傝繍琛宻ha1sum.exeideaIC-2019.3.1.zip鍛戒护鐢熸垚鍞竴瀛楃涓诧紙鐢ㄤ簬鏍¢獙鏂囦欢瀹屾暣鎬э級锛岃繖鏍峰氨鍙互寰楀埌2dae8e50d4b0508cad2e680b53414f657954f390鐩綍鍚嶃€傛帴涓嬫潵鍦?019.3.1鐩綍涓嬫柊寤虹洰褰?dae8e50d4b0508cad2e680b537954f锛屽皢ideaIC-2019.3.1.zip绉诲姩杩涘幓鍗冲彲銆傘€怱tackOverflow銆慓radle鍦ㄦ瀯寤鸿繃绋嬩腑娑堣€楀ぇ閲忓唴瀛橈紝鍙兘浼氭姤閿橨avaheapspace銆傚洜姝わ紝涔熷彲浠ュ湪IDEA椤圭洰鏍圭洰褰曚笅鏂板缓涓€涓枃浠秅radle.properties锛屾坊鍔犲涓嬪唴瀹癸紝鏇存敼gradleJvm鍙傛暟org.gradle銆俲vmargs=-Xmx2024m-XX:MaxPermSize=512m涓嶄粎濂界敤锛岃€屼笖鏋勫缓鎴愬姛銆備簲銆佺紪鍐欐祴璇曠敤渚?銆侀」鐩粨鏋凱luginGuide鈹溾攢鈹€.gradle鈹斺攢鈹€src鈹溾攢鈹€main鈹傗敂鈹€鈹€java鈹傗敎鈹€鈹€HiClazz.java鈹傗敎鈹€鈹€MyDumbAwareAction.java鈹傗敎鈹€鈹€MySearchableConfigurable.java鈹傗敎鈹€鈹€MyToolWindowFactory.java鈹傗敂鈹€鈹€TestUI.java鈹斺攢鈹€resources鈹溾攢鈹€icons鈹斺攢鈹€META-INF鈹斺攢鈹€plugin.xmlHiClazz鏄户鎵緼nAction鐨勫疄鐜扮被锛岀敤浜庨檮鍔犲埌琛ㄥ崟鍦↖DEA涓紝鐐瑰嚮鎵撳紑瀵瑰簲鐨勯〉闈yDumbAwareAction鍜孧yToolWindowFactory涓€璧风敤鏉ヨ缃甀DEA鐨勫簳灞傜獥浣擄紝鍜屼綘鐪嬪埌鐨勬帶鍒跺彴杈撳嚭淇℃伅鐨勪綅缃竴鏍枫€侻ySearchableConfigurable锛屽彲鐢ㄤ簬鍦ㄨ缃腑閰嶇疆琛ㄥ崟銆俆estUI鏄熀浜嶴wing寮€鍙戠殑绐椾綋锛屽湪AnAction瀹炵幇绫讳腑寮€鍚獙璇併€俻lugin.xml鏄暣涓狪DEA鍜栧暋鐨勯厤缃枃浠讹紝浣犳墍鏈夌殑琛ㄥ崟閮戒細浣撶幇鍦ㄨ繖涓厤缃枃浠朵腑銆?.AnActionpublicclassHiClazzextendsAnAction{@OverridepublicvoidactionPerformed(AnActionEvente){Projectproject=e.getData(PlatformDataKeys.PROJECT);PsiFilepsiFile=e.getData(CommonDataKeys.PSI_FILE);瀛楃涓茬被璺緞=psiFile.getVirtualFile().getPath();瀛楃涓叉爣棰?"浣犲ソ涓栫晫锛?;Messages.showMessageDialog(project,classPath,title,Messages.getInformationIcon());}}娴嬭瘯鍦↖DEA涓鍙栭紶鏍囧仠鐣欏湪class鏂囦欢涓殑淇℃伅銆傛垜浠彲浠ュ皢杩欎釜AnAction閰嶇疆鍒版瘡涓狪DEA鑿滃崟涓€?銆俢lassMyPanelextendsSimpleToolWindowPanel{publicMyPanel(booleanvertical){super(vertical);DefaultActionGroup缁?newDefaultActionGroup();group.add(newMyDumbAwareAction("Login1"));group.add(newMyDumbAwareAction("Login2"));group.add(newMyDumbAwareAction("Login3"));ActionToolbartoolbar=ActionManager.getInstance().createActionToolbar("ToolBar",group,false);setToolbar(toolbar.getComponent());}}//娣诲姞涓€涓〉闈oolWindow.getContentManager().addContent(ContentFactory.SERVICE.getInstance().createContent(newMyPanel(false),"First",false),0);}}鍦↖DEA鐨勫簳灞傜獥浣撲腑锛屽鏋滆鏄剧ず鑷繁鐨勭獥浣擄紝闇€瑕佸紑鍙戠浉搴旂殑ToolWindowFactory瀹炵幇绫伙紝杩欐牱鎵嶈兘鏄剧ず鑷繁鐨勫唴瀹广€傝繖閲岀殑鎬濊矾鍩烘湰涓婂氨鏄疭wing鎶€鏈殑寮€鍙戞柟寮忋€傚鏋滄偍涓嶇啛鎮塖wing锛岄偅涔堟湰鏂囦腑鐨勫ぇ閮ㄥ垎鍐呭閮戒細姣旇緝闄岀敓銆?.plugin.xml