IDEA 外掛集錦(史上最全系列)
工欲善其事必先利其器,一款好的開發工具不但能大大縮減我們編碼的時間,而且能使我們規範開發,還能秀出操作。本文將簡單介紹一些本人見識過的開發工具。
寫在前面:外掛查詢選單 >>>>> File->Settings->Plugins,並按照下文中的外掛名稱進行搜尋
官網外掛庫:https://plugins.jetbrains.com/
一、程式碼規範檢測類
1.Alibaba Java Coding Guidelines ✔
為了讓開發者更加方便、快速將規範推動並實行起來,阿里巴巴基於手冊內容,研發了一套自動化的IDE檢測外掛(IDEA、Eclipse)。該外掛在掃描程式碼後,將不符合規約的程式碼按Blocker/Critical/Major三個等級顯示在下方,甚至在IDEA上,我們還基於Inspection機制提供了實時檢測功能,編寫程式碼的同時也能快速發現問題所在。
1.在Tools->阿里編碼規範中未開啟實時監測功能,可通過在java檔案中直接右擊選擇“編碼規則掃描”,可在Inspection Results中檢視不規範資訊。
2.在Tools->阿里編碼規範中開啟實時監測功能,在不規範的程式碼中,外掛將會用波浪線提示。這時可直接將滑鼠座標處於在波浪線上的程式碼處,通過快捷鍵ALT+ENTER,進行快速修復。
2.CheckStyle-IDEA ✔
checkstyle官網地址http://checkstyle.sourceforge.net/
當然每家公司可能會有自己的程式碼規範,這時候不妨考慮下CheckStyle。
1.在File->Setting->Editor->CheckStyle
(1) 實時檢查,實時地對不規範的書寫進行提示 ,並在編輯頁面中進行顏色標識。
(2) 取消實時檢查後,可在開啟的檔案中右擊選擇Check Current File對當前頁面進行檢查,此時可在** CheckStyle Scan** 面板中檢視不規範內容,點選條目可檢視對應出錯語句。
2.在File->Setting->Other Setting->checkStyle中配置自定義的程式碼規範
程式碼規範檔案示例:
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
<!--
If you set the basedir property below, then all reported file
names will be relative to the specified directory. See
http://checkstyle.sourceforge.net/5.x/config.html#Checker
<property name="basedir" value="${basedir}"/>
-->
<!-- 檢查每個包中是否有java註釋檔案,預設有package-info.java -->
<!-- <module name="JavadocPackage"/> -->
<!-- 檢查檔案是否以一個空行結束 -->
<module name="NewlineAtEndOfFile"/>
<!-- 檢查property檔案中是否有相同的key -->
<module name="Translation"/>
<!-- 檔案長度不超過1500行 -->
<module name="FileLength">
<property name="max" value="1500"/>
</module>
<!-- 檢查檔案中是否含有'\t' -->
<module name="FileTabCharacter"/>
<!-- Miscellaneous other checks. -->
<module name="RegexpSingleline">
<property name="format" value="\s+$"/>
<property name="minimum" value="0"/>
<property name="maximum" value="0"/>
<property name="message" value="Line has trailing spaces."/>
</module>
<!-- 每個java檔案一個語法樹 -->
<module name="TreeWalker">
<!-- 註釋檢查 -->
<!-- 檢查方法和建構函式的javadoc -->
<module name="JavadocMethod">
<property name="tokens" value="METHOD_DEF" />
</module>
<!-- 檢查類和介面的javadoc。預設不檢查author和version tags -->
<module name="JavadocType"/>
<!-- 檢查變數的javadoc -->
<module name="JavadocVariable"/>
<!-- 檢查javadoc的格式 -->
<module name="JavadocStyle">
<property name="checkFirstSentence" value="false"/>
</module>
<!-- 檢查TODO:註釋 -->
<module name="TodoComment"/>
<!-- 命名檢查 -->
<!-- 區域性的final變數,包括catch中的引數的檢查 -->
<module name="LocalFinalVariableName" />
<!-- 區域性的非final型的變數,包括catch中的引數的檢查 -->
<module name="LocalVariableName" />
<!-- 包名的檢查(只允許小寫字母),預設^[a-z]+(\.[a-zA-Z_][a-zA-Z_0-9_]*)*$ -->
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$" />
<message key="name.invalidPattern" value="包名 ''{0}'' 要符合 ''{1}''格式."/>
</module>
<!-- 僅僅是static型的變數(不包括static final型)的檢查 -->
<module name="StaticVariableName" />
<!-- Class或Interface名檢查,預設^[A-Z][a-zA-Z0-9]*$-->
<module name="TypeName">
<property name="severity" value="warning"/>
<message key="name.invalidPattern" value="名稱 ''{0}'' 要符合 ''{1}''格式."/>
</module>
<!-- 非static型變數的檢查 -->
<module name="MemberName" />
<!-- 方法名的檢查 -->
<module name="MethodName" />
<!-- 方法的引數名 -->
<module name="ParameterName " />
<!-- 常量名的檢查(只允許大寫),預設^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$ -->
<module name="ConstantName" />
<!-- 定義檢查 -->
<!-- 檢查陣列型別定義的樣式 -->
<module name="ArrayTypeStyle"/>
<!-- 檢查方法名、建構函式、catch塊的引數是否是final的 -->
<!-- <module name="FinalParameters"/> -->
<!-- 檢查long型定義是否有大寫的“L” -->
<module name="UpperEll"/>
<!-- Checks for Headers -->
<!-- See http://checkstyle.sf.net/config_header.html -->
<!-- <module name="Header"> -->
<!-- The follow property value demonstrates the ability -->
<!-- to have access to ANT properties. In this case it uses -->
<!-- the ${basedir} property to allow Checkstyle to be run -->
<!-- from any directory within a project. See property -->
<!-- expansion, -->
<!-- http://checkstyle.sf.net/config.html#properties -->
<!-- <property -->
<!-- name="headerFile" -->
<!-- value="${basedir}/java.header"/> -->
<!-- </module> -->
<!-- Following interprets the header file as regular expressions. -->
<!-- <module name="RegexpHeader"/> -->
<!-- import檢查-->
<!-- 避免使用* -->
<module name="AvoidStarImport"/>
<!-- 檢查是否從非法的包中匯入了類 -->
<module name="IllegalImport"/>
<!-- 檢查是否匯入了多餘的包 -->
<module name="RedundantImport"/>
<!-- 沒用的import檢查,比如:1.沒有被用到2.重複的3.import java.lang的4.import 與該類在同一個package的 -->
<module name="UnusedImports" />
<!-- 長度檢查 -->
<!-- 每行不超過150個字元 -->
<module name="LineLength">
<property name="max" value="150" />
</module>
<!-- 方法不超過150行 -->
<module name="MethodLength">
<property name="tokens" value="METHOD_DEF" />
<property name="max" value="150" />
</module>
<!-- 方法的引數個數不超過5個。 並且不對構造方法進行檢查-->
<module name="ParameterNumber">
<property name="max" value="10" />
<property name="ignoreOverriddenMethods" value="true"/>
<property name="tokens" value="METHOD_DEF" />
</module>
<!-- 空格檢查-->
<!-- 方法名後跟左圓括號"(" -->
<module name="MethodParamPad" />
<!-- 在型別轉換時,不允許左圓括號右邊有空格,也不允許與右圓括號左邊有空格 -->
<module name="TypecastParenPad" />
<!-- Iterator -->
<!-- <module name="EmptyForIteratorPad"/> -->
<!-- 檢查尖括號 -->
<!-- <module name="GenericWhitespace"/> -->
<!-- 檢查在某個特定關鍵字之後應保留空格 -->
<module name="NoWhitespaceAfter"/>
<!-- 檢查在某個特定關鍵字之前應保留空格 -->
<module name="NoWhitespaceBefore"/>
<!-- 操作符換行策略檢查 -->
<module name="OperatorWrap"/>
<!-- 圓括號空白 -->
<module name="ParenPad"/>
<!-- 檢查分隔符是否在空白之後 -->
<module name="WhitespaceAfter"/>
<!-- 檢查分隔符周圍是否有空白 -->
<module name="WhitespaceAround"/>
<!-- 修飾符檢查 -->
<!-- 檢查修飾符的順序是否遵照java語言規範,預設public、protected、private、abstract、static、final、transient、volatile、synchronized、native、strictfp -->
<module name="ModifierOrder"/>
<!-- 檢查介面和annotation中是否有多餘修飾符,如介面方法不必使用public -->
<module name="RedundantModifier"/>
<!-- 程式碼塊檢查 -->
<!-- 檢查是否有巢狀程式碼塊 -->
<module name="AvoidNestedBlocks"/>
<!-- 檢查是否有空程式碼塊 -->
<module name="EmptyBlock"/>
<!-- 檢查左大括號位置 -->
<module name="LeftCurly"/>
<!-- 檢查程式碼塊是否缺失{} -->
<module name="NeedBraces"/>
<!-- 檢查右大括號位置 -->
<module name="RightCurly"/>
<!-- 程式碼檢查 -->
<!-- 檢查是否在同一行初始化 -->
<!-- <module name="AvoidInlineConditionals"/> -->
<!-- 檢查空的程式碼段 -->
<module name="EmptyStatement"/>
<!-- 檢查在重寫了equals方法後是否重寫了hashCode方法 -->
<module name="EqualsHashCode"/>
<!-- 檢查區域性變數或引數是否隱藏了類中的變數 -->
<module name="HiddenField">
<property name="tokens" value="VARIABLE_DEF"/>
</module>
<!-- 檢查是否使用工廠方法例項化 -->
<module name="IllegalInstantiation"/>
<!-- 檢查子表示式中是否有賦值操作 -->
<module name="InnerAssignment"/>
<!-- 檢查是否有"魔術"數字 -->
<module name="MagicNumber">
<property name="ignoreNumbers" value="0, 1"/>
<property name="ignoreAnnotation" value="true"/>
</module>
<!-- 檢查switch語句是否有default -->
<module name="MissingSwitchDefault"/>
<!-- 檢查是否有過度複雜的布林表示式 -->
<module name="SimplifyBooleanExpression"/>
<!-- 檢查是否有過於複雜的布林返回程式碼段 -->
<module name="SimplifyBooleanReturn"/>
<!-- 類設計檢查 -->
<!-- 檢查類是否為擴充套件設計l -->
<!-- <module name="DesignForExtension"/> -->
<!-- 檢查只有private建構函式的類是否宣告為final -->
<module name="FinalClass"/>
<!-- 檢查工具類是否有putblic的構造器 -->
<module name="HideUtilityClassConstructor"/>
<!-- 檢查介面是否僅定義型別 -->
<module name="InterfaceIsType"/>
<!-- 檢查類成員的可見度 -->
<module name="VisibilityModifier"/>
<!-- 其他檢查 -->
<!-- 檔案中使用了System.out.print等
<module name="GenericIllegalRegexp">
<property name="format" value="System\.out\.print"/>
</module>
<module name="GenericIllegalRegexp">
<property name="format" value="System\.exit"/>
</module>
<module name="GenericIllegalRegexp">
<property name="format" value="printStackTrace"/>
</module>-->
<!-- 程式碼質量 -->
<!-- 圈複雜度
<module name="CyclomaticComplexity">
<property name="max" value="2"/>
</module> -->
</module>
</module>
3.在java檔案中 右鍵選擇Check Current File,進行程式碼檢測。
程式碼規範外掛當然還有很多,例如PMD,FindBugs,Jtest等在這讀者有興趣,請自行安裝使用。
二、程式碼編寫類
1.Lombok plugin ✔
lombok可以簡化你的實體類,讓你i不再寫get/set方法,還能快速的實現builder模式,以及鏈式呼叫方法
官網 https://projectlombok.org/features/index.html
在idea安裝了Lombok外掛,並在專案中依賴這個Lombok jar,以maven為例:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
@Getter / @Setter
可以作用在類上和屬性上,放在類上,會對所有的非靜態(non-static)屬性生成Getter/Setter方法,放在屬性上,會對該屬性生成Getter/Setter方法。並可以指定Getter/Setter方法的訪問級別。
@EqualsAndHashCode
預設情況下,會使用所有非瞬態(non-transient)和非靜態(non-static)欄位來生成equals和hascode方法,也可以指定具體使用哪些屬性。
@ToString
生成toString方法,預設情況下,會輸出類名、所有屬性,屬性會按照順序輸出,以逗號分割。
@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor
無參構造器、部分引數構造器、全參構造器,當我們需要過載多個構造器的時候,Lombok就無能為力了。
@Data
@ToString, @EqualsAndHashCode, 所有屬性的@Getter, 所有non-final屬性的@Setter和@RequiredArgsConstructor的組合,通常情況下,我們使用這個註解就足夠了。
@Slf4j
提供了日誌操作,在程式碼中直接使用log這個引用即可,例如log.info(…),log.error(…)等等
用法示例如圖:
注:idea中快捷鍵 ALT+7 檢視類的欄位、屬性、方法,是否繼承等
當然該工具還提供了通過註解轉換對應程式碼,示例如圖:
2.CamelCase
將不是駝峰格式的名稱,快速轉成駝峰格式。選中要修改的名稱,按快捷鍵shift+alt+u。也可以通過不斷的快捷鍵進行你想要的名稱進行切換。
3.Mybatis plugin
可以在mapper介面中和mapper的xml檔案中來回跳轉,就想介面跳到實現類那樣簡單。但該外掛並非免費,故推薦使用Free Mybatis plugin。
Mybatis Plugin外掛安裝破解及使用:https://blog.csdn.net/u011410529/article/details/54098067
4.Free Mybatis plugin ✔
Free Mybatis plugin,讓你的mybatis.xml像java程式碼一樣編輯。我們開發中使用mybatis時時長需要通過mapper介面查詢對應的xml中的sql語句,該外掛方便了我們的操作。
5.codehelper.generator ✔
可以讓你在建立一個物件並賦值的時候,快速的生成程式碼,不需要一個一個屬性的向裡面set,根據new關鍵字,自動生成掉用set方法的程式碼,還可以一鍵填入預設值。
GenAllSetter 特性
-
在Java方法中, 根據 new 關鍵詞, 為Java Bean 生成所有Setter方法。
-
按GenAllSetter鍵兩次, 會為Setter方法生成預設值。
-
可在Intellij Idea中為GenAllSetter設定快捷鍵。
-
如何使用:
- 將游標移動到 new 語句的下一行。
- 點選主選單Tools-> Codehelper-> GenAllSetter, 或者按下GenAllSetter快捷鍵。
GenDaoCode 特性
-
根據Pojo 檔案一鍵生成 Dao,Service,Xml,Sql檔案。
-
Pojo檔案更新後一鍵更新對應的Sql和mybatis xml檔案。
-
提供insert,insertList,update,select,delete五種方法。
-
能夠批量生成多個Pojo的對應的檔案。
-
自動將pojo的註釋新增到對應的Sql檔案的註釋中。
-
豐富的配置,如果沒有配置檔案,則會使用預設配置。
-
可以在Intellij Idea中快捷鍵配置中配置快捷鍵。
-
目前支援MySQL + Java,後續會支援更多的DB。
-
如果喜歡我們的外掛,非常感謝您的分享。
GenDaoCode 使用方法
- 主選單Tools-> Codehelper-> GenDaoCode 按鍵便可生成程式碼。
- 方法一:點選GenDaoCode,然後根據提示框輸入Pojo名字,多個Pojo以 | 分隔。
- Codehelper Generator會根據預設配置為您生成程式碼。
- 方法二:在工程目錄下新增檔名為codehelper.properties的檔案。
- 點選GenDaoCode,Codehelper Generator會根據您的配置檔案為您生成程式碼
6.String Manipulation
強大的字串轉換工具。使用快捷鍵,Alt+m。
- 切換樣式(camelCase, hyphen-lowercase, HYPHEN-UPPERCASE, snake_case, SCREAMING_SNAKE_CASE, dot.case, words lowercase, Words Capitalized, PascalCase)
- 轉換為SCREAMING_SNAKE_CASE (或轉換為camelCase)
- 轉換為 snake_case (或轉換為camelCase)
- 轉換為dot.case (或轉換為camelCase)
- 轉換為hyphen-case (或轉換為camelCase)
- 轉換為hyphen-case (或轉換為snake_case)
- 轉換為camelCase (或轉換為Words)
- 轉換為camelCase (或轉換為lowercase words)
- 轉換為PascalCase (或轉換為camelCase)
- 選定文字大寫
- 樣式反轉
7.GsonFormat ✔
一鍵根據json文字生成java類 。在類的內部,使用快捷鍵 alt+s
三、美觀類
1.Background image Plus
1.在View->Set Background Image進行設定
選擇背景圖:
2.Material Theme UI
這是一款主題外掛,可以讓你的ide的圖示變漂亮,配色搭配的很到位,還可以切換不同的顏色,甚至可以自定義顏色。預設的配色就很漂亮了,如果需要修改配色,可以在工具欄中Tools->Material Theme然後修改配色等。
3.Nyan progress bar
這是一個將你idea中的所有的進度條都變成萌新動畫的小外掛。
4.Rainbow Brackets ✔
彩虹顏色的括號 看著很舒服 敲程式碼效率變高
5.CodeGlance
在編輯程式碼最右側,顯示一塊程式碼小地圖,右側面板有這個地圖,拖動起來更加方便一點
6.Grep Console ✔
Grep Console 允許您定義一系列的正則表示式,利用它們來對控制檯的輸出或檔案進行測試。每一個表示式匹配的行都會被整行的應用某個樣式,或者播放聲音。例如,你可以將錯誤訊息設定為以紅色的背景來顯示。
7.activate-power-mode
純粹為了秀而存在的外掛
個人推薦設定:Window–>activate-power-mode–>去掉combo/shake,其他三個全勾上
工具類
1.JRebel for Intellij ✔
JRebel是一個提升生產力的工具,它可以幫助開發人員快速的重新載入更改的程式碼。 它跳過了Java開發中常見的重新構建,重啟以及重新部署的迴圈操作。 JRebel使開發人員能夠在相同的時間內完成更多的工作,讓開發人員的編碼過程變得更加流暢。但該軟體是收費的,破解教程:https://my.oschina.net/bluell/blog/1796575
1.用自己下載的tomcat執行專案
2.springboot專案,採用springboot巢狀的tomcat
教程:https://www.jianshu.com/p/bdc88bef0af2
2.Translation ✔
翻譯外掛,支援google翻譯 百度翻譯 有道翻譯
3.stackOverflow
前提是需要網路能正常訪問到google。
會對所選擇的內容 進行google搜尋
3.Key promoter X ✔
Key Promoter X 是一個提示外掛,當你在IDEA裡面使用滑鼠的時候,如果這個滑鼠操作是能夠用快捷鍵替代的,那麼Key Promoter X會在右下角彈出一個提示框,告知你這個滑鼠操作可以用什麼快捷鍵替代。
4.MyBatis Log Plugin ✔
MyBatis Log Plugin主要作用是把mybatis生成的PreparedStatement語句恢復成原始完整的sql語句。
它將用真實的引數值替換PreparedStatement語句的問號佔位符。
通過 “Tools -> MyBatis Log Plugin” 這個選單可以實時輸出sql日誌。
點選視窗左邊的 “Filter” 按鈕,可以過濾不想要輸出的sql語句。
點選視窗左邊的 “Format Sql” 按鈕,可以格式化輸出的sql語句
左邊幾個按鈕的作用:
- Filter: 過濾語句配置
- Rerun: 重新啟動
- Stop: 停止輸出
- Format Sql: 格式化後續輸出的Sql語句
- Close: 關閉該視窗
5.Markdown support
開啟.md檔案就可以通過一個支援md的檢視檢視和編輯內容。一般用於寫README.md檔案。
6.MetricsReloaded
所在位置Analyze->Calculate Metrics
MetricsReloaded是一個計算程式碼複雜度即圈複雜度的Jetbrain開源開發的第三方外掛。關於程式碼複雜度,有個維度的衡量,在這裡需要普及下軟體複雜度的相關知識:基本複雜度(Essential Complexity (ev(G))、模組設計複雜度(Module Design Complexity (iv(G)))、Cyclomatic Complexity (v(G))圈複雜度。
ev(G)基本複雜度是用來衡量程式非結構化程度的,非結構成分降低了程式的質量,增加了程式碼的維護難度,使程式難於理解。因此,基本複雜度高意味著非結構化程度高,難以模組化和維護。實際上,消除了一個錯誤有時會引起其他的錯誤。
Iv(G)模組設計複雜度是用來衡量模組判定結構,即模組和其他模組的呼叫關係。軟體模組設計複雜度高意味模組耦合度高,這將導致模組難於隔離、維護和複用。模組設計複雜度是從模組流程圖中移去那些不包含呼叫子模組