2021-05-12 14:32:11
使用Sonar進行Java程式碼品質管理
前言
應公司要求,這一次的開發需要進行sonar進行靜態程式碼品質檢測。
接到這個任務的時候,我還並不知道sonar是什麼,但聽到靜態程式碼檢測幾個字的時候,我下意識的以為是類似checkstyle之類的工具,但是真正用過之後我發現我錯了。
我發現實際執行的時候,似乎並不純粹是靜態,因為整個檢測過程中還會連線資料庫,還會傳送http請求,還會連線svn等等。
用完之後,深感這個工具的好用,不檢測不知道,一檢測嚇一跳,竟然檢查出來了26個bugs,可靠性級別是像毒血一樣的黑紅E。
那麼廢話不再多說,進入主題,記錄一下整個環境搭建和檢測過程,以便備忘。
安裝
安裝主要是參考了一篇博文使用 Sonar 進行程式碼品質管理,不過有一些細節略有區別。
下載
執行git命令git clone git://github.com/SonarSource/sonar.git
前提是安裝了git,我下載下來的sonar版本是6.5,本地jdk環境是1.8。
解壓
這個就不用多說了
啟動
在解壓後的目錄中一層層找到windows-x86-64StartSonar.bat,當然了,這裡需要選擇適合自己電腦作業系統的目錄。
如果啟動更不報錯,就可以進行下一步。
我在第一次啟動的時候沒有啟動成功,檢視紀錄檔發現是h2記憶體資料庫啟動失敗,然後想起來我電腦安裝的有h2並設定了windows服務自動啟動,所以埠占用,導致sonar裡的h2啟動失敗,然後關閉了本機的h2之後,成功啟動。
存取
瀏覽器存取localhost:9000,前提是啟動不報錯。
外掛
在我參考的那篇部落格裡,安裝完sonar之後就是裝外掛,我當時不知道那外掛具體幹嘛用的,就抱著試一試的心態,並沒有安裝,而是直接跳過了,而在保證完成手頭工作的情況下,後續也沒有再安裝任何外掛。
設定
sonar工作的時候,要使用到資料庫,會把要檢測的專案的程式碼匯入到資料庫中,所以必須進行資料庫的設定,我這裡是使用的mysql資料庫。
建立sonar使用者並授權
在一開始完全不會的情況下,我跟著上邊部落格一步步的做,以為必須是sonar使用者,但後來看到其他一些部落格中並沒有用這個使用者,想來應該其他使用者也可以,不過我沒有試。
建立使用者命令CREATE USER sonar IDENTIFIED BY 'sonar';
使用者授權命令GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar' WITH GRANT OPTION;
建庫
建立一個給sonar用的mysql庫,不用建表,sonar會自動建表,這一步就不多說了。
設定sonar.properties
代開sonar安裝目錄,也就是之前解壓的目錄,找到conf下的sonar.properties檔案,編輯這個檔案。
1. 找到
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
這一行,原本是註釋的,去掉注釋。
2. 找到sonar.jdbc.username
和sonar.jdbc.password
,都填上sonar,如果上邊建立使用者那裡不是sonar,可能需要改一下。
3. 將 MySQL 的驅動檔案(如 mysql-connector-Java-5.1.34.jar)拷貝到 安裝目錄的extensionsjdbc-drivermysql 目錄下,如果沒有這些目錄就自己建立。我的一開始沒有mysql這個目錄,就是自己建立的。
設定maven的settings.xml
在<profiles></prifiles>
加入如下設定
<profile> <id>sonar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <sonar.jdbc.url> jdbc:mysql://localhost:3306/sonar </sonar.jdbc.url> <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver> <sonar.jdbc.username>sonar</sonar.jdbc.username> <sonar.jdbc.password>sonar</sonar.jdbc.password> <sonar.host.url>http://localhost:9000</sonar.host.url> </properties> </profile>
我上邊參考的那個文件裡 url寫的是這樣jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
,但我這樣配之後執行mvn命令報錯,所以就去掉了後邊一截。
進行程式碼檢測
程式碼檢測主要就是在cmd視窗執行了兩個mvn的命令,分別是mvn clean install
和mvn sonar:sonar
,如果這兩個命令執行結果都是build success,基本上就沒有問題了,而我在執行的過程中有遇到下邊一些問題。
java_home的問題
被檢測的專案使用的是jdk1.8,雖然我在cmd命令列視窗執行java -version
結果也是1.8,但是環境變數的java_home設定卻是1.6的路徑,導致執行mvn命令的時候出現如下錯誤Unsupported major.minor version 52.0
,把java_home換成1.8之後問題消失。
maven映象的問題
由於我的maven設定的倉庫映象是阿里雲的映象,而公司最近封網,導致使用內網的時候執行mvn clean install
命令,需要的外掛無法下載,切換到外部網路之後問題解決。這些外掛應該是只有第一次執行的時候才下載,後邊繼續用內網就沒有問題。
資料庫連線的問題
這裡說的資料庫不是sonar要用的mysql,而是專案裡的資料庫。
由於一開始以為靜態程式碼檢查跟資料庫無關,因此專案裡要連線的Oracle資料庫沒有啟動,導致執行上邊命令的時候,因資料庫連線不上而失敗,啟動oracle資料庫後問題解決。
svn連線的問題
這個問題其實我還沒太明白,因為專案裡似乎並沒有設定svn相關的東西,但是執行mvn sonar:sonar
的時候,卻因svn連線不上而失敗,當切換網路連線上svn後,問題解決。
程式碼優化
上述問題都解決之後,使用localhost:9000存取之後,就可以看到我們要檢查的專案。看到頁面之後的操作,自己點一點滑鼠就很容易明白,很容易找到有問題的程式碼具體的類,具體的行數等,甚至頁面上還會給出優化方案,然後就可以根據具體顯示出來的程式碼及優化方案進行優化了。
設定Sonar、Jenkins進行持續審查 http://www.linuxidc.com/Linux/2016-08/133877.htm
sonarQube程式碼品質管理工具環境籌建筆記 http://www.linuxidc.com/Linux/2016-08/133878.htm
SonarQube程式碼品質管理平台安裝與使用 http://www.linuxidc.com/Linux/2016-08/133879.htm
SonarQube升級過程記錄 http://www.linuxidc.com/Linux/2016-08/133880.htm
Ubuntu 16.04下安裝設定SonarQube+MySQL http://www.linuxidc.com/Linux/2017-05/143860.htm
在Fedora 21上搭建Jenkins+SonarQube的Maven專案自動化測試平台 http://www.linuxidc.com/Linux/2017-02/140780.htm
Sonar 的詳細介紹:請點這裡
Sonar 的下載地址:請點這裡
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-12/149926.htm
相關文章