2014-02-21 44 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,并再次运行构建作业。应该修复问题