Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 中文字幕一级,在线精品一区二区三区电影,最近中文字幕2019视频1

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          IDEA 社區版不支持 Tomcat?一招完美解決

          IDEA 社區版不支持 Tomcat?一招完美解決

          者 | 鄭祎

          責編 | Elle

          前言

          IntelliJ IDEA Community Edition(社區版)不支持Tomcat,不想花錢購買Ultimate版本,也不想使用Eclipse,嘗試通過其他方式使IDEA社區版支持Tomcat。

          嘗試的方法

          2.1. Smart Tomcat插件

          在IDEA社區版(2019.2.4)中安裝了Smart Tomcat插件,并使用其啟動Tomcat應用,遇到了以下問題:

          1. Web應用的class文件未被自動拷貝到對應的Web應用根目錄中,導致Web應用的代碼未被加載,需要手工處理,使用不方便;

          2. Tomcat日志只生成了localhost_access_log.txt日志文件,沒有生成catalina.log、localhost.log等日志文件,排查問題不方便。

          使用Smart Tomcat插件遇到問題之后,放棄了使用該插件,沒有再去分析是否因為使用方法不當。

          可行方法

          3.1. 說明

          之后通過Gradle腳本,使IDEA社區版支持Tomcat(也支持IDEA Ultimate版)。

          完成的Gradle腳本及示例Web工程代碼可以從 https://github.com/Adrninistrator/IDEA-IC-Tomcat/ 、 https://gitee.com/adrninistrator/IDEA-IC-Tomcat/ 下載,腳本內容很短,有效行數不超過200行,處理也很簡單。

          通過上述Gradle腳本,結合IDEA的功能,在完成配置后,可以實現以下功能,能夠達到與Eclipse或IDEA Ultimate版本對Tomcat支持的功能接近的效果。

          • 一鍵啟動Tomcat并加載Web應用

          • 一鍵停止Tomcat(應用實例可以接收到Web容器銷毀通知)

          • 一鍵啟動可調試的Tomcat(Web應用)

          • 一鍵從Tomcat(Web應用)啟動時開始調試

          3.2. 依賴環境

          • IDEA

          使用IntelliJ IDEA Community Edition 2019.2.4版本。

          • Tomcat

          支持Tomcat 7、8、9版本(測試過Tomcat 7.0.55、7.0.79、8.5.20、9.0.30版本),理論上也支持Tomcat 5、6版本(未測試)。

          • Gradle

          支持Gradle 4、5、6版本(測試過Gradle 4.1、4.7、5.6.4、6.0.1版本)。

          • JDK

          使用JDK 1.8.0_144版本。

          • 操作系統

          使用Windows 7 x64 SP1版本。

          3.3. IDEA中執行Gradle腳本

          假設存在以下Gradle任務:

          task testTask {
          doFirst {
          println "測試-" + System.getProperty("arg")
          }
          }

          3.3.1. 在Terminal中執行

          在IDEA的Terminal中執行以上Gradle任務時,可以通過gradle或gradlew命令,以命令行的方式執行,并可以通過“-D”前綴指定傳遞給Gradle腳本的JVM參數,與執行Java程序時類似。

          執行上述任務的Gradle命令示例如下所示:

          gradle testTask -Darg=abc
          gradlew testTask -Darg=abc

          執行的結果如下所示:

          > Task :testTask
          測試-abc

          3.3.2. 在Run/Debug Configurations中執行

          打開IDEA的“Run/Debug Configurations”窗口,點擊加號后,從彈出菜單中選擇“Gradle”,可以新增一個配置,用于執行對應的Gradle任務。

          打開“Configuration”標簽頁,對參數進行修改。

          • 點擊“Gradle project”右側的圖標,選擇當前項目;

          • 在“Tasks”右側填入需要執行的Gradle任務名稱,如“testTask”;

          • 在“VM options”右側填入需要傳遞給Gradle腳本的JVM參數,如“-Darg=test_arg”,點擊箭頭圖標可以展開編輯框。

          在Run/Debug Configurations中完成配置后,可以選中對應的配置,點擊執行按鈕開始執行。

          執行的結果在“Run”窗口中顯示,如下所示:

          當需要修改Run/Debug Configurations使用的Gradle時,可以打開IDEA的“File | Settings | Build, Execution, Deployment | Build Tools | Gradle”菜單,修改“Use Gradle from”選項。

          3.3.2.1. 解決在Run/Debug Configurations中執行Gradle腳本中文亂碼問題

          在Run/Debug Configurations中執行Gradle腳本或編譯過程時,輸出的中文可能亂碼。

          或如下圖所示:

          進行以下設置,可以解決上述中文亂碼問題。

          • 打開IDEA的“Help”“Edit Custom VM Options...”菜單;

          • 在打開的文件最后增加“-Dfile.encoding=UTF-8”;

          • 重啟已打開的IDEA后生效。

          3.4. 在IDEA中進行遠程調試

          3.4.1. 在IDEA創建遠程調試配置并獲取調試參數

          打開IDEA的“Run/Debug Configurations”窗口,點擊加號后,從彈出菜單中選擇“Remote”,可以新增一個配置,用于進行遠程調試。

          打開“Configuration”標簽頁,對參數進行修改。

          • “Debugger mode”選項保持“Attach to remote JVM”

          • “Transport”選項保持“Socket”

          • “Host”參數保持“localhost”

          • “Port”參數指定被調試的Java進程監聽的調試端口

          • “Use module classpath”選擇被調試的Java進程對應的源代碼模塊

          “Command line arguments for remote JVM”展示的調試參數不能編輯,會跟隨上方的參數變化。

          • “Transport”選項“Socket”對應調試參數“transport=dt_socket”

          • “Port”參數對應調試參數“address=”

          3.4.2. 增加調試參數后啟動被調試Java進程

          復制“Command line arguments for remote JVM”對應的調試參數,將其添加到被調試Java進程的JVM參數中,啟動Java進程。

          需要注意,IDEA調試配置中的Port參數,與被調試Java進程使用的調試參數中的address參數值需要相同,即調試器連接的端口需要與被調試Java進程監聽的端口一致。

          3.4.3. 在IDEA啟動調試

          選中對應的遠程調試配置,點擊調試按鈕開始調試,與使用IDEA啟動Java進程并調試類似。

          調試啟動成功后,在“Debug”“Console”窗口提示“Connected to the target VM”,如下所示。

          點擊停止按鈕可以停止調試,IDEA的“Debug”窗口會出現類似“Disconnected from the target VM, address: 'localhost:5555', transport: 'socket'”的提示。

          停止被調試Java進程時,IDEA啟動的調試會自動結束。

          停止調試后,不會使被調試的Java進程退出。

          當對Tomcat進行調試時,停止調試后在Tomcat窗口會出現類似“Listening for transport dt_socket at address: 5555”提示。

          以上調試方法也支持非Web應用,以及遠程的Java進程。

          3.5. runTomcat.gradle腳本使用方法

          將runTomcat.gradle腳本拷貝至Java Web應用工程中,在build.gradle腳本中添加“apply from: 'runTomcat.gradle'”。

          3.5.1. 任務及參數說明

          runTomcat.gradle腳本中提供了名稱為“startTomcat”的任務,用于啟動Tomcat并加載Web應用。

          在腳本中使用了以下參數。

          3.5.1.1. 環境變量

          • TOMCAT_HOME_4IDEA

          • TOMCAT_INSTANCE_4IDEA

          3.5.1.2. JVM參數

          • appName

          • noBuild

          • contextPath

          • arg4Tomcat

          3.5.2. 環境配置

          在使用提供的Gradle腳本runTomcat.gradle時,首先需要完成環境配置,“TOMCAT_HOME_4IDEA”環境變量配置需要增加,“TOMCAT_INSTANCE_4IDEA”環境變量的配置可選。

          在完成環境變量配置后,需要重啟已打開的IDEA后生效。

          為了驗證環境變量配置是否已生效,可在IDEA的Terminal中執行“echo %TOMCAT_HOME_4IDEA%”,當配置完成時會輸出對應的環境變量值,未配置或未生效時會輸出“%TOMCAT_HOME_4IDEA%”。

          3.5.3. 使用場景

          3.5.3.1. 正常啟動Tomcat進程

          正常啟動Tomcat進程,加載示例工程中的Web應用的Gradle命令如下所示:

          gradlew startTomcat -DappName=test-tomcat -Darg4Tomcat="-DtestValue=aaabbbccc -Dlog.home=E:\desktop\log-test"

          在以上示例中,指定當前應用對應的Tomcat實例的名稱,以及Web應用的上下文路徑,均為“test-tomcat”,指定啟動Tomcat時使用的JVM參數為“"-DtestValue=aaabbbccc -Dlog.home=E:\desktop\log-test"”。

          第一次執行上述Gradle命令時(或刪除了當前應用對應的Tomcat實例的目錄后),Gradle腳本輸出的結果如下所示:

          > Configure project :
          noBuild參數值:

          > Task :clean
          > Task :compileJava
          > Task :processResources
          > Task :classes

          > Task :startTomcat
          appName參數值: test-tomcat
          contextPath參數值: test-tomcat
          arg4Tomcat參數值: -DtestValue=aaabbbccc -Dlog.home=E:\desktop\log-test
          tomcatDir參數值: C:\program\apache-tomcat-7.0.55
          instanceDir參數值: C:\Users\user\.tomcat_idea
          當前路徑: E:\IDEA-IC-Tomcat
          當前應用使用的Tomcat實例目錄: C:\Users\user\.tomcat_idea\test-tomcat
          生成Web應用所需文件
          生成Web應用所需文件-完成
          判斷是否需要創建Tomcat實例
          創建Tomcat實例
          文件不存在: C:\Users\user\.tomcat_idea\test-tomcat\conf\Catalina\localhost\test-tomcat.xml
          寫入文件: C:\Users\user\.tomcat_idea\test-tomcat\conf\Catalina\localhost\test-tomcat.xml
          生成bat停止腳本文件: C:\Users\user\.tomcat_idea\test-tomcat\test-tomcat-stop.bat
          文件不存在: C:\Users\user\.tomcat_idea\test-tomcat\test-tomcat-stop.bat
          寫入文件: C:\Users\user\.tomcat_idea\test-tomcat\test-tomcat-stop.bat
          生成bat啟動腳本文件: C:\Users\user\.tomcat_idea\test-tomcat\test-tomcat-start.bat
          文件不存在: C:\Users\user\.tomcat_idea\test-tomcat\test-tomcat-start.bat
          寫入文件: C:\Users\user\.tomcat_idea\test-tomcat\test-tomcat-start.bat

          當以上Gradle腳本執行成功后,會啟動Tomcat,Tomcat進程會產生單獨的命令行窗口。

          使用瀏覽器訪問示例工程的Controller,URL為“ http://localhost:8080/test-tomcat/testrest/get ”,輸出結果為當前時間戳及“testValue”對應的JVM參數值,訪問結果如下所示:

          3.5.3.2. 使用Tomcat實例啟動腳本啟動Tomcat進程

          runTomcat.gradle腳本的“startTomcat”任務執行時,會在當前Web應用對應的Tomcat實例目錄生成啟動腳本,如前文輸出的示例“C:\Users\user\.tomcat_idea\test-tomcat\test-tomcat-start.bat”。

          當不需要對Web應用重新編譯時,可以直接執行上述啟動腳本,啟動Tomcat進程,加載Web應用。

          3.5.3.3. 停止Tomcat進程

          在示例工程中,TestPostConstructLazyFalse.preDestroy方法使用了@PreDestroy注解,該方法會在應用停止階段執行,會在當前目錄生成名稱為“preDestroy-”及當前時間戳的目錄。

          3.5.3.3.1. 直接關閉Tomcat窗口(應用實例無法接收到Web容器銷毀通知)

          將Tomcat窗口關閉,可以停止Tomcat進程。

          通過該方法停止Tomcat進程,會使Tomcat進程直接結束,應用實例無法接收到Web容器銷毀通知,示例工程的TestPostConstructLazyFalse.preDestroy方法不會執行,當前目錄不會生成目錄。

          3.5.3.3.2. 使用Tomcat實例停止腳本停止Tomcat進程(應用實例可以接收到Web容器銷毀通知)

          runTomcat.gradle腳本的“startTomcat”任務執行時,會在當前Web應用對應的Tomcat實例目錄生成停止腳本,如前文輸出的示例“C:\Users\user\.tomcat_idea\test-tomcat\test-tomcat-stop.bat”。

          執行上述停止腳本,會執行Tomcat提供的stop命令,可以停止Tomcat進程,應用實例可以接收到Web容器銷毀通知,示例工程的TestPostConstructLazyFalse.preDestroy方法會執行,當前目錄會生成目錄,如下所示。

          3.5.3.4. 調試Web應用

          以下在IDEA創建遠程調試配置并獲取調試參數的過程,可以參考前文對應內容。

          3.5.3.4.1. 進程啟動后調試

          • 啟動Tomcat進程

          獲取到調試參數如下所示:

          -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5555

          在執行Gradle “startTomcat”任務時,添加以上參數至arg4Tomcat參數中(可添加到IDEA的“Run/Debug Configurations”的Gradle配置中),如下所示:

          gradlew -DappName=test-tomcat
          -Darg4Tomcat="-DtestValue=aaabbbccc -Dlog.home=E:\desktop\log-test -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5555"

          執行以上Gradle命令后,啟動Tomcat進程。

          • 啟動IDEA調試

          之后可以在IDEA中啟動調試。

          對URI“/testrest/get”對應的TestRestController.get方法設置斷點,通過瀏覽器訪問后,IDEA調試器進入斷點,可在“Debug”“Debugger”窗口查看。

          3.5.3.4.2. 從進程啟動開始調試(操作兩次)

          以上使用的調試參數中的suspend參數值為“n”,被調試的進程在啟動時不會暫停線程,會正常啟動。只支持先啟動被調試進程,再進行調試。

          當需要從進程啟動開始調試時,需要將調試參數中的suspend參數值設為“y”,被調試的進程在啟動時會暫停線程,等待調試器連接address指定的端口后,才會繼續啟動。

          • 啟動Tomcat進程

          當需要從進程啟動開始調試時,調試參數示例如下。

          -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5555

          將Gradle任務“startTomcat”的“arg4Tomcat”參數中配置的“suspend”參數設置為“y”,再通過該命令啟動Tomcat,Tomcat窗口只顯示“Listening for transport dt_socket at address: 5555”,未顯示其他內容,即Tomcat進程此時在等待調試器連接address參數對應的端口,未完成啟動。

          • 啟動IDEA調試

          在Web應用初始化階段會執行的代碼設置斷點,例如在示例工程的帶有@PostConstruct注解的TestPostConstructLazyFalse.postConstruct方法設置斷點。

          在IDEA啟動調試,查看Tomcat窗口日志已更新,說明Tomcat進程已啟動。

          查看IDEA調試窗口,已進入以上設置的斷點,證明可以從Web應用啟動開始調試。

          3.5.3.4.3. 從進程啟動開始調試(一鍵完成)

          以上從進程啟動開始調試的操作需要先啟動Tomcat進程,再啟動IDEA調試,可以優化為一鍵完成。

          打開IDEA的“Run/Debug Configurations”窗口,選擇“Remote”配置,點擊“Before launch: Activate tool window”下方的加號按鈕,選擇“Run Gradle task”。

          彈出“Select Gradle Task”窗口,“Gradle project”“Tasks”“VM options”參數配置,可參考在IDEA添加Gradle配置,通過“startTomcat”任務啟動Tomcat進程的步驟,需要確保“VM options”參數填寫的“arg4Tomcat”參數中的調試參數“suspend”為“y”。

          “Before launch: Activate tool window”下方的列表會出現配置的Gradle任務。

          完成以上配置后,在啟動IDEA調試之前,會執行指定的Gradle任務“startTomcat”,以“suspend=y”的調試參數啟動Tomcat進程。可以實現一鍵從進程啟動開始調試,與IDEA Ultimate版或Eclipse對Web應用從啟動開始調試的效果類似。

          3.5.3.4.4. 調試Tomcat的類

          當需要對Tomcat的類進行調試時,需要將Tomcat的lib目錄添加至IDEA的Web應用工程的依賴中,否則調試時無法查看Tomcat的類。

          打開IDEA的“Project Structure”窗口,選擇“Project Settings”“Modules”標簽頁,在打開的窗口中選擇Web項目主模塊,選擇“Dependencies”標簽頁,點擊加號按鈕,選擇“JARs or directories...”菜單。

          在彈出的窗口,選擇當前使用的Tomcat的安裝目錄的lib目錄。

          完成添加后,Tomcat的lib目錄會出現在“Dependencies”標簽頁的最下方。

          當刷新Gradle后,項目配置會重置,以上添加的依賴會被清理,需要重新添加。

          完成以上配置后,在Tomcat的org.apache.catalina.startup.HostConfig$DeployDescriptor類run方法設置斷點,從進程啟動開始調試,可以在IDEA的Debug窗口看到已進入斷點。該方法是Tomcat啟動時執行的第一個Tomcat的類的方法。

          3.6. 其他說明

          • 生成Web應用所需文件調整

          runTomcat.gradle腳本中buildFiles4WebApp方法用于生成Web應用所需文件,拷貝的目錄與文件可以根據實際情況調整。

          • 調試端口需要確保未被監聽

          被調試Java進程的調試參數中指定的adderss參數對應的調試端口,需要確保未被監聽,否則被調試Java進程會啟動失敗,窗口會自動消失,Tomcat的提示如下。

          • 重新創建Tomcat實例

          當因為需要修改使用的Tomcat版本,或其他原因,導致需要重新創建Web應用使用的Tomcat實例時,需要將對應的Tomcat實例目錄刪除,如“C:\Users\user.tomcat_idea\test-tomcat”,之后再執行Gradle的startTomcat任務。

          • Tomcat實例目錄配置修改與日志查看

          當前Web應用對應的Tomcat實例目錄,在執行Gradle “startTomcat”任務時會輸出,如“C:\Users\user.tomcat_idea\test-tomcat”。

          當需要修改當前Web應用對應的Tomcat使用的HTTP服務端口、SSL配置、線程池數量等參數時,可以修改Tomcat實例目錄的“conf\server.xml”文件,說明略。

          當需要同時啟動多個Tomcat進程分別加載不同的Web應用時,需要先修改對應Tomcat實例的“conf\server.xml”文件中的監聽端口,避免不同的Tomcat實例使用同一個端口導致不可用。

          Tomcat實例目錄的“logs”目錄保存了Tomcat日志文件,使用默認配置時,包括“catalina.log”“localhost.log”“localhost_access_log.txt”“host-manager.log”“manager.log”等。

          3.7. 原理說明

          通過runTomcat.gradle腳本啟動Tomcat進程并加載Web應用,與Eclipse或IDEA Ultimate(2018.3及之前版本)的原理類似,如下所示。

          3.7.1. 生成Web應用所需文件

          當noBuild參數未指定或為空時,會先執行Gradle的classes任務完成編譯,再執行buildFiles4WebApp方法,完成以下操作:

          • 將編譯生成的class文件拷貝至“build/tomcat/WEB-INF/classes”目錄中

          • 將“src/main/resources/”目錄(配置文件)拷貝至“build/tomcat/WEB-INF/classes”目錄中

          • 將“src/main/webapp/”目錄(靜態資源與WEB-INF/web.xml文件)拷貝至“build/tomcat”目錄中

          • 將依賴的jar包拷貝至“build/tomcat/WEB-INF/lib”目錄中

          3.7.2. 生成Tomcat實例

          判斷當前應用使用的Tomcat實例目錄是否已存在,若已存在時則不再處理。

          當前應用使用的Tomcat實例目錄不存在時,進行以下操作生成Tomcat實例:

          在“TOMCAT_INSTANCE_4IDEA”環境變量參數值對應的目錄,或當前用戶目錄的“.tomcat_idea”目錄中,創建當前Web應用使用的Tomcat實例目錄,使用Gradle “startTomcat”任務執行時的“appName”參數值作為目錄名稱;

          將“TOMCAT_HOME_4IDEA”環境變量參數值指定的,需要使用的Tomcat安裝目錄的bin、conf目錄拷貝至當前Web應用使用的Tomcat實例目錄中;

          在當前Web應用使用的Tomcat實例目錄創建logs、temp、work目錄。

          3.7.3. 處理Tomcat上下文描述符文件

          上下文描述符是一個XML文件,其中包含與Tomcat相關的上下文配置,例如命名資源或會話管理器配置等。當Tomcat啟動時,上下文描述符會被首先部署。可參考 https://tomcat.apache.org/tomcat-7.0-doc/deployer-howto.html 。

          上下文描述符需要保存在當前Web應用使用的Tomcat實例目錄的“conf\Catalina\localhost”目錄中,當前Web應用的上下文路徑與上下文描述符文件名相同(不含.xml后綴),上下文路徑的大小寫與文件名的大小寫一致。

          runTomcat.gradle腳本會檢查當前Web應用對應的Tomcat實例的上下文描述符,若文件已存在且內容不需要修改,則不執行寫入操作;若文件不存在或文件內容需要修改,則執行文件寫入操作。

          3.7.4. 生成Tomcat實例啟動/停止腳本

          Tomcat實例啟動/停止腳本會保存在當前Web應用對應的Tomcat實例目錄中。

          runTomcat.gradle腳本會檢查對應的腳本文件,在需要寫入時進行寫入操作。

          在啟動腳本中會調用Tomcat實例目錄的“bin\startup.bat”腳本;在停止腳本中會調用Tomcat實例目錄的“bin\shutdown.bat”腳本。

          3.7.5. 啟動Tomcat

          runTomcat.gradle腳本會執行生成的Tomcat實例啟動腳本,以啟動Tomcat。

          3.7.6. 調試Web應用

          以上的遠程調試使用了JDWP(Java Debug Wire Protocol),可參考 https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/jdwp-spec.html ,JDWP是用于調試器與其調試的Java虛擬機之間的通信協議。

          JPDA(The Java Platform Debugger Architecture)包含三個接口,供調試器在桌面系統的開發環境中使用。JDWP屬于其中一個,JPDA的說明可參考 https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/ 。

          在JPDA連接和調用詳細信息(https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/conninv.html )中,說明當suspend參數為“y”時,VMStartEvent會使用SUSPEND_ALL作為暫停策略;當suspend參數為“n”時,VMStartEvent會使用SUSPEND_NONE作為暫停策略。

          參考

          https://docs.oracle.com/javase/8/docs/jdk/api/jpda/jdi/com/sun/jdi/request/EventRequest.html ,說明SUSPEND_ALL在事件發生時會暫停全部線程;SUSPEND_NONE在事件發生時不會暫停線程。

          根據以上說明可知,當Java進程的調試參數中的suspend參數為“y”時,在啟動時會暫時全部線程;suspend參數為“n”時,在啟動時不會暫時線程。

          作者:鄭祎,Java后臺開發

          ive Templates 是什么,聽上去感覺挺玄乎的。有的同學用過之后覺得簡直太好用了,不能說大大提高了開發效率吧,至少也是小小的提高一下,節省了很多敲重復代碼的時間。有的同學用過之后說:沒什么用,奇技淫巧罷了。

          就算你沒聽過這個概念,但是或多或少你可能都用到過一點,就算沒有用過的話,也可能見到過一些,沒吃過豬肉可能也見過豬跑,就像下面這樣的操作。

          總結一下呢,它就類似于一種快捷指令(神奇代碼),只要你在 IDEA 中輸入特定的字母組合,IDEA 就會幫你在當前輸入的位置插入一段預先定義好的代碼,代碼可以是固定的,也可以定義一些上下文變量,適用于那些常用的、使用頻率較高的聲明或重復代碼段。

          比如聲明靜態 finalString,再不用 Live Tmeplates 的情況下,我們會手動在 IDEA 中依次敲出 "public static final String" 這一行代碼,當然可能借助 IDEA 的智能提示,每個單詞只需要敲前兩個字母。在使用了 Live Tmeplates 的情況下, 我們只需要敲出 psfs這四個字母,然后按回車鍵,IDEA 就會幫我們在 psfs這個位置插入 "public static final String" 這一行。

          沒用過的同學是不是趕緊打開 IDEA 試一下呢?在設置界面,輸入 Live Templates,然后找到右側的 Java就可以看到內置的模板。不光有 Java 的,對于多種文件類型都有支持,比如 SQL 、JavaScript、JSP 、Kotlin 等。

          下面介紹幾個 IDEA 內置的、常用的模板。

          常用的 Live Templates

          main 和 psvm

          main 方法插入,雖然我們已經可以很熟練的盲打出下面這一段代碼,但是只敲四個字母是不是會更快呢。

          public static void main(String[] args){
          }
          

          變量聲明

          下面一些是常用的變量聲明

          psfs

          public static final String 
          

          psfi

          public static final int 
          

          prsf

          private static final 
          

          St

          String 
          

          控制臺輸出

          下面是控制臺輸出,還有一些,不一一列舉了。

          sout

          文本輸出,最常用到的。

          System.out.println();
          

          souf

          帶格式化的文本輸出。

          System.out.printf();
          

          循環迭代

          fori

          輸入完,按回車后,光標會在 i<的位置,等待輸入臨界值。

              for (int i=0; i < ; i++) {
          
              }
          

          iter

          用 forEach 的方式循環,在一個數組或者列表變量下方使用。

          List<String> array=new ArrayList<>();
          for (String s1 : array) {
          
          }
          

          itco

          用迭代器的方式迭代,同樣是在一個列表變量下方使用。

          List<String> array=new ArrayList<>();
          for (Iterator<String> iterator=array.iterator(); iterator.hasNext(); ) {
            String next=iterator.next();
          }
          

          Surround Templates

          這種模板是在選中一段代碼后,然后使用快捷鍵 option+command+j調出提示框,然后選擇一個模板類型。

          這個快捷鍵是 MAC 系統下的,如果你用的是 windows,可以通過點擊 code菜單項,找到 Sorround With,看看快捷鍵是什么。

          C

          實現一個 Callable

          Callable<Object> callable=new Callable<Object>() {
            public Object call() throws Exception {
              System.out.println("hello");
            }
          };
          

          RL 和 WL

          插入一段讀鎖或寫鎖加解鎖代碼。

          // 要先聲明一個讀寫鎖實例
          ReadWriteLock readWriteLock=new ReentrantReadWriteLock();
          readWriteLock.readLock().lock();
          try {
            System.out.println("hello");
          } finally {
            readWriteLock.readLock().unlock();
          }
          

          自定義 Template

          有時候我們經常會高頻詞的使用一段相似的代碼, 比如做網絡開發的同學,會經常用到 Socket 相關的初始化代碼。

          對于這種我們自己經常要寫的某些類似的代碼段,就可以抽取出一個 Template 出來,方便我們使用。

          下面我就實現一個自定的 Template,來看一下是不是大大簡化了重復性勞動。有的同學可能覺得無所謂的事兒,復制、粘貼也挺省事兒。見仁見智吧,覺得有用的可以嘗試一下,覺得雞肋的也無所謂,反正也不影響最后的功能實現。

          比如我最新在做一些系統優化的工作,這個過程中,我會頻繁的用 commons-lang3StopWatch來看某些方法或者某些代碼段的執行時間。比如下面的代碼段:

          StopWatch stopWatch=new StopWatch("代碼段");
          stopWatch.start();
          try {
            Thread.sleep(1000);
          } catch (InterruptedException e) {
            throw new RuntimeException(e);
          }
          stopWatch.stop();
          System.out.printf("執行時間 %s%n",stopWatch.toString());
          

          由于我比較懶,所以我不想每次都敲重復的內容,連粘貼復制都不想。所以就想到了 Live Template。

          1、打開 IDEA 的設置窗口,找到 Editor 下的 Live Templates,在右側找到 Java,點擊最右側的加號。

          2、輸入這個 Template 的名字,到時候可以在編輯器中通過輸入這個名字來插入這個模板。

          輸入描述,幫助我們記憶。

          最后輸入模板的內容。

          我給這個模板起名為 watch,模板內容如下:

          StopWatch stopWatch=new StopWatch("$MESSAGE$");
          stopWatch.start();
          $SELECTION$
          stopWatch.stop();
          System.out.printf("執行時間 %s%n",stopWatch.toString());
          

          $SELECTION$表示選中的部分,我們要監控的正好是某個方法或者某個代碼段,所以正好可以用 Surround Templates,并且在內容中用了 $SELECTION$,模板就默認為 Surround Templates了。

          $MESSAGE$就是一個占位符的作用,當我們插入這個模板后,光標會定位到這個占位符,我們就可以在需要定制的地方輸入我們想要的內容了。在這里呢,由于我的一個方法中可能用到多個 StopWatch,所以正好在這兒占位,給不同的 StopWatch 賦予不同的名字。

          可以通過下面的演示看一下效果。

          Live Template 支持的變量

          有一些情況下,我們希望插入的內容不只是固定不變的代碼段,而是希望加入一些上下文相關的內容,比如當前方法的入參,比如當前類名,比如當前方法名等。用下面這個例子說明一下。

          有一個內置的模板叫做 soutm,它的描述是這樣的:Prints current class and method names to System.out,打印當前類和方法名,我們看一下效果,直接將當前類和方法名 Study.main填充到了println參數位置上。

          模板內容是這樣的,其中用到了兩個變量是表示當前類名的 $CLASS_NAME$和表示當前方法名的$METHOD_NAME$

          System.out.println("$CLASS_NAME$.$METHOD_NAME$");
          

          更多的可用變量可以到 IDEA 官網查看,看到這些變量后,可能會打開你的思路,更近一步的為你提高開發效率。不過不用這些變量也沒關系,上面這寫其實差不多也夠用了。

          官網地址:https://www.jetbrains.com/help/idea/template-variables.html#predefined_functions

          原文:https://mp.weixin.qq.com/s/Dur9IeuasDjpAyHye0pR8Q

          如果感覺本文對你有幫助,點贊關注支持一下

          欲善其事,必先利其器。在Java開發中挑選一款好的Ide環境能大大提升我們的開發效率,IntelliJ IDEA正是一個不二選擇。本教程會介紹怎么對idea進行配置、使用idea進行debug和經常使用的快捷鍵,最后會推薦幾個牛逼的idea插件,大大提升開發體驗和效率。

          一、安裝

          IntelliJ IDEA 有旗艦版和社區版本之分,其中旗艦版(Ultimate Edition)為收費版本,有 30 天試用期。如果你是學生、老師、開源項目參與者都可以向官網免費試用旗艦版。社區版(Community Edition)為免費版本,功能較旗艦版少了很多。

          收費版本比Community的免費版本多了很多功能,這些功能可以大大提升我們的開發效率。下載完成后需要自己安裝激活。

          關于怎么永久激活可以見地址:

          https://www.yuque.com/docs/share/12a88ca7-c665-45ad-82bc-8bfbc1718567?# 《IntelliJ IDEA2022.2最新最細指導教程》


          • 申請免費版本:https://www.jetbrains.com/idea/buy/
          • 旗艦版和社區版差異細節:https://www.jetbrains.com/idea/features/editions_comparison_matrix.html

          系統要求:

          • JDK 版本:Apple Java 6 或 Oracle Java 7 以上
          • 內存:最低要求 1 G,推薦 2 G 以上
          • 硬盤:最低要求 2 G
          • 顯示器:最低要求 1024 X 768 分辨率


          IntelliJ IDEA 相關核心文件和目錄介紹:

          • IntelliJ IDEA 的安裝目錄并不復雜,上圖為最常改動的 bin 目錄,經常會改動的文件或是必須介紹就是如圖紅色框中的幾個。
          • idea64.exe 文件是 IntelliJ IDEA 64 位的可行執行文件,要求必須電腦上裝有 JDK 64 位版本。64 位的系統也是建議使用該文件。
          • idea64.exe.vmoptions 文件是 IntelliJ IDEA 64 位的可執行文件的 VM 配置文件,具體配置修改會下面進行專門講解。
          • idea.properties 文件是 IntelliJ IDEA 的一些屬性配置文件,具體配置修改會下面進行專門講解。

          • 強烈推薦不要直接修改安裝目錄下的這幾個配置文件,因為 IDEA 升級/重裝可能會導致修改完全失效!

          • 強烈推薦使用 IDEA 自帶菜單中的 Help -> Edit Custom VM Options 和 Help -> Edit Custom Properties 來進行參數個性化配置!

          二、配置、

          2.1 樣式主題配置

          第一次安裝完IDEA之后,第一步往往需要設置一個合適自己的樣式主題,這部分配置主要包括:

          • 整體的主題配置;
          • 菜單欄字體大小樣式配置;
          • 代碼區字體大小樣式配置;
          • 輸出控制臺字體大小樣式配置。

          1. 主題和菜單欄配置

          如上圖,File>>Settings>>Appearance&Behavior>>Appearance,進入主題設置頁面。選擇我們喜歡的主題,這個可以根據個人愛好自己選擇。然后圖中"override default fonts by"這欄,選擇字體,字體大小自己選擇。注意,這個配置只會影響主題和最上面菜單欄的顯示。

          2. 代碼區字體大小樣式配置

          如上圖,進入Color Scheme Font標簽頁進行代碼編輯區的字體樣式設置。

          3. 輸出控制臺字體大小樣式配置

          2.2 設置編碼字符集

          2.3 配置JDK

          1. 項目編譯的JDK版本


          2. 配置Project的Jdk版本

          項目的SDK默認會被項目中的每個module使用,當然我們也可以為每個module配置專有的SDK類型和版本。

          3. 配置每個module依賴的JDK版本

          每個module會默認使用project配置的jdk版本,當然我們也可以自己指定。

          4. 檢查平臺的JDK版本(也就是你電腦上安裝的JDK)

          我們在給project創建jdk的時候其實用的就是這個jdk。

          2.4 鍵盤習慣配置

          如果你之前用慣的是Eclipse,可能用不慣IDEA的快捷鍵.沒事,idea可以將快捷鍵設置為eclipse模式。你之前用的是windows電腦,現在轉為mac了,idea也提供了相應的轉換設置。

          通過keyman標簽還可以設置快捷鍵,但是個人不建議改變IDEA默認的快捷鍵設置。

          2.5 構建工具配置

          常用的構建工具有Maven和Gradle。我們可以選其一。

          2.6 自動編譯配置

          具體步驟:頂部工具欄 File ->Other Settings -> Default Settings -> Auto Import

          說明:開啟自動編譯之后,結合Ctrl+Shift+F9 會有熱更新效果。

          三. 調試技巧

          3.1 Debug界面&基本功能

          首先看下IDEA中Debug模式下的界面,隨著idea版本的更新Debug模式的圖標設計雖有微調改動,但是功能大體相通。

           上圖爬蟲的圖標就是Debug模式運行鍵,綠色三角形圖標是正常的Run模式
            
           如下是在IDEA中啟動Debug模式,進入斷點后的界面,我這里是Windows,可能和Mac的圖標等會有些不一樣。就簡單說下圖中標注的8個地方:

          ① 以Debug模式啟動服務,左邊的一個按鈕則是以Run模式啟動。在開發中,我一般會直接啟動Debug模式,方便隨時調試代碼。

          ② 斷點:在左邊行號欄單擊左鍵,或者快捷鍵Ctrl+F8 打上/取消斷點,斷點行的顏色可自己去設置。

          ③ Debug窗口:訪問請求到達第一個斷點后,會自動激活Debug窗口。如果沒有自動激活,可以去設置里設置。

          ④ 調試按鈕:調試的主要功能就對應著幾個按鈕,鼠標懸停在按鈕上可以查看對應的快捷鍵。在菜單欄Run里可以找到同樣的對應的功能。

          ⑤ 服務按鈕:可以在這里關閉/啟動服務,設置斷點等。

          ⑥ 方法調用棧:這里顯示了該線程調試所經過的所有方法,勾選右上角的[Show All Frames]按鈕,就不會顯示其它類庫的方法了,否則這里會有一大堆的方法。

          ⑦ Variables:在變量區可以查看當前斷點之前的當前方法內的變量。

          ⑧ Watches:查看變量,可以將Variables區中的變量拖到Watches中查看

          在設置里勾選Show debug window on breakpoint,則請求進入到斷點后自動激活Debug窗口

          如果你的IDEA底部沒有顯示工具欄或狀態欄,可以在View里打開,顯示出工具欄會方便我們使用。可以自己去嘗試下這四個選項。

          在菜單欄Run里有調試對應的功能,同時可以查看對應的快捷鍵。

          3.2 基本用法&快捷鍵

          Debug調試的功能主要對應著圖中兩組按鈕:

          1、首先說第一組按鈕,從左到右依次如下:

          > Show Execution Point (Alt + F10):如果你的光標在其它行或其它頁面,點擊這個按鈕可跳轉到當前代碼執行的行。

          > Step Over (F8):步過,一行一行地往下走,如果這一行上有方法不會進入方法。

          > Step Into (F7):步入,如果當前行有方法,可以進入方法內部,一般用于進入自定義方法內,不會進入官方類庫的方法。

          > Force Step Into (Alt + Shift + F7):強制步入,能進入任何方法,查看底層源碼的時候可以用這個進入官方類庫的方法。

          > Step Out (Shift + F8):步出,從步入的方法內退出到方法調用處,此時方法已執行完畢,只是還沒有完成賦值。

          > Drop Frame (默認無):回退斷點,后面章節詳細說明。

          > Run to Cursor (Alt + F9):運行到光標處,你可以將光標定位到你需要查看的那一行,然后使用這個功能,代碼會運行至光標行,而不需要打斷點。

          > Evaluate Expression (Alt + F8):計算表達式,后面章節詳細說明。

          2、第二組按鈕,共從上到下依次如下:

          > Rerun ‘xxxx’:重新運行程序,會關閉服務后重新啟動程序。

          > Update ‘tech’ application (Ctrl + F5):更新程序,一般在你的代碼有改動后可執行這個功能。

          > Resume Program (F9):恢復程序,比如,你在第20行和25行有兩個斷點,當前運行至第20行,按F9,則運行到下一個斷點(即第25行),再按F9,則運行完整個流程,因為后面已經沒有斷點了。

          > Pause Program:暫停程序,啟用Debug。

          > Stop ‘xxx’ (Ctrl + F2):連續按兩下,關閉程序。有時候你會發現關閉服務再啟動時,報端口被占用,這是因為沒完全關閉服務的原因,你就需要查殺所有JVM進程了。

          > View Breakpoints (Ctrl + Shift + F8):查看所有斷點,后面章節會涉及到。

          > Mute Breakpoints:靜啞斷點,啞的斷點,選擇這個后,所有斷點變為灰色,斷點失效,按F9則可以直接運行完程序。再次點擊,斷點變為紅色,有效。如果只想使某一個斷點失效,可以在斷點上右鍵取消Enabled。

          更新程序,On ‘Update’ actions,執行更新操作時所做的事情,一般選擇’Update classes and resources’,即更新類和資源文件。

          一般配合熱部署插件會更好用,如JRebel,這樣就不用每次更改代碼后還要去重新啟動服務。

          下面的On frame deactivation,在IDEA窗口失去焦點時觸發,即一般你從idea切換到瀏覽器的時候,idea會自動幫你做的事情,一般可以設置Do nothing,頻繁切換會比較消耗資源的。

          常用的調試快捷鍵如下:

          Run Shift + F10 運行最近一次運行的函數、Debug Shift + F9 運行debug最近一次運行的函數

          Run Alt + Shift + F10 初次運行指定的函數
          Debug Alt + Shift + F9 初次debug運行指定的函數
          Stop Ctrl + F2 停止項目
          Step Over F8 越過當前函數
          Forcce Step Over Alt + Shift + F8 強制越過
          Step Into F7 步入當前函數
          Force Step Into Alt + Shift + F7 強行進入當前函數
          Smart Step Into Shift + F7 只能進入當前函數
          Step out Shift + F8 步出
          Resume Program F9 恢復程序
          Evaluate Expression Alt + F8 計算表達式


          3.3 變量查看

          在Debug過程中,跟蹤查看變量的變化是非常必要的,這里就簡單說下IDEA中可以查看變量的幾個地方,相信大部分人都了解。

          1、如下,在IDEA中,參數所在行后面會顯示當前變量的值。

            2、光標懸停到參數上,顯示當前變量信息。點擊打開詳情如圖。我一般會使用這種方式,快捷方便。



            3、在Variables里查看,這里顯示當前方法里的所有變量。



            4、右鍵添加到watch, 可以查看值

          3.4 計算表達式

          在前面提到的計算表達式的按鈕,Evaluate Expression (Alt + F8) 。可以使用這個操作在調試過程中計算某個表達式的值,而不用再去打印信息。
          求值計算功能在我們debug過程中,可以很方便的查看程序中所有變量的值,也可以臨時修改程序中變量的值,這個功能能在一定程度上輔助我們進行代碼調試。


            1、按Alt + F8或按鈕,或者,你可以選中某個表達式再Alt + F8,彈出計算表達式的窗口,如下,回車或點擊Evaluate計算表達式的值。

          這個表達式不僅可以是一般變量或參數,也可以是方法,當你的一行代碼中調用了幾個方法時,就可以通過這種方式查看查看某個方法的返回值。

          3.5 智能步入

          想想,一行代碼里有好幾個方法,怎么只選擇某一個方法進入。之前提到過使用Step Into (Alt + F7) 或者 Force Step Into (Alt + Shift + F7)進入到方法內部,但這兩個操作會根據方法調用順序依次進入,這比較麻煩。

          那么智能步入就很方便了,智能步入,這個功能在Run里可以看到,Smart Step Into (Shift + F7),如圖

            按Shift + F7,會自動定位到當前斷點行,并列出需要進入的方法,如圖點擊方法進入方法內部。

          如果只有一個方法,則直接進入,類似Force Step Into。

          3.6 斷點條件設置

          條件斷點就是當滿足某個條件(通常是表達式)時,debug斷點才會生效;這在循環中debug是非常有用的;例如我們想要在循環體中調試:當某個變量滿足某個條件時,需要斷點調試,來查看詳細的執行流程及變化情況。通過設置斷點條件,在滿足條件時,才停在斷點處,否則直接運行。

          通常,當我們在遍歷一個比較大的集合或數組時,在循環內設置了一個斷點,難道我們要一個一個去看變量的值?那肯定很累,說不定你還錯過這個值得重新來一次。

          1、在斷點上右鍵直接設置當前斷點的條件,如圖,當name為eamon:23時,程序執行到斷點處停下來。

          有了條件斷點,這樣一來,那些不相關和我們不關心的代碼就可以直接跳過了。

          2、點擊View Breakpoints (Ctrl + Shift + F8),查看所有斷點。

          Java Line Breakpoints 顯示了所有的斷點,在右邊勾選Condition,設置斷點的條件。

          勾選Log message to console,則會將當前斷點行輸出到控制臺,如圖

          勾選Evaluate and log,可以在執行這行代碼是計算表達式的值,并將結果輸出到控制臺。

          3、再說說右邊的Filters過濾,這些一般情況下不常用,簡單說下意思。

          Instance filters:實例過濾,輸入實例ID。

          Class filters:類過濾,根據類名過濾

          Pass count:用于循環中,如果斷點在循環中,可以設置該值,循環多少次后停在斷點處,之后的循環都會停在斷點處。

          4、異常斷點,通過設置異常斷點,在程序中出現需要攔截的異常時,會自動定位到異常行。

          如圖,點擊+號添加Java Exception Breakpoints,添加異常斷點。然后輸入需要斷點的異常類,之后可以在Java Exception Breakpoints里看到添加的異常斷點。

          3.7 多線程調試

          一般情況下我們調試的時候是在一個線程中的,一步一步往下走。但有時候你會發現在Debug的時候,想發起另外一個請求都無法進行了?

          那是因為IDEA在Debug時默認阻塞級別是ALL,會阻塞其它線程,只有在當前調試線程走完時才會走其它線程。可以在View Breakpoints里選擇Thread,如圖,然后點擊Make Default設置為默認選項。

          切換線程,在Frames的下拉列表里,可以切換當前的線程,如下我這里有兩個Debug的線程,切換另外一個則進入另一個Debug的線程。

          3.10 中斷Debug

          想要在Debug的時候,中斷請求,不要再走剩余的流程了?

          有些時候,我們看到傳入的參數有誤后,不想走后面的流程了,尤其是后面的流程要刪除數據庫數據,這種情況可以通過Force Return,即強制返回來避免后續的流程。

          點擊Force Return,彈出Return Value的窗口,我這個方法的返回類型為Map,所以,我這里直接返回 results,來強制返回,從而不再進行后續的流程。或者你可以new HashMap<>()。

          四、常用快捷鍵

          IntelliJ IDEA 于 2001 年 1 月誕生,并在 3.0 版本之后屢次獲得各類大獎,從而奠定了它在 IDEA 中地位。而IDEA的快捷鍵能大大提升我們的開發效率和編程體驗,讓開發者為之著迷。

          4.1 搜索相關

          • alt+F7(右鍵“find usage”)/ctr+鼠標左擊:查找當前類、方法和變量在哪些地方使用過;
          • ctrl+N: 查找類;
          • ctrl+N+:行號(比如String:10 指跳轉到String類的第10行 )
          • ctrl+F/alt+f3:在當前編輯的文檔中查找;
          • ctrl+shitf+F :在所有文件中查找;
          • ctrl+shift+N :查找文件;
          • double shift:search everywhere;
          • search struct:按照模板搜索代碼。

          4.2 代碼編輯相關

          • alt+insert:插入構造函數,setter/getter方法;
          • ctrl+alt+space :自動補全代碼;
          • ctrl+shift+enter:補全代碼
          • ctrl+/ :代碼注釋;
          • ctrl+shirt+/ : 代碼注釋;
          • ctrl+X:剪切行;
          • ctrl+D:賦值行;
          • ctrl+W:智能選中相關代碼;
          • ctrl+alt+t : 選中代碼塊 可以添加try catch if-else塊
          • ctrl+J :提示縮寫
          • alt+J: 逐個選中并高亮一個變量
          • shift+F6: rename變量和方法等;
          • ctrl+P:顯示一個方法的參數情況
          • ctrl+O :重載一個父類或接口的方法
          • alt+1 -->ctrl+shift+> : 首先alt+1定位project,然后再調整分割線
          • F11:添加書簽,收藏關鍵業務代碼
          • shift+F11:顯示書簽
          • ctrl+enter:重命名書簽
          • ctrl+z/ctrl+shift+z
          • ctrl+shift+f7結合f3:ctrl+shift+f7可以高亮某個變量,而且隨著鼠標的移動,這個高亮是不會消失的(這個很重要)。然后使用f3找到下一個使用該變量的地方。
          • ctrl+shift+. 折疊代碼塊,ctrl++號;還原代碼塊;
          • CTRL+SHIFT+F7:把光標放在某個元素中,按下快捷鍵之后,IDE將高亮顯示所選元素所有出現過的地方。

          4.3 導航相關

          • ctrl+反點號 : 基礎設置;
          • Ctrl+Shift+V :使用最近復制過的文本;
          • ctrl+tab :歷史tab導航;
          • ctrl+E :最近瀏覽過的文件;
          • ctrl+shift+e :最近編輯過的文件;
          • ctrl + F12 :列舉類的成員變量和方法;
          • ctrl + H : 查看類的繼承關系
          • Ctrl+Shift+Backspace(Go to | Last Edit Location)讓你調轉到代碼中所做改變的最后一個地方,多按幾次Ctrl-Shift-Backspace查看更深的修改歷史;
          • ctrl+alt+< / ctrl+alt+> : 可以在前兩次操作之間切換,有點像瀏覽器的前進后退功能
          • Ctrl-Alt-Down/Ctrl-Alt-Up快捷鍵則可以在編譯器錯誤信息或者查找操作結果間跳轉;
          • ESC :將焦點移到編輯器窗口
          • shift+esc :將焦點移動到編輯器窗口,并且關閉工具窗口
          • F12 打開上次使用的工具窗口
          • alt+home:瀏覽導航欄;
          • ctrl+]或者ctrl+[:括號匹配:這個也非常有用,因為代碼太長,某個for循環,可能已經撐滿整個屏幕了。這個時候,找到某個大括號對應的另外一邊就很費勁。你可以將光標定位在某個大括號一邊,然后使用ctrl+]或者ctrl+[來回定位即可。

          這邊貼上一個思維導圖:

          五、插件推薦

          • 阿里巴巴規約插件;
          • Key promoter(快捷鍵提示);
          • jrebel(熱部署);
          • findbugs(幫助尋找代碼可能潛在的bug);
          • grep console;
          • .ignore(生成各種ignore文件);
          • lombok(支持各種注解,省略代碼);
          • GsonFormat(一鍵根據json文本生成java類);
          • Maven Helper;
          • VisualVM Launcher;(jvm調優必備工具);
          • MyBatisCodeHelperPro(mybatis代碼自動生成插件);
          • Rainbow Brackets(彩虹顏色的括號,代碼看起來比較舒服);
          • Translation(翻譯插件);
          • String Manipulation(提供強大的文本轉換操作);
          • Nyan progress bar(進度條);
          • Background Image Plus(背景圖插件);
          • activate-power-mode OR Power mode II(字節跳動插件);
          • JUnitGenerator(單元測試生成工具);
          • SequenceDiagram(時序圖生成工具);
          • ledis(Redis可視化工具
          • easyCode

          主站蜘蛛池模板: 一区二区乱子伦在线播放| 亚洲AV无码一区二区乱子伦| 国产一区二区三区夜色| 一区二区三区在线|欧| 精品一区二区三区影院在线午夜| 一区二区三区在线免费看| 成人精品一区二区三区不卡免费看| 国产伦精品一区二区三区无广告 | 在线精品自拍亚洲第一区| 日韩一区二区超清视频| 无码国产精品一区二区免费模式| 国产在线精品一区二区三区不卡 | 在线播放精品一区二区啪视频| 一本岛一区在线观看不卡| 日本v片免费一区二区三区| 麻豆AV天堂一区二区香蕉| 亚洲国产欧美日韩精品一区二区三区| 99久久精品国产一区二区成人 | 日亚毛片免费乱码不卡一区 | 一区二区三区高清| 亚洲一区二区三区高清| 无码精品一区二区三区在线| 无码国产精品一区二区免费vr | 国产福利无码一区在线| 欧美一区内射最近更新| 日本一区二区三区在线观看视频 | 午夜福利国产一区二区| 国产福利电影一区二区三区,亚洲国模精品一区 | 亲子乱av一区二区三区| 日韩精品一区二区三区大桥未久| 国产成人无码AV一区二区在线观看| 中文字幕在线视频一区| 久久国产视频一区| 国产主播在线一区| 国产免费av一区二区三区| 一区二区三区电影在线观看| 国产成人无码AV一区二区| 91久久精品一区二区| 理论亚洲区美一区二区三区| 亚洲AV日韩精品一区二区三区| 中文字幕久久久久一区|