Java程式碼質量檢查checkstyle, pmd, cpd, p3c,findbugs, jacoco, sonarquebe以及和Jenkins整合
概述
又搞一邊質量掃描外掛,之前做過一遍,然後後面各種忽略,然後就放棄了,所以,應該尋找一種方法,循序漸進的實施。本次將實施一個基本的打包掃描方案,包含
- checkstyle 固定團隊編碼風格,固定命名風格以及換行風格等,原型配置出資googlestyle, 修改縮排為4個字元(原型是2個)
- surefile test report Junit Test結果報告
- JaCoCo test coverage 程式碼測試覆蓋率外掛
- 阿里巴巴Java程式碼掃描外掛P3C(PMD)
- cpd 重複程式碼掃描
- Findbugs 通用Java bug檢查
- Sonar Quabe 一站式程式碼質量審查平臺
1. Maven pom外掛安裝
現有完整的程式碼demo: https://github.com/Ryan-Miao/code-quality-verify-demo
具體外掛內容,檢視 https://github.com/Ryan-Miao/code-quality-verify-demo/blob/master/pom.xml
這裡大概敘述下配置原理。首先,maven構建生態分build和report,而build又分verify, compile, test, install等生命週期。我們的外掛就是基於這幾個概念而產生作用的。
先說report外掛,位於reporting目錄下,主要是在執行mvn site的時候生成各種html report,這裡綁定了想要生成各種report的的外掛配置。生成的report檔案最終位於target/site。
然後是build外掛,在構建過程中發生作用。這裡可以繫結外掛執行到構建過程,比如verify, 當執行install的時候,我們外掛就會執行。考慮為了檢視report,這裡就不繫結生命週期,而是直接通過執行goal的方式來檢查。
需要注意的是:
1.Jacoco的覆蓋率,目前只配置了全域性行覆蓋和分支覆蓋,不新增閾值則為0,修改閾值實現覆蓋率的控制。可以過濾不需要掃描的檔案,比如生成的java檔案。
2.checkstyle,這個讀取我們自定義的checkstyle的配置,後期在使用過程中修改完善程我們自己的配置方案。可以過濾不需要掃描的檔案,比如生成的java檔案。
3.阿里巴巴Java規範,這個是PMD掃描,但移除了PMD自帶的n條規則,只執行阿里的規則,可以過濾不需要掃描的檔案,比如生成的java檔案。
在程式碼裡通過註解或者註釋忽略掃描:
1.1 checkstyle忽略
忽略單獨的程式碼模組,比如spring security的配置
//CHECKSTYLE:OFF
public void someMethod(String arg1, String arg2, String arg3, String arg4) {
//CHECKSTYLE:ON
忽略匹配正則
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<configLocation>config/checkstyle/google-checks-6.18.xml</configLocation>
<consoleOutput>true</consoleOutput>
<encoding>UTF-8</encoding>
<consoleOutput>true</consoleOutput>
<skip>false</skip>
<failsOnError>false</failsOnError>
<linkXRef>true</linkXRef>
<violationSeverity>error</violationSeverity>
<!--<includes>**/TestController.java</includes>-->
<excludes>**/generated/**.java</excludes>
<excludes>**/**Vo.java</excludes>
</configuration>
</plugin>
1.2 P3C阿里Java掃描PMD忽略
阿里Java掃描外掛使用的PMD來實現,對於某些類不想執行掃描,可以在類上添加註解
@SuppressWarnings("PMD")
也可以直接在excludes裡配置
<excludes>
<exclude>**/*Bean.java</exclude>
<exclude>**/generated/**.java</exclude>
</excludes>
1.3 FindBugs掃描忽略
FindBugs有些檢查我們不想改,比如總是判定Date類是可變的。事實上,我們應該都切換為LocalDate或LocalDateTime,但總有遺留程式碼採用Date,此時可以忽略掃描
修改配置檔案https://github.com/Ryan-Miao/code-quality-verify-demo/blob/master/config/findbugs/findbugs-exclude.xml,
比如正則匹配
<Match>
<Class name="~.*\.entity\..*" />
</Match>
<Match>
<Class name="~.*\.vo\..*" />
</Match>
2 生成report
上面的pom配置後,執行mvn install site
即可生成各種報告
阿里Java檢查報告:
checkstyle編碼規範報告:
3 檢查閾值
site命令會生成對應的report,但實際開發中,我們會期望出現錯誤時停止構建,提醒開發者修復問題。bug發現的越早,修復的成本越低。那麼,就需要給各個掃描外掛設定失敗閾值。
3.1Checkstyle設定失敗
我們可以選擇把checkstyle:check繫結到verify的生命週期上,這樣工程師每次變異都會掃描,當出現不符合規範的code style就會編譯失敗。也可以在檢查的時候手動執行一下check。最終,我選擇了手動check方案。
mvn checkstyle:check
3.2 阿里巴巴Java掃描設定失敗
mvn pmd:check
3.3 Findbugs 發現bug失敗
findbugs:check
4 Jenkins整合
程式碼質量不能靠個人素質來維護,而是通過完善的流程制度來保障。我們的程式碼開發最終都要merge到開發分支。我們只要卡住合併時的程式碼質量就可以了。規定:當代碼合併到dev或者master等保護分支時,CI構建必須success,否則不允許合併分支。
整合Jenkins和Gitlab,新增Merge-Request/Pull-Request掃描任務,當發起Pull Request後自動Jenkins構建,並將構建結果寫回Gitlab。
我們使用Jenkins pipeline來配置任務,編寫Jenkinsfile
https://github.com/Ryan-Miao/code-quality-verify-demo/blob/master/Jenkinsfile
當任務構建時,我們會生成報告,然後,檢查是否通過了掃描。
我們使用Jenkins Warnings Next Generation外掛
該外掛也提供了qualityGates來根據掃描結果中斷構建,但為了保證配置一致性,我採用maven外掛自帶構建失敗功能。當所有掃描通過了即構建成功,允許合併。
相關推薦
Java程式碼質量檢查checkstyle, pmd, cpd, p3c,findbugs, jacoco, sonarquebe以及和Jenkins整合
概述 又搞一邊質量掃描外掛,之前做過一遍,然後後面各種忽略,然後就放棄了,所以,應該尋找一種方法,循序漸進的實施。本次將實施一個基本的打包掃描方案,包含 checkstyle 固定團隊編碼風格,固定命名風格以及換行風格等,原型配置出資googlestyle, 修改縮排為4個字元(原型是2個) surefil
idea,配置checkstyle 【提高程式碼質量,檢查程式碼規範的工具 】Checkstyle,FindBugs,PMD,Jtest
idea,配置checkstyle 【提高程式碼質量,檢查程式碼規範的工具 】Checkstyle,FindBugs,PMD,Jtest 2016年12月15日 14:19:02 common_util 閱讀數:18818更多 個人分類: 開發 版權宣告:本文為博主原創文章,可以轉載分
Java程式碼靜態檢查、規範、格式化和checkstyle檢查配置文件
<?xml version="1.0"?> <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN" "http://www.puppycrawl.co
idea,配置checkstyle 【提高程式碼質量,檢查程式碼規範的工具 】Checkstyle
CheckStyle是SourceForge下的一個專案,提供了一個幫助JAVA開發人員遵守某些編碼規範的工具。它能夠自動化程式碼規範檢查過程,從而使得開發人員從這項重要,但是枯燥的任務中解脫出來。 CheckStyle檢驗的主要內容 列表內容 Jav
pre-commit鉤子,程式碼質量檢查
目前基本使用三款js程式碼質量檢查工具: jslint, jshint, eslint。許多IDE裡面也有對應的檢查外掛,在每次ctrl + s 儲存檔案的時候,檢查當前檔案是否符合規範,保證程式碼質量。 許多團隊都會指定一套程式碼規範code review,更加嚴格的檢查每次程式碼修改。 也可以在
程式碼質量檢查-SonarQube
SonarQube是管理程式碼質量一個開放平臺,可以快速的定位程式碼中潛在的或者明顯的錯誤 sonarQube : 提供圖形介面管理,報表展示,可靈活配置程式碼檢測的外掛 (findbugs;checkStyle;pmd等) 一、安裝: 1.下載好sonarqube後,
Jenkins+Sonar搭建持續整合和程式碼質量檢查環境
Jenkins+Sonar搭建 一、相關環境及下載地址 二、軟體安裝 Jenkins安裝 命令:dpkg –i jenkins_2.121.3_all.deb 若有報錯,執行# apt-get update 和# apt-get –f install, # ln -s /opt/jdk1.8.0_131/b
如何在Java程式碼中檢查字串中是否包含中文?
今天和同事在討論一個問題,需要檢查“輸入的字串中是否包含中文”,剛開始想到是用正則表示式,正則表示式中是以[u4e00-u9fa5]來全匹配字元是否是中文,但現在面臨的問題是這個字串中還可能包含英文字元、數字、特殊字元,一時也沒想出能匹配該場景的正則表示式,後來在網上搜了下,可以使用Matcher類
程式碼質量檢查的利器:SonarQube
SonarQube 是一個用於程式碼質量管理的開源平臺,用於管理原始碼的質量。 通過外掛形式,可以支援包括 java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十幾種程式語言的程式碼質量管理與檢測。關於Sonarqube的環境搭建,可
Java程式碼質量改進之:同步物件的選擇
在Java中,讓執行緒同步的一種方式是使用synchronized關鍵字,它可以被用來修飾一段程式碼塊,如下: synchronized(被鎖的同步物件) { // 程式碼塊:業務程式碼 } 當synchronized被用來修飾程式碼塊的時候表示
提高你的Java程式碼質量吧:危險的邊界
一、分析在單元測試中,有一項測試叫做邊界測試(也有叫做臨界測試),它能避免出現:數字越界使檢驗條件失效。如果一個方法接受的是Int型別的引數,那一些三個值是必須的:0、正最大、負最大、其中正最大和負最大
提高你的Java程式碼質量吧:優先使用整形池
一、分析包裝型別產生物件的兩種方式:1.new產生的Integer物件new宣告的就是要生成一個物件,沒二話,這就是兩個物件,地址肯定不相等。2.裝箱生成的物件裝箱動作是通過valueOf()方法實現的
提高你的Java程式碼質量吧:避免基本型別陣列轉換列表陷阱(Arrays.asList())
一、分析我們在開發的過程中經常會使用Arrays和Collections這兩個工具類在陣列和列表之間轉換。Arrays.asList()方法:輸入一個變長引數,返回一個固定長度的列表。看原始碼:publ
提高你的Java程式碼質量吧:頻繁插入和刪除時使用LinkedList
一、分析 前面有文章分析了列表的表裡方式,也就是“讀”的操作。本文將介紹表的“寫”操作:即插入、刪除、修改動作。 二、場景 1.插入元素 列表中我們使用最多的是ArrayList,下面
使用sonar進行java程式碼質量管理
前言 應公司要求,這一次的開發需要進行sonar進行靜態程式碼質量檢測。 接到這個任務的時候,我還並不知道sonar是什麼,但聽到靜態程式碼檢測幾個字的時候,我下意識的以為是類似checkstyle之類的工具,但是真正用過之後我發現我錯了。 我發現實際執行
關於java程式碼質量的問題
一、 錯誤碼:WMI_WRONG_MAP_ITERATOR案例一: 案例二: Bug: Method JTAMainFrame.initView(JFrame) makes inefficient use of keySet iterator instead of en
java程式碼中操作Redis:單機redis、叢集redis(spring+redis整合)
一、準備 關於redis的一些安裝,可以檢視我的幾篇文章自行安裝:Redis目錄。匯入java的Redis客戶端依賴包Jedis:<dependency> <groupId>redis.clients</groupId
java程式碼校驗手機號,帶區號固定電話和400型別的固定電話
public class Tesyt {public static void main(String[] args) { //isPhoneNumberValid("0731-6296363"); //isPhoneNumberValid("0731-62963636");
Intellij IDEA 使用checkstyle、pmd、findbugs檢查靜態程式碼質量
checkstye、pmd、findbugs的對比 在IDEA setting-plugins 下分別搜尋 checkstyle、pmd、findbugs 安裝,安裝後要重啟IDEA。 checkstyle 如上圖開啟checkstyle面板。 可以自己設
Eclipse-Java代碼規範和質量檢查插件-PMD
target 代碼檢測 object obj site 復制 方式 php atl PMD是一個源代碼分析器。 它發現常見的編程缺陷,如未使用的變量、空catch塊、不必要的對象創建等等。 它支持Java、JavaScript、Salesforce.com Apex、PLS