作為代碼質(zhì)量檢查的流行工具,比如sonarqube能夠檢查代碼的“七宗罪”,跟代碼結(jié)合起來能夠更好地提高代碼的質(zhì)量,這篇文章將會(huì)介紹如何結(jié)合gradle和sonarqube對(duì)代碼質(zhì)量與測試覆蓋率進(jìn)行分析。
sonarqube
sonarqube可以使用docker版本快速搭建,可以參看一下easypack整理的鏡像,具體使用可以參看如下鏈接,這里不再贅述:
環(huán)境假定
本文使用到的sonarqube為本機(jī)32003可以訪問到的服務(wù)。
gradle的sonarqube插件
gradle中的sonarqube的插件是org.sonarqube,用來在gradle中調(diào)用sonarqube進(jìn)行代碼質(zhì)量分析。詳細(xì)介紹請(qǐng)參看:
- https://plugins.gradle.org/plugin/org.sonarqube
- 當(dāng)前插件最新版本:2.6.2(更新于2018/2/13)
使用方式
指定plugin
在build.gradle中添加如下插件版本信息
1
2
3
|
plugins { id "org.sonarqube" version "2.6.2" } |
添加apply plugin信息
1
|
apply plugin: "org.sonarqube" |
sonarqube設(shè)定信息
最簡單的需求的情況下,非多工程項(xiàng)目做以上配置即可,接下來就是傳遞給gradle所需要的sonarqube的詳細(xì)信息,而這些可以通過property的方式傳入,詳細(xì)的使用方式在前面的基礎(chǔ)中都已介紹,此處不再贅述,主要設(shè)定的內(nèi)容為:
- url:systemprop.sonar.host.url=http://localhost:32003
- 用戶名:systemprop.sonar.login=admin
- 密碼:systemprop.sonar.password=admin
設(shè)定方式可以使用如下方式:
1
2
3
4
5
6
7
|
sonarqube { properties { property "sonar.host.url" , "http://localhost:32003" property "sonar.login" , "admin" property "sonar.password" , "admin" } } |
build.gradle詳細(xì)信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
liumiaocn:springboot liumiao$ cat build.gradle buildscript { ext { springbootversion = '2.1.1.release' } repositories { mavencentral() } dependencies { classpath( "org.springframework.boot:spring-boot-gradle-plugin:${springbootversion}" ) } } plugins { id "org.sonarqube" version "2.6.2" } sonarqube { properties { property "sonar.host.url" , "http://localhost:32003" property "sonar.login" , "admin" property "sonar.password" , "admin" } } apply plugin: 'java' apply plugin: 'jacoco' apply plugin: 'org.sonarqube' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' group = 'com.liumiaocn' version = '0.0.1-snapshot' sourcecompatibility = 1.8 repositories { mavencentral() } dependencies { implementation( 'org.springframework.boot:spring-boot-starter-web' ) testimplementation( 'org.springframework.boot:spring-boot-starter-test' ) } jacocotestreport { reports { xml.enabled false html.enabled true } } check.dependson jacocotestreport liumiaocn:springboot liumiao$ |
掃描方式
可以使用gradle sonarqube即可進(jìn)行掃描
執(zhí)行日志
liumiaocn:springboot liumiao$ gradle sonarqube
> task :sonarqube
scm provider autodetection failed. no scm provider claims to support this project. please use sonar.scm.provider to define scm of your project.
class not found: javax.annotation.nonnull
class not found: javax.annotation.meta.when
class not found: javax.annotation.meta.typequalifiernickname
class not found: org.junit.jupiter.api.extension.extendwith
build successful in 6s
5 actionable tasks: 1 executed, 4 up-to-date
liumiaocn:springboot liumiao$
結(jié)果確認(rèn)
掃描結(jié)果確認(rèn)
可以看到質(zhì)量掃描結(jié)果和覆蓋率的信息都進(jìn)行了顯示
脆弱性信息詳細(xì)
查出了一個(gè)缺陷,實(shí)際是一個(gè)誤報(bào),詳細(xì)可參看maven使用方式的詳細(xì)介紹。
代碼覆蓋率
代碼覆蓋率的詳細(xì)信息也可以在sonarqube上進(jìn)行直接確認(rèn)
小結(jié)
使用sonarqube可以很好的檢查出代碼的問題,但是在實(shí)際的項(xiàng)目中需要進(jìn)行裁剪和定制,掃出來的不一定有問題,沒有掃出來也不一定萬事大吉,但是一定程度的代碼規(guī)范和質(zhì)量提高還是很有用處,實(shí)際在使用的時(shí)候應(yīng)該根據(jù)具體情況進(jìn)行實(shí)施。
參考文章
- https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Gradle
- https://plugins.gradle.org/plugin/org.sonarqube
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)服務(wù)器之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
原文鏈接:https://blog.csdn.net/liumiaocn/article/details/84230429