使用Sonar做代碼分析時,有很多種途徑,但是推薦使用Sonar Runner。
本節描述基於Sonar Runner 2.0+
如有不懂,mailto : [email protected].
前提準備
你必須提前下載,並安裝Sonar Runner。下載:
http://repository.codehaus.org/org/codehaus/sonar-plugins/sonar-runner/2.0/sonar-runner-2.0.zip<!--[if !supportNestedAnchors]--><!--[endif]-->
安裝配置請參考前面章節中
簡單工程
在項目根路徑下,創建配置文件,文件名爲sonar-project.properties。sonar-runner執行分析時,會讀取該文件。
文件內容示意: sonar-project.properties
# required metadata
sonar.projectKey=my:project
sonar.projectName=My project
sonar.projectVersion=1.0
# path to source directories (required)
sonar.sources=srcDir1,srcDir2
# path to test source directories (optional)
sonar.tests=testDir1,testDir2
# path to project binaries (optional), for example directory of Java bytecode
sonar.binaries=binDir
# optional comma-separated list of paths to libraries. Only path to JAR file and path to directory of classes are supported.
sonar.libraries=path/to/library.jar,path/to/classes/dir
# The value of the property must be the key of the language.
sonar.language=cobol
# Additional parameters
sonar.my.property=value
配置好上述文件後,從命令行在根路徑下執行下面命令啓動項目的代碼分析。
sonar-runner
爲了幫助新手儘快入門,github存取服務上存放簡單的示例代碼,可供瀏覽和下載。
多模塊工程
在Sonar分析時可以使用兩種方式配置項目的結構。一種需要在項目下配置一個總文件,一種可以在每個模塊下各自配置一個文件。
方式一:
將所有的配置放在一個sonar-project.properties文件,並放在項目的根路徑下。
文件內容示意:
# Root project information
sonar.projectKey=org.mycompany.myproject
sonar.projectName=My Project
sonar.projectVersion=1.0-SNAPSHOT
# Some properties that will be inherited by the modules
sonar.sources=src
# List of the module identifiers
sonar.modules=module1,module2
# Properties can obviously be overriden for
# each module - just prefix them with the module ID
module1.sonar.projectName=Module 1
module2.sonar.projectName=Module 2
方式二:
每個模塊下的配置放在各自的獨立文件中。
配置示意:
總配置的內容 "MyProject/sonar-project.properties"
# Root project information
sonar.projectKey=org.mycompany.myproject
sonar.projectName=My Project
sonar.projectVersion=1.0-SNAPSHOT
# Some properties that will be inherited by the modules
sonar.sources=src
# List of the module identifiers
sonar.modules=module1,module2
子配置一 "MyProject/module1/sonar-project.properties"
# Redefine properties
# Note that you do not need to prefix the property here
sonar.projectName=Module 1
子配置二 "MyProject/module2/sonar-project.properties"
# Redefine properties
# Note that you do not need to prefix the property here
sonar.projectName=Module 2
值得注意:
1、子配置繼承於父配置,子配置將可以覆蓋父配置,通過兩種方法:
在父配置中配置屬性前增加模塊標識前綴。
在子配置中直接定義配置。
2、特殊情況可以指定根目錄
默認情況下,模塊的根目錄默認爲模塊的標識符(如上面的示例)。特殊情況下,可以在配置文件中使用“sonar.projectBaseDir”屬性來指定根目錄。如:
module1.sonar.projectBaseDir=My Module One #含空格
module1.sonar.projectBaseDir=modules/mod1 #多層級
module2.sonar.projectBaseDir=modules/mod2
3、多模塊項目使用Sonar做分析時不能只指定一個源代碼目錄。
爲了幫助儘快入門,這裏依然有部分示意代碼。你可以瀏覽和下載。
4、相同結構的多模塊projects/languages/java/sonar-runner/java-sonar-runner-modules-same-structure
5、不同結構的多模塊projects/languages/java/sonar-runner/java-sonar-runner-modules-different-structures
6、模塊獨自配置projects/languages/java/sonar-runner/java-sonar-runner-modules-own-configuration-file
多模塊多語言功能
從Sonar3.3開始,Sonar支持多語言多模塊工程的代碼分析。
而配置也極其簡單,只需在多模塊工程的基礎上增加一個語言屬性的配置,如:
module.sonar.language
module1.sonar.language=java
module2.sonar.language=javascript
爲了幫助儘快入門,這裏依然有部分示意代碼。你可以瀏覽和下載。項目路徑:
projects/languages/multi-language/multi-language-java-javascript-sonar-runner
高級用法
如果不在項目的工程的根路徑創建sonar-project.properties文件,還可以進行其他選擇。
1、通過command命令行直接指定:
sonar-runner -Dsonar.projectKey=myproject -Dsonar.sources=src1 ..
2、通過command命令行指定配置文件路徑: 'project.settings'
sonar-runner -Dproject.settings=../myproject.properties
通過設置'sonar.working.directory'屬性可以設置Sonar的工作目錄,默認爲'.sonar'
通過設置'project.home'屬性可以指定項目的根路徑。根路徑下必須包含sonar-project.properties配置文件(除非執行指令時顯示給定路徑。)
命令行執行分析時,可以追加參數。參數。
疑難解答
對於較大的工程項目,經常出現內存不夠的問題,需要設置虛擬機的內存。
export SONAR_RUNNER_OPTS="-Xmx512m -XX:MaxPermSize=128m"
在Window環境下:
set SONAR_RUNNER_OPTS=-Xmx512m -XX:MaxPermSize=128m
從Sonar Runner 1.X向2.0遷移
只需將以下屬性名替換爲新屬性名即可:
sources => sonar.sources
tests => sonar.tests
binaries => sonar.binaries
libraries => sonar.libraries
在sonar-project.properties文件明確設置sonar.sourceEncoding屬性。