sonar扫描普通JAVA执行,SonarQube扫描源代码的方法
SonarQube掃描源代碼的方法
雷建鋒
一、分析源代碼綜述
一旦成功安裝了SonarQube平臺(tái),您就可以開始安裝一個(gè)分析器并開始創(chuàng)建項(xiàng)目了。在第一次分析時(shí),該平臺(tái)會(huì)自動(dòng)創(chuàng)建一個(gè)項(xiàng)目。如果您需要在第一個(gè)分析之前在項(xiàng)目上設(shè)置一些配置,那么您可以選擇配置它。
1.分析范圍:文件類型和數(shù)據(jù)類型
SonarQube可以對(duì)20多種不同的語(yǔ)言進(jìn)行分析。這種分析的結(jié)果將是質(zhì)量度量和問(wèn)題(編碼規(guī)則被破壞的實(shí)例)。然而,分析的內(nèi)容會(huì)因語(yǔ)言而異:
l? 在所有語(yǔ)言中,“(blame)責(zé)備”數(shù)據(jù)將自動(dòng)從支持的SCM提供者中導(dǎo)入。Git和SVN都是自動(dòng)支持的。其他提供商需要額外的插件。
l? 在所有語(yǔ)言中,都執(zhí)行對(duì)源代碼的靜態(tài)分析(Java文件、COBOL程序等)
l? 可以對(duì)某些語(yǔ)言執(zhí)行編譯后的代碼的靜態(tài)分析(Java中的類文件,c#的dll文件等等。)
l? 可以對(duì)某些語(yǔ)言執(zhí)行對(duì)代碼的動(dòng)態(tài)分析
2.無(wú)法識(shí)別的文件
默認(rèn)情況下,只有在分析過(guò)程中,才會(huì)將被語(yǔ)言插件識(shí)別的文件加載到項(xiàng)目中。例如,如果您的SonarQube實(shí)例上有Java和JavaScript插件,那么所有.Java和.js文件都會(huì)被加載,但是.xml文件將被忽略。
3.分析過(guò)程中
在分析過(guò)程中,從服務(wù)器請(qǐng)求數(shù)據(jù),分析文件,然后以報(bào)告的形式將結(jié)果數(shù)據(jù)發(fā)送回服務(wù)器,然后在服務(wù)器端異步分析。分析報(bào)告是排隊(duì)的,并按順序處理,因此很有可能在您的分析日志顯示完成之后的一個(gè)短暫的時(shí)間內(nèi),更新后的值在SonarQube項(xiàng)目中是不可見的。但是,您將能夠知道發(fā)生了什么,因?yàn)橐粋€(gè)圖標(biāo)將被添加到項(xiàng)目名稱旁邊。鼠標(biāo)懸停在上面以獲得更詳細(xì)的信息(如果您使用適當(dāng)?shù)臋?quán)限登錄,則會(huì)鏈接到鏈接)。
一旦處理完成,圖標(biāo)就會(huì)消失,但是如果分析報(bào)告處理失敗了,那么圖標(biāo)將會(huì)改變:
4.運(yùn)行分析
首先,您應(yīng)該為將要分析的項(xiàng)目的語(yǔ)言安裝插件,可以直接下載,也可以通過(guò)更新中心下載安裝;然后,您需要選擇一個(gè)分析方法。以下是可用的:
·??????? :?分析.net項(xiàng)目
·??????? :
Launch analysis from Maven with minimal configuration
·??????? :?Launch Gradle analysis
·??????? : Launch analysis from Ant
·??????? : Launch analysis from Jenkins
·??????? :?當(dāng)其他分析程序都不合適時(shí),從命令行啟動(dòng)分析。
注意,我們不建議在SonarQube分析運(yùn)行的機(jī)器上運(yùn)行防病毒掃描器,它可能導(dǎo)致不可預(yù)測(cè)的行為。
5.?? FAQ
Q.分析報(bào)錯(cuò):java.lang.OutOfMemoryError:
GC overhead limit exceeded.這個(gè)應(yīng)該怎么處理?
A.這意味著您的項(xiàng)目太大或太復(fù)雜,以至于掃描器無(wú)法用默認(rèn)的內(nèi)存分配進(jìn)行分析。要解決這個(gè)問(wèn)題,您需要將較大的內(nèi)存(使用-Xmx數(shù)值)分配給運(yùn)行分析的進(jìn)程,一些CI引擎可能會(huì)給你一個(gè)輸入來(lái)指定必要的值,例如,如果你在Jenkins的工作中使用Maven構(gòu)建步驟來(lái)運(yùn)行分析。否則,使用Java選項(xiàng)來(lái)設(shè)置更高的值。請(qǐng)注意,這里省略了設(shè)置Java選項(xiàng)的細(xì)節(jié),因?yàn)樗鼈兏鶕?jù)環(huán)境的不同而有所不同。
二、
1.
特性Feature
SonarQube Scanner是默認(rèn)用于分析SonarQube項(xiàng)目的啟動(dòng)器。
2.
安裝
1)
下載軟件,并解壓到,下載地址:
2)
更新全局設(shè)置以指向您的SonarQube服務(wù)器,打開并編輯編輯/conf/sonar-scanner.properties:
#-----
Default SonarQube server
sonar.host.url= #sonar.host.url配置的是實(shí)際sonar服務(wù)器的地址
3)
將?/bin?目錄添加到系統(tǒng)環(huán)境變量"path"中
4)
驗(yàn)證安裝是否成功:打開cmd面板,輸入sonar-scanner -h,出現(xiàn)下圖,則表示環(huán)境變量設(shè)置成功:
如果您需要更多的調(diào)試信息,您可以添加sonar.verbose屬性,添加命令行參數(shù)-Dsonar.verbose=true。
3.
用法use
1)在項(xiàng)目的根目錄中創(chuàng)建一個(gè)配置文件:?sonar-project.properties
\
需要注意的是,需要分析的源碼在windows系統(tǒng)上的,路徑分隔符需要將'\'替換為'/'。
2)
按照官方文檔設(shè)置配置文件時(shí)候,sonar scanner掃描報(bào)錯(cuò)“Please provide compiled classes of your project with
sonar.java.binaries property”,解決辦法是在sonar-project.properties
文件中增加一行
sonar.java.binaries=項(xiàng)目路徑/target/classes
以下是一個(gè)實(shí)際項(xiàng)目的配置文件:
# must be
unique in a given SonarQube instance
sonar.projectKey=game-of-life
# this is the
name and version displayed in the SonarQube UI. Was mandatory #prior to
SonarQube 6.1.
sonar.projectName=game-of-life
sonar.projectVersion=1.0
#sonar.language=java
# Path is
relative to the sonar-project.properties file. Replace "\" by
"/" on #Windows.
# This property
is optional if sonar.modules is set.
sonar.sources=.
# Encoding of
the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
sonar.java.binaries=C:/game-of-life-master/gameoflife-core/build/classes
3)
進(jìn)行項(xiàng)目根目錄,也即sonar-project.properties文件所在目錄,運(yùn)行命令sonar-scanner
4)
若分析成功,則出現(xiàn)如下界面:
5)
登錄sonar服務(wù)器,會(huì)發(fā)現(xiàn)多了一個(gè)項(xiàng)目,即剛剛分析的項(xiàng)目。
6)
安全
任何授予執(zhí)行分析權(quán)限的用戶都可以進(jìn)行分析。如果任何一個(gè)組沒(méi)有被授予執(zhí)行分析權(quán)限,或者SonarQube實(shí)例被保護(hù)(屬性被設(shè)置為true),具有執(zhí)行分析權(quán)限的用戶的分析令牌必須通過(guò)?sonar.login屬性提供。舉例::?sonar-scanner -Dsonar.login=[my
analysis token]
4.
故障排除troubleshooting
5.?????? Going Future
三、
特性
建議對(duì)Java Maven項(xiàng)目使用此分析器進(jìn)行分析。
先決條件
l? Maven 3.x
l? SonarQube已經(jīng)完成
l? 至少您的SonarQube服務(wù)器支持的最小版本的Java是在使用的(最新LTS的Java 8)
l? 您希望分析的每種語(yǔ)言的語(yǔ)言插件都已安裝
l? 您已經(jīng)閱讀了
初始設(shè)置:全局設(shè)置
編輯位于$ MAVEN_HOME
/ conf或?/ .m2中的settings.xml文件。有三個(gè)地方需要新增:1)本地倉(cāng)庫(kù)路徑localRepository? 2)pluginGroup 3)sonar配置。舉例:
D:/maven/repo? #替換成本地repo倉(cāng)庫(kù)
org.sonarsource.scanner.maven
sonar
true
#替換成自己sonar服務(wù)器的實(shí)際RUL
分析一個(gè)Maven項(xiàng)目
分析一個(gè)Maven項(xiàng)目包括在pom.xml文件所在的目錄中運(yùn)行Maven目標(biāo):sonar:sonar
mvn clean verify sonar:sonar
# In some situation you may want to run sonar:sonar goal as a dedicated
step. Be sure to use install as first step for multi-module projects
mvn clean install
mvn sonar:sonar
# Specify the version of sonar-maven-plugin instead of using the latest.
See also 'How to Fix Version of Maven Plugin' below.
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.1.1170:sonar
舉例:
xmlns:xsi=""
xsi:schemaLocation="
">
D:/maven/repo
org.sonarsource.scanner.maven
sonar
true
分析完成后,若分析成功,則會(huì)出現(xiàn)這樣的界面
打開SonarQube系統(tǒng),發(fā)現(xiàn)新項(xiàng)目已經(jīng)體現(xiàn)在系統(tǒng)中的了
要獲得覆蓋率信息,您需要在分析之前生成覆蓋率報(bào)告。有關(guān)更多信息,請(qǐng)參閱。
四、
五、其他
sonarlint和pylint,與IDE結(jié)合使用非常好。
總結(jié)
以上是生活随笔為你收集整理的sonar扫描普通JAVA执行,SonarQube扫描源代码的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: deepinu盘制作工具_u盘启动盘制作
- 下一篇: python下载文件暂停恢复_Pytho