2014-02-21 46 views
10

我有了以下的封裝結構聲納屬性文件

src/main/proj 
    -com.company.package 
     -appName 
      -morepackages 

     -appVersion2 
      -morepackages 

sonar-runner.properties 
sonarBuild.sh 
sonar-runner-project2.properties 
sonarBuildProject2.sh 

因爲它代表一個項目,使用默認的屬性文件,我可以運行聲吶報告,它會產生對整個項目審查

sonar.projectKey=KEY 
sonar.projectName=PROJNAME 
sonar.projectVersion=1.0 

sonar.host.url=someurl 

#Path for sonar sources 
sonar.sources=src/main/java 

#Path for libraries 
sonar.libraries=target/lib/*.jar 

#Path for binaries 
sonar.binaries=target/classes 

#--------Default database 
sonar.jdbc.url=someurl 
sonar.jdbc.driver=com.mysql.jdbc.Driver 

#----- Global database settings 
sonar.jdbc.username=sonar 
sonar.jdbc.password=sonar 

#----- Default directory layout 
sonar.java.source=1.6 
sonar.java.target=1.6 

sonar.sourceEncoding=UTF-8 

然而理想,我想,所以我有一個原裝包和一個用於appVersion2包的兩份報告分開。現在 - 如上所述,我爲每個文件創建了一個單獨的屬性文件。我是不是應該將sonar.sources分別指向每個作業的相應軟件包進行分析,還是有更好的方法可以在一個屬性文件中執行此操作?

感謝

編輯

我的多模塊嘗試性文件看起來如下

sonar.projectKey=rootkey 
sonar.projectName=rootname 
sonar.projectVersion=1.0 
sonar.host.url=rooturl 
sonar.sources=src/main/java/ 
sonar.libraries=target/lib/*.jar 
sonar.modules=module1,module2 
sonar.sourceEncoding=UTF-8 

#----- Global database settings 
sonar.jdbc.username=user 
sonar.jdbc.password=pass 

sonar.java.source=1.7 
sonar.java.target=1.7 


#--------Default database 
sonar.jdbc.url=url 
sonar.jdbc.driver=com.mysql.jdbc.Driver 


module1.sonar.projectName=proja 
module2.sonar.projectName=projb 

module1.sonar.projectKey=projakey 
module2.sonar.projectKey=projbkey 

#Path for sonar sources 
module1.sonar.sources=src/main/java/app1code 
module2.sonar.sources=src/main/java/app2code 

#Path for binaries 
module1.sonar.binaries=target/classes/app1binaries 
module2.sonar.binaries=target/classes/app2binaries 

我在輸出說法得到一個錯誤....

Exception in thread "main" org.sonar.runner.RunnerException: org.sonar.runner.RunnerException: The base directory of the module 'module1' does not exist: patthtoapp/module1 
    at org.sonar.runner.Runner.delegateExecution(Runner.java:288) 
    at org.sonar.runner.Runner.execute(Runner.java:151) 
    at org.sonar.runner.Main.execute(Main.java:84) 
    at org.sonar.runner.Main.main(Main.java:56) 
Caused by: org.sonar.runner.RunnerException: The base directory of the module 'module1' does not exist: pathtoapp/module1 
    at org.sonar.runner.internal.batch.SonarProjectBuilder.setProjectBaseDir(SonarProjectBuilder.java:279) 
    at org.sonar.runner.internal.batch.SonarProjectBuilder.loadChildProject(SonarProjectBuilder.java:191) 
    at org.sonar.runner.internal.batch.SonarProjectBuilder.defineChildren(SonarProjectBuilder.java:169) 
    at org.sonar.runner.internal.batch.SonarProjectBuilder.generateProjectDefinition(SonarProjectBuilder.java:122) 
    at org.sonar.runner.internal.batch.Launcher.execute(Launcher.java:58) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.sonar.runner.Runner.delegateExecution(Runner.java:285) 

回答

21

你必須指定projectBaseDir如果模塊名稱不匹配您模塊目錄。

由於兩個你的模塊都位於,你可以簡單地添加以下到您的聲納項目屬性「」:

module1.sonar.projectBaseDir=. 
module2.sonar.projectBaseDir=. 

聲納將處理您的模塊作爲項目的組成部分:

Result of Sonar analysis

編輯

如果同時你模塊的再在同一源目錄,定義上是相同的源文件夾,並與sonar.exclusions排除不需要的包:

module1.sonar.sources=src/main/java 
module1.sonar.exclusions=app2code/**/* 

module2.sonar.sources=src/main/java 
module2.sonar.exclusions=app1code/**/* 

More details about file exclusion

+0

此方法導致新的錯誤=引起:org.sonar.squid.api.AnalysisException:得到一個例外 - org.sonar.squid.api.AnalysisException:源目錄不對應於包聲明com.company.package,file:pathtofile/myclass.java,行:0 – Biscuit128

+0

如果您的模塊源位於相同的文件夾中,請嘗試指定兩個模塊的正確源代碼文件夾,並使用「sonar.exclusions」排除不需要的軟件包。 –

+0

我編輯了我的答案以解決AnalysisException。 –

0

先做對詹金斯的構建工作沒有聲納配置。然後添加Sonar,並再次運行構建作業。應該修復問題