摘要:因?yàn)楣ぷ餍枰罱佑|到了,需要根據(jù)項(xiàng)目自定義和規(guī)則,由于國(guó)內(nèi)的資料實(shí)在是比較少,并且官網(wǎng)的資料全是英文的,看起來(lái)實(shí)在是頭疼,所以希望寫(xiě)點(diǎn)資料能夠幫助到其他人。
基本思路因?yàn)楣ぷ餍枰罱佑|到了SonarQube,需要根據(jù)項(xiàng)目自定義Java和Xml規(guī)則,由于國(guó)內(nèi)的資料實(shí)在是比較少,并且官網(wǎng)的資料全是英文的,看起來(lái)實(shí)在是頭疼,所以希望寫(xiě)點(diǎn)資料能夠幫助到其他人。
官網(wǎng)地址:https://www.sonarqube.org
在此感謝hu_qingen (古月隨筆) 和 馮澍雨 提供的幫助
1、下載官方提供的規(guī)則插件包
2、根據(jù)需求編寫(xiě)規(guī)則類(lèi)
3、編譯打包
4、上傳自定義規(guī)則插件
下載地址:
1、Java自定義規(guī)則插件:
https://github.com/SonarSourc...
2、Xml自定義規(guī)則插件:
https://sonarsource.bintray.c...
JDK1.8以上
Mavean
Jenkins
目前SonarQube自定義規(guī)則支持的方式有兩種: 編寫(xiě)java類(lèi)和編寫(xiě)XPath表達(dá)式,這兩種方式都是基于AST(Abstract Syntax Tree抽象語(yǔ)法樹(shù))語(yǔ)法結(jié)構(gòu)來(lái)實(shí)現(xiàn)的。
1、Xpath方式
需求:
從Java代碼中查找是否存在 while {}這種語(yǔ)法結(jié)構(gòu)
表達(dá)式代碼:
//WhileStatement[not(Statement/Block)]
步驟:
將表達(dá)式代碼放入自定義規(guī)則插件中的Expression中
這種方式需要借助第三方工具來(lái)寫(xiě)表達(dá)式,并且要對(duì)Xpath語(yǔ)法比較熟練,我覺(jué)得并不是很強(qiáng)大,需要花一定的時(shí)間學(xué)習(xí)。
2、Java方式
需求:從Xml文件中查找,元素是否存在“zbc_test”這樣的內(nèi)容
步驟:
① 創(chuàng)建自定義規(guī)則類(lèi)
sonar-xml-plugin/src/main/java/org/sonar/plugins/check
② 根據(jù)規(guī)則需求編寫(xiě)代碼
③ 注冊(cè)新加入的規(guī)則
④ 編寫(xiě)規(guī)則描述及等級(jí)分類(lèi)文件,名字要和規(guī)則類(lèi)中的Key相同或者規(guī)則類(lèi)名相同
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選擇要編譯打包的項(xiàng)目文件,使用Maven進(jìn)行編譯,如果編譯時(shí)不需要進(jìn)行單元測(cè)試,可以跳過(guò)測(cè)試。
編譯成功
將編譯好的插件上傳至指定路徑:/sonarqube-6.3/extensions/plugins
重新啟動(dòng)SonarQube,進(jìn)入菜單Administration—System - Update Center 查看自定義規(guī)則插件是否安裝成功
查看自定義規(guī)則進(jìn)入SonarQube - Rules 選擇XML可以查看剛剛編寫(xiě)的自定義規(guī)則:
自定義規(guī)則的描述如下:
兩種方法,編寫(xiě)單元測(cè)試類(lèi)和手工測(cè)試,需要根據(jù)規(guī)則的復(fù)雜程度進(jìn)行選擇。
編寫(xiě)Java單元測(cè)試類(lèi):
java-custom-rules/src/test/java/org/sonar/samples/java/checks/MyCustomSubscriptionRuleTest.java
編寫(xiě)Xml單元測(cè)試類(lèi):
sonar-xml-plugin/src/test/java/org/sonar/plugins/xml/checks/IllegalTabCheckTest.java
手工測(cè)試:
進(jìn)入Jenkins,選擇要掃描的項(xiàng)目進(jìn)行構(gòu)建,構(gòu)建完成后點(diǎn)擊右側(cè)的SonarQube藍(lán)色圖標(biāo),查看掃描結(jié)果
選擇左側(cè)的選項(xiàng),查看所有存在問(wèn)題的文件和錯(cuò)誤規(guī)則
點(diǎn)擊文件名查看所有掃描出來(lái)的錯(cuò)誤代碼及說(shuō)明
總結(jié)剛開(kāi)始以為只要寫(xiě)幾個(gè)表達(dá)式,就可以很方便實(shí)現(xiàn)復(fù)雜的規(guī)則,但是摸索了幾天查了幾天的Google ,才知道還是要下載官方的自定義規(guī)則插件,然后用Java編寫(xiě)自己的規(guī)則類(lèi),饒了一大圈很累。
我還下載了其他的一些SonarQube插件,通過(guò)查看代碼發(fā)現(xiàn),基本都遵守并實(shí)現(xiàn)了官方的Plugin接口
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/70121.html
摘要:是一個(gè)用于代碼質(zhì)量管理的開(kāi)源平臺(tái)。支持,此處以為例。注意,此處必須保證該私鑰對(duì)應(yīng)的公鑰即必須配置在上,否則會(huì)失敗配置完成后點(diǎn)擊。單元測(cè)試?yán)妹钸\(yùn)行虛擬機(jī)進(jìn)行單元測(cè)試,然后把輸出結(jié)果數(shù)據(jù)生成報(bào)告。 摘要: Jenkins Jenkins是一款開(kāi)源的持續(xù)集成工具,它的特點(diǎn):易于安裝、易于配置、可擴(kuò)展(自己開(kāi)發(fā)插件),并且它擁有數(shù)以百計(jì)的成熟插件,這種插件式的特點(diǎn)提供可做任何事情的可能。 ...
摘要:是一個(gè)用于代碼質(zhì)量管理的開(kāi)源平臺(tái)。支持,此處以為例。注意,此處必須保證該私鑰對(duì)應(yīng)的公鑰即必須配置在上,否則會(huì)失敗配置完成后點(diǎn)擊。單元測(cè)試?yán)妹钸\(yùn)行虛擬機(jī)進(jìn)行單元測(cè)試,然后把輸出結(jié)果數(shù)據(jù)生成報(bào)告。 摘要: Jenkins Jenkins是一款開(kāi)源的持續(xù)集成工具,它的特點(diǎn):易于安裝、易于配置、可擴(kuò)展(自己開(kāi)發(fā)插件),并且它擁有數(shù)以百計(jì)的成熟插件,這種插件式的特點(diǎn)提供可做任何事情的可能。 ...
摘要:特點(diǎn)開(kāi)源的代碼質(zhì)量管控平臺(tái),我們使用的即為。一個(gè)擴(kuò)展插件,可以安裝在與等開(kāi)發(fā)工具中中的使用安裝,搜索。連接的主要目的是同步分析規(guī)則質(zhì)量規(guī)則與自定義設(shè)置。結(jié)果同步顯示同部分,此部分要求為。 介紹 ? 代碼質(zhì)量管理的開(kāi)源平臺(tái),用于管理源代碼的質(zhì)量 通過(guò)插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十幾種編程語(yǔ)...
摘要:下面列出了個(gè)有助于你開(kāi)發(fā)應(yīng)用程序最好的工具。官方網(wǎng)站是一個(gè)集多功能于一身的故障排除工具。此輕便的工具有著驚人的分析能力。它提供了規(guī)則警報(bào)閾值排除和設(shè)置功能。官方網(wǎng)站以上就是每個(gè)程序員需要了解的個(gè)開(kāi)發(fā)工具,希望對(duì)你有所幫助。 Java是計(jì)算機(jī)應(yīng)用程序編程語(yǔ)言,被廣泛用于創(chuàng)建Web應(yīng)用、服務(wù)器處理、用戶端的API開(kāi)發(fā)乃至數(shù)據(jù)庫(kù)等多個(gè)領(lǐng)域。下面列出了8個(gè)有助于你開(kāi)發(fā)Java應(yīng)用程序最好的Ja...
閱讀 2348·2021-11-15 11:37
閱讀 2625·2021-09-23 11:21
閱讀 2951·2021-09-07 10:11
閱讀 3164·2019-08-30 15:53
閱讀 2826·2019-08-29 15:13
閱讀 1606·2019-08-26 13:57
閱讀 1098·2019-08-26 12:23
閱讀 2438·2019-08-26 11:51