IDEA集成Sonar的完整流程
背景
最近關注代碼質(zhì)量管理工具,用過了阿里的開發(fā)者規(guī)范插件后,又看了下 Sonar ,弄明白這個工具的使用流程花費了小半天的時間,這里整理下其中的盲點。
說來也奇怪,搜索到的 IDEA 集成 Sonar 的文章也不少,就是沒有一篇能教會我這個初次接觸 Sonar 的人。
還得靠自己連蒙帶猜地各種嘗試,才搞明白整個過程。
相關的模塊及關系
Sonar
:該工具的統(tǒng)稱SonarLint
:IDEA 的 Sonar 插件SonarQube
:一個 Web 應用,服務端,統(tǒng)一管理 Sonar 掃描結(jié)果、掃描規(guī)則配置sonar-maven-plugin
:Sonar 客戶端,從 SonarQube 服務器獲取掃描規(guī)則,并上傳掃描結(jié)果到 SonarQube 平臺
插件安裝
插件的安裝比較簡單,這個基本上不會有問題,在插件倉庫中搜索 “SonarLint” 插件,找到插件后點擊安裝即可。
本機已經(jīng)安裝過了,結(jié)果如下:
可能是我本機使用的 IDEA 版本【2016.3.1】比較老,所以插件安裝完成后,只有在某個文件編輯頁面右鍵才有 “Analyze with SonarLint” 操作,而在工程上右鍵,網(wǎng)上都說菜單位于 Analyze 中:
我的 IDEA 中找不到這個操作,但是選中某個文件夾后,可以通過快捷鍵【Ctrl+Shif+S】對該目錄進行掃描,通過進度條可以知道它掃描的是整個目錄:
在單個文件中,右鍵有掃描操作:
注意點:插件安裝成功后,可以直接進行掃描,雖然當前版本的 IDEA 工程右鍵沒有這個操作,但是快捷鍵可以用,說明插件安裝成功。
SonarQube 啟動
SonarQube 是 Sonar 的 Web 管理應用,非解壓版的,下載地址 。
由于這是一個 Web 應用,需要用到數(shù)據(jù)庫,需要創(chuàng)建一個數(shù)據(jù)庫,名稱沒有限制,需要修改配置文件中的數(shù)據(jù)庫連接信息。
操作過程:
- 本地數(shù)據(jù)庫用 MySQL ,創(chuàng)建一個名為 sonar 的數(shù)據(jù)庫
- 解壓 SonarQube ,定位到配置文件目錄 E:\software\sonarqube-7.6\conf
- 修改 sonar.properties 文件,在 28 行添加如下配置:
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false sonar.jdbc.username=root sonar.jdbc.password=123456 sonar.sorceEncoding=UTF-8 sonar.login=admin sonar.password=admin
- 進入 bin 目錄找到跟自己主機一致的目錄 E:\software\sonarqube-7.6\bin\windows-x86-64
- 運行 StartSonar.bat 啟動 SonarQube
注意點:StartSonar.bat 會啟動一個 DOS 窗口運行,首次啟動時耗時較長。此外,關閉 DOS 界面時,后臺對應的 Java 進程不會結(jié)束。
不會結(jié)束的坑就是:端口會繼續(xù)被占據(jù)。
如果再次點擊啟動文件,則啟動操作會閃退,此時可以在 log 目錄中查看日志定位錯誤。
因此,沒有事情的話,不要關閉它的界面,如果必須關閉后重啟,那么關閉后手動打開進程管理器,停掉對應的 Java 進程。
SonarQube 創(chuàng)建工程
SonarQube 啟動后,訪問 http://localhost:9000 進入其登錄界面,輸入 sonar.properties 中配置的帳號和密碼后進入主界面:
SonarQube 是以工程為單位進行掃描管理的,第一步需要點擊 A 前面的 + 號,創(chuàng)建一個新工程:
注意點:如果插件配置認證方式為 Token ,那么這里需要記錄該項目的 Token 信息。
插件配置
IDEA 中需要配置 SonarQube 的訪問地址和工程,配置方法為:
1.打開插件通用配置界面
2.點擊 + 號添加 SonarServer
3.下一步配置認證信息
認證方式有兩種,Token 和密碼,Token 即前面創(chuàng)建項目時生成的 Token 信息。這里選擇密碼方式,輸入 SonarQube 訪問密碼:
4.SonarLint 項目配置
至此,IDEA 插件 SonarLint 和 SonarQube 關聯(lián)配置完成。
maven-sonar 插件
maven-sonar 插件,本質(zhì)是一個 sonar-runner 掃描工具,也是一個客戶端。
根據(jù) 官方 maven-sonar 插件配置教程 完成 Maven setting.xml 配置。
1.添加 maven-sonar 插件
在 pluginGroups 節(jié)點下,添加一個子節(jié)點:
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
2.添加 sonar 的 profile
在 profiles 節(jié)點下添加一個子節(jié)點,配置 sonar 插件的主機 URL:
<profile> <id>sonar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <!-- Optional URL to server. Default value is http://localhost:9000 --> <sonar.host.url> http://localhost:9000 </sonar.host.url> </properties> </profile>
3.工程 pom.xml 配置插件版本
在待掃描工程的 pom.xml 文件中,添加 build 插件,配置 maven-sonar 插件版本:
<plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.6.0.1398</version> </plugin>
maven 執(zhí)行掃描命令
直接運行 maven 生命周期中的各種方法,都不能完成 soanr 代碼掃描及結(jié)果上傳。
官方是通過執(zhí)行mvn sonar:sonar
命令完成的,所以想到的辦法是在 IDEA 的 termianl 控制界面執(zhí)行該命令,測試它的確能完成掃描結(jié)果的上傳:
執(zhí)行成功結(jié)果為:
maven-sonar 插件使用的注意點:不能對 SVN 服務器端版本較低的 SVN 項目進行掃描,否則會執(zhí)行失敗。
錯誤信息如下:
Error when executing blame for file src/main/java/com/xxxx/SpringContextUtil.java: svn: E200007: Retrieval of mergeinfo unsupported by svn:url
網(wǎng)上找的解決辦法不生效,所以只能對本地非 SVN 項目進行代碼掃描。
掃描結(jié)果查看
mvn sonar:sonar
命令執(zhí)行完成后,訪問 SonarCube 主頁能查看最新的掃描結(jié)果:
Issues 菜單下,選擇 All 而不是 My Issues ,貌似它可以對掃描到的 Issues 進行分配,這里能看到所有的問題。
Project 菜單下,呈現(xiàn)各個項目的,這里使用命令執(zhí)行后,自動創(chuàng)建了一個與工程應用名相同的項目:
啟示錄
反復執(zhí)行掃描后,發(fā)現(xiàn) SonarLint 插件的功能跟 maven-sonar 插件是一樣的。理論上來講,通過 SonarLint 功能,即對某個功能執(zhí)行 Analyze with SonarLint 與在終端執(zhí)行 mvn sonar:sonar
命令效果應該一樣才對。
maven 的 setting.xml 中只配置了 SonarQube 的 host.url ,并沒有指定項目名稱,所以執(zhí)行完成 mvn sonar:sonar
命令后,在 Web 頁面會自動創(chuàng)建一個與掃描工程名稱一樣的項目。
而前面對插件配置的 SonarQube Server 和 project 指定是針對 Analyze with SonarLint 的,手動執(zhí)行該操作后,理論上應該在對應的項目中看到掃描結(jié)果的??上?,我這個 IDEA 版本下沒有完成掃描結(jié)果的上傳。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring Cloud出現(xiàn)Options Forbidden 403問題解決方法
本篇文章主要介紹了Spring Cloud出現(xiàn)Options Forbidden 403問題解決方法,具有一定的參考價值,有興趣的可以了解一下2017-11-11SpringBoot+devtools實現(xiàn)熱部署的示例代碼
在軟件項目的開發(fā)過程中,不可避免的會經(jīng)常修改代碼,每次修改代碼,都需要手動停止然后再啟動服務,最后驗證代碼的正確性,今天通過這篇文章,我們一起來學習一下如何使用Spring?Boot?+?devtools?輕松搞定熱部署,需要的朋友可以參考下2024-08-08Java參數(shù)校驗Validator與@AssertTrue深度解析
本文詳細介紹了Java的Validator框架及其@AssertTrue注解的使用,包括環(huán)境準備、基礎注解介紹、實戰(zhàn)示例、@AssertTrue的深入解析、高級特性和最佳實踐建議,感興趣的朋友跟隨小編一起看看吧2025-01-01IntelliJ IDEA(或者JetBrains PyCharm)中彈出"IntelliJ IDEA License
今天小編就為大家分享一篇關于IntelliJ IDEA(或者JetBrains PyCharm)中彈出"IntelliJ IDEA License Activation"的解決辦法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10springboot中RabbitMQ死信隊列的實現(xiàn)示例
死信隊列是一種特殊的消息隊列,用來存儲無法被正常消費的消息,常被用來實現(xiàn)延遲處理,異常消息處理等,本文主要介紹了springboot中RabbitMQ死信隊列的實現(xiàn)示例,感興趣的可以了解一下2024-01-01java實現(xiàn)隊列queue數(shù)據(jù)結(jié)構(gòu)詳解
大家好,本篇文章主要講的是java實現(xiàn)隊列queue數(shù)據(jù)結(jié)構(gòu)詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下2022-02-02