由於工做須要最近接觸到了SonarQube,須要根據項目自定義Java和Xml規則,因爲國內的資料實在是比較少,而且官網的資料全是英文的,看起來實在是頭疼,因此但願寫點資料可以幫助到其餘人。
官網地址:https://www.sonarqube.org
在此感謝hu_qingen (古月隨筆) 和 馮澍雨 提供的幫助html
一、下載官方提供的規則插件包
二、根據需求編寫規則類
三、編譯打包
四、上傳自定義規則插件java
下載地址:
一、Java自定義規則插件:
https://github.com/SonarSourc...git
二、Xml自定義規則插件:
https://sonarsource.bintray.c...github
JDK1.8以上
Mavean
Jenkinsjson
目前SonarQube自定義規則支持的方式有兩種: 編寫java類和編寫XPath表達式,這兩種方式都是基於AST(Abstract Syntax Tree抽象語法樹)語法結構來實現的。
一、Xpath方式
需求:
從Java代碼中查找是否存在 while {}這種語法結構 工具
表達式代碼:
//WhileStatement[not(Statement/Block)]單元測試
步驟:
將表達式代碼放入自定義規則插件中的Expression中學習
這種方式須要藉助第三方工具來寫表達式,而且要對Xpath語法比較熟練,我以爲並非很強大,須要花必定的時間學習。測試
二、Java方式
需求:從Xml文件中查找,元素是否存在「zbc_test」這樣的內容
步驟:
① 建立自定義規則類
sonar-xml-plugin/src/main/java/org/sonar/plugins/checkspa
② 根據規則需求編寫代碼
③ 註冊新加入的規則
④ 編寫規則描述及等級分類文件,名字要和規則類中的Key相同或者規則類名相同
sonar-xmlplugin/src/main/resources/org/sonar/l10n/xml/rules/xml/DbSchemalCheck.html
sonar-xml-plugin/src/main/resources/org/sonar/l10n/xml/rules/xml/DbSchemalCheck.json
Eclipse選擇要編譯打包的項目文件,使用Maven進行編譯,若是編譯時不須要進行單元測試,能夠跳過測試。
編譯成功
將編譯好的插件上傳至指定路徑:/sonarqube-6.3/extensions/plugins
從新啓動SonarQube,進入菜單Administration—System - Update Center 查看自定義規則插件是否安裝成功
進入SonarQube - Rules 選擇XML能夠查看剛剛編寫的自定義規則:
自定義規則的描述以下:
兩種方法,編寫單元測試類和手工測試,須要根據規則的複雜程度進行選擇。
編寫Java單元測試類:
java-custom-rules/src/test/java/org/sonar/samples/java/checks/MyCustomSubscriptionRuleTest.java
編寫Xml單元測試類:
sonar-xml-plugin/src/test/java/org/sonar/plugins/xml/checks/IllegalTabCheckTest.java
手工測試:
進入Jenkins,選擇要掃描的項目進行構建,構建完成後點擊右側的SonarQube藍色圖標,查看掃描結果
選擇左側的選項,查看全部存在問題的文件和錯誤規則
點擊文件名查看全部掃描出來的錯誤代碼及說明
剛開始覺得只要寫幾個表達式,就能夠很方便實現複雜的規則,可是摸索了幾天查了幾天的Google ,才知道仍是要下載官方的自定義規則插件,而後用Java編寫本身的規則類,饒了一大圈很累。我還下載了其餘的一些SonarQube插件,經過查看代碼發現,基本都遵照並實現了官方的Plugin接口