【问题标题】:Sonar properties files声纳属性文件
【发布时间】:2014-03-22 23:27:02
【问题描述】:

我有一个具有以下包结构的项目

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)

【问题讨论】:

    标签: java sonarqube


    【解决方案1】:

    您可以定义一个Multi-module project structure,然后您可以在项目根文件夹的一个属性文件中设置声纳的配置,(Way #1)

    【讨论】:

    • 这正是我尝试过的 - 请在尝试该方法后查看编辑和问题
    【解决方案2】:

    如果模块名称与您的模块目录不匹配,您必须指定 projectBaseDir

    由于您的两个模块都位于“.”中,您只需将以下内容添加到您的声纳项目属性中:

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

    Sonar 会将您的模块作为项目的组件处理:

    编辑

    如果您的两个模块都位于同一源目录中,请为两者定义相同的源文件夹并使用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

    【讨论】:

    • 这种做法会导致新的错误 = Caused by: org.sonar.squid.api.AnalysisException: Got an exception - org.sonar.squid.api.AnalysisException: 源目录不对应包声明 com.company.package,文件:pathtofile/myclass.java,行:0
    • 如果您的模块源位于同一文件夹中,请尝试为两个模块指定正确的源文件夹,并使用“sonar.exclusions”排除不需要的包。
    • 我编辑了我的答案以解决 AnalysisException。
    • 现在试一试 - 项目需要一段时间才能构建:p
    【解决方案3】:

    首先在没有配置声纳的情况下在 Jenkins 上执行构建工作。然后添加 Sonar,并再次运行构建作业。应该解决问题

    【讨论】:

      猜你喜欢
      • 2019-07-19
      • 2013-05-20
      • 2016-03-06
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 2015-12-19
      • 2013-11-22
      • 2013-09-02
      相关资源
      最近更新 更多