最近在學習使用sonar掃描程式碼,已經成功掃描python專案,而掃描java程式碼不成功。
在網上找到的掃描java專案文章,經過嘗試之後也沒有成功。
本人自己研究了sonar官方的使用說明文章,將其翻譯成中文。
前言
建議將用於Maven的SonarScanner作為Maven專案的預設掃描程式。
通過常規Maven目標執行SonarQube分析的能力使得它可以在任何Maven可用的地方使用(開發人員構建、CI伺服器等),不需要手動下載、安裝和維護SonarQube Runner安裝。Maven構建已經擁有SonarQube成功分析專案所需的許多資訊。通過基於這些資訊預先配置分析,手動配置的需求大大減少。
前提條件
- 使用Maven 3.0及以上版本
- 至少使用了您的SonarQube伺服器支援的最小版本的Java(其實就是要注意jdk的版本,這裡可能要注意一下,現在sonarqube最低要求的jdk版本是11,而SonarScanner最低要求的版本是8,最好就使用11版本吧)
全域性設定
編輯setting.xml檔案,位置在$MAVEN_HOME/conf或者~/.m2,來設定外掛字首和可選的SonarQube伺服器URL。按我的理解,需要把“http://myserver:9000”改成是自己所搭建的sonarqube伺服器地址,其他地方應該不需要改動。
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>
http://myserver:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
</settings>
掃描
掃描Maven專案包括執行一個Maven目標路徑:這是從儲存主專案pom.xml的目錄中獲取。 你需要在掃描命令中加入認證token,如下:
mvn clean verify sonar:sonar -Dsonar.login=myAuthenticationToken
在某些情況下,您可能想執行sonar:sonar作為專用步驟。對於多模組專案,第一步是安裝。如下:
mvn clean install
mvn sonar:sonar -Dsonar.login=myAuthenticationToken
要指定snoar-maven外掛的版本而不是使用最新版本,如下:
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar
要獲得掃描覆蓋率資訊,您需要在分析之前生成覆蓋率報告。
配置分析
大多數分析屬性將從專案中讀取。如果您想覆蓋指定附加引數的預設值,請配置pom.xml檔案的 部分,如下:
<properties>
<sonar.buildString> [...] </sonar.buildString>
</properties>
示例專案
為了幫助你開始,可以使用這個簡單的示例專案:https://github.com/SonarSource/sonar-scanning-examples/tree/master/sonarqube-scanner-maven
可在下面地址直接下載壓縮包:https://github.com/SonarSource/sonar-scanning-examples
排除掃描的模組
- 在pom.xml檔案的 <sonar.skip>true</sonar.skip> 定義要排除的模組的屬性
- 使用構建概要檔案排除某些模組(如整合測試)
- 使用前置的選項(例如“-pl”)。如mvn sonar:sonar -pl !module2
如何修復Maven外掛的版本
建議鎖定Maven外掛的版本:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.7.0.1746</version>
</plugin>
</plugins>
</pluginManagement>
</build>
故障排除
如果你遇到java.lang.OutOfMemoryError,設定MAVEN_OPTS環境變數,就像在*nix環境中這樣:
export MAVEN_OPTS="-Xmx512m"
在Windows環境中,避免使用雙引號,因為它們會被誤解。
set MAVEN_OPTS=-Xmx512m
原文連結
本篇文章基於20210926的官網文章,翻譯之中可能有不夠恰當的地方,推薦直接閱讀官方文件。
原文連結如下:
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-maven/